【发布时间】:2014-08-10 13:24:35
【问题描述】:
所以我想实现一个简单的 VBO,看看是否值得从我的场景中的静态对象的显示列表切换。到目前为止,我认为我不会很快这样做。所以这是我的问题:我可以很好地渲染顶点,但是只要我输入纹理坐标,它就会崩溃。所以我做了一些实验,因为我将纹理绑定到这个东西上。我从来没有听说过这是一个问题。从字面上看,使用显示列表的代码完全相同。这是我的代码:
//create a vertex buffer object for the particles to use
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
//create the data, this is really sloppy
float QuadVertextData[] = {0,0,0,1,0,0,1,1,0,0,1,0};
float QuadTextureData[] = {0,1,1,1,1,0,0,0};
glBufferData(GL_ARRAY_BUFFER, sizeof(float)*4*3, &QuadVertextData, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
//generate another buffer for the texcoords
glGenBuffers(1, &VBOT);
glBindBuffer(GL_ARRAY_BUFFER, VBOT);
glBufferData(GL_ARRAY_BUFFER, sizeof(float)*4*2, &QuadTextureData, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
和渲染:
glUseProgram(shader);
glBindTexture(GL_TEXTURE_2D, texture);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glVertexPointer(3, GL_FLOAT, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, VBOT);
glTexCoordPointer(2, GL_FLOAT, 0, 0);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glDrawArrays(GL_QUADS, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
我真的不知道为什么会这样,做一个没有着色器的纹理会导致它崩溃,绑定一个没有纹理的着色器会导致它崩溃。有什么帮助或建议吗?
【问题讨论】:
-
你能在调试模式下编译你的程序,在调试器中运行它,并从崩溃中得到回溯吗?
-
您应该能够准确地看到它在哪一行崩溃。
标签: opengl textures shader vbo