gpt4 book ai didi

opengl-es - glDrawArrays问题

转载 作者:行者123 更新时间:2023-12-02 23:46:56 27 4
gpt4 key购买 nike

我有一个完全正常工作的绘图例程,如下所示:

glEnable(GL_TEXTURE_2D);
glMatrixMode(GL_MODELVIEW);
{
glBindTexture(GL_TEXTURE_2D, [texture name]);
GLsizei stride = sizeof(quads[0].tl);

glBindBuffer(GL_ARRAY_BUFFER, buffers[0]);

glBufferData(GL_ARRAY_BUFFER, sizeof(TQuad2D), quads, GL_STATIC_DRAW);
glVertexPointer(2, GL_FLOAT, stride, (void *)offsetof(TVertex2D, pos));
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(2, GL_FLOAT, stride, (void *)offsetof(TVertex2D, tex));
glEnableClientState(GL_TEXTURE_COORD_ARRAY);


glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}

glBindTexture(GL_TEXTURE_2D, 0);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);

在上面的之前或之后,我想画一条简单的线,如下所示。这本身工作正常,但如果我将它与上面的例程结合起来,它会给我一个 506 错误,即 GL_INVALID_FRAMEBUFFER_OPERATION .

GLfloat verts[4];
verts[0] = 0;
verts[1] = 0;
verts[2] = 600;
verts[3] = 600;

glColor4f(0.0f,1.0f,0.0f,1.0f);
glVertexPointer(2, GL_FLOAT, 0, &verts);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_LINES, 0, 2);
glDisableClientState(GL_VERTEX_ARRAY);
GLErrCheck(@"err");

我可能忘记重置某些 GL 状态,但我无法弄清楚。

最佳答案

您关于忘记重置某些状态的假设是正确的。只要缓冲区绑定(bind)到 GL_ARRAY_BUFFER,glVertexPointer 和类似函数的最后一个参数就会被解释为该缓冲区的偏移量,而不是像 &verts 那样的常规指针。您可以通过调用来重置此设置

glBindBuffer(GL_ARRAY_BUFFER, 0)

在第一个代码片段的末尾。

关于opengl-es - glDrawArrays问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4679405/

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