在Cocos2d中使用VBO时的exc_bad_access

时间:2011-04-22 15:02:04

标签: iphone opengl-es cocos2d-iphone

在我的iPhone应用程序中,我正在创建一个顶点缓冲区,如下所示:

-(id)initWithPoints:(NSArray *)polygonPoints andTexture: (CCTexture2D *) fillTexture{
self = [super init];
if(self){      
    int vertexCount = [polygonPoints count];
    CGPoint *vertices = (CGPoint*)malloc(sizeof(CGPoint)*vertexCount);
    GLushort *indices = (GLushort*)malloc(sizeof(GLushort)*2*vertexCount);

    int i = 0;
    for(NSValue *value in polygonPoints){
        CGPoint p = [value CGPointValue];
        vertices[i] = ccp(p.x, p.y);
        i++;
    }
    for (int k = 0; k<vertexCount; k++) {
        indices[k] = (GLushort)k;
    }

    NSLog(@"count: %i", vertexCount);
    glGenBuffers(1, &vertexBuffer);
    glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
    glBufferData(GL_ARRAY_BUFFER, vertexCount*sizeof(CGPoint), &vertices[0], GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);


    glGenBuffers(1, &indexBuffer);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, (vertexCount)*2*sizeof(GLushort), &indices[0], GL_STATIC_DRAW);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

    self.text = fillTexture;
}

return self;

}

我用它画画:

-(void)draw{
glBindTexture(GL_TEXTURE_2D, self.text.name);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);    
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);

glVertexPointer(2, GL_FLOAT, sizeof(CGPoint), 0);
glEnableClientState(GL_VERTEX_ARRAY);    

glDrawElements(GL_TRIANGLES, 1024, GL_UNSIGNED_SHORT, 0);

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

}

但是,我只能用1024个元素调用glDrawElements(大约~20,000)并且它们渲染正常。 如果我将其设置为(例如)1025,则应用程序将与EXC_BAD_ACCESS崩溃。

显然,应用程序在1024个元素崩溃是有原因的,但我无法理解它是什么。任何想法将不胜感激!

0 个答案:

没有答案