Skip to content

Commit 4bbcd4c

Browse files
committed
Vertex paging for Metal.
1 parent e77c7d0 commit 4bbcd4c

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

cocos2d/CCNoARC.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -416,9 +416,9 @@ @implementation CCRenderCommandDrawMetal
416416
MTLPrimitiveTypeLine,
417417
};
418418

419-
-(instancetype)initWithMode:(CCRenderCommandDrawMode)mode renderState:(CCRenderState *)renderState first:(NSUInteger)first count:(size_t)count globalSortOrder:(NSInteger)globalSortOrder
419+
-(instancetype)initWithMode:(CCRenderCommandDrawMode)mode renderState:(CCRenderState *)renderState firstIndex:(NSUInteger)firstIndex vertexPage:(NSUInteger)vertexPage count:(size_t)count globalSortOrder:(NSInteger)globalSortOrder;
420420
{
421-
if((self = [super initWithMode:mode renderState:renderState first:first count:count globalSortOrder:globalSortOrder])){
421+
if((self = [super initWithMode:mode renderState:renderState firstIndex:firstIndex vertexPage:vertexPage count:count globalSortOrder:globalSortOrder])){
422422
// The renderer may have copied the render state, use the ivar.
423423
CCRenderStateMetalPrepare((CCRenderStateMetal *)_renderState);
424424
}
@@ -434,11 +434,11 @@ -(void)invokeOnRenderer:(CCRenderer *)renderer
434434
id<MTLBuffer> indexBuffer = ((CCGraphicsBufferMetal *)buffers->_indexBuffer)->_buffer;
435435

436436
CCMTL_DEBUG_PUSH_GROUP_MARKER(renderEncoder, @"CCRendererCommandDraw: Invoke");
437-
CCRendererBindBuffers(renderer, YES);
437+
CCRendererBindBuffers(renderer, YES, _vertexPage);
438438
CCRenderStateMetalTransition((CCRenderStateMetal *)_renderState, renderer, (CCRenderStateMetal *)renderer->_renderState);
439439
renderer->_renderState = _renderState;
440440

441-
[renderEncoder drawIndexedPrimitives:MetalDrawModes[_mode] indexCount:_count indexType:MTLIndexTypeUInt16 indexBuffer:indexBuffer indexBufferOffset:2*_first];
441+
[renderEncoder drawIndexedPrimitives:MetalDrawModes[_mode] indexCount:_count indexType:MTLIndexTypeUInt16 indexBuffer:indexBuffer indexBufferOffset:2*_firstIndex];
442442
CCMTL_DEBUG_POP_GROUP_MARKER(renderEncoder);
443443

444444
CC_INCREMENT_GL_DRAWS(1);

cocos2d/CCShader.m

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,8 @@ -(instancetype)initWithGLProgram:(GLuint)program uniformSetters:(NSDictionary *)
438438
CCGraphicsBufferMetal *vertexBuffer = (CCGraphicsBufferMetal *)renderer->_buffers->_vertexBuffer;
439439
id<MTLBuffer> metalBuffer = vertexBuffer->_buffer;
440440

441-
[context->_currentRenderCommandEncoder setVertexBuffer:metalBuffer offset:0 atIndex:vertexIndex];
441+
NSUInteger pageOffset = renderer->_vertexPageBound*(1<<16)*sizeof(CCVertex);
442+
[context->_currentRenderCommandEncoder setVertexBuffer:metalBuffer offset:pageOffset atIndex:vertexIndex];
442443
};
443444
} else {
444445
// If both args are active, they must match.

0 commit comments

Comments
 (0)