gpt4 book ai didi

objective-c - 为什么我在 OpenGL ES for iOS 中使用 GL_UNSIGNED_SHORT 时得到 EXC_BAD_ACCESS?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:23:29 24 4
gpt4 key购买 nike

我需要做的是绘制一个包含超过 256 个元素的顶点数组。当我的数量少于那么多时,并且在调用 glDrawElements 时使用 GL_UNSIGNED_BYTE,一切正常。当我有超过 256 个元素时,它会再次从第一个顶点开始绘制(即,最后一个元素 [256 - 255,无论什么] 与第一个 [1 或 0] 连接,并且不会绘制更多元素)。如果我改用 GL_UNSIGNED_SHORT,我会得到 EXC_BAD_ACCESS。给了什么?

int indexLim = self.animIndex;

GLushort glIndLim = (GLushort)indexLim;

Vertex localVertices[glIndLim];
GLubyte localIndices[glIndLim];

for(GLushort i=0; i < glIndLim; i++)
{
x = (float)i;
y = [[data objectAtIndex:i ] floatValue];

x = x*xScale + xOffset;
y = y*yScale + yOffset;

localVertices[i].Position[0] = x;
localVertices[i].Position[1] = y;
localVertices[i].Position[2] = z;
localVertices[i].Color[0] = r;
localVertices[i].Color[1] = g;
localVertices[i].Color[2] = b;
localVertices[i].Color[3] = a;
localIndices[i] = i;
}

// setupVBOs
GLuint vertexBuffer;
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(localVertices), localVertices, GL_STATIC_DRAW);

GLuint indexBuffer;
glGenBuffers(1, &indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(localIndices), localIndices, GL_STATIC_DRAW);

glVertexAttribPointer(_positionSlot, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0);
glVertexAttribPointer(_colorSlot, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*) (sizeof(float) * 3));


//glDrawElements(GL_LINE_STRIP, glIndLim, GL_UNSIGNED_BYTE, 0); // Works, but only draws 256 elements
glDrawElements(GL_LINE_STRIP, glIndLim, GL_UNSIGNED_SHORT, 0); // EXC_BAD_ACCESS!!!!

最佳答案

你试过定义:

GLubyte localIndices[glIndLim];

作为

GLushort localIndices[glIndLim];

?

原因是,如果它应该代表您的顶点的索引,它应该接受 GLushort 的所有可能值,否则本地索引将始终是 GLubyte。

关于objective-c - 为什么我在 OpenGL ES for iOS 中使用 GL_UNSIGNED_SHORT 时得到 EXC_BAD_ACCESS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9242637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com