调用 glDrawArrays() 时的 OpenGL VBO Segfault
Posted
技术标签:
【中文标题】调用 glDrawArrays() 时的 OpenGL VBO Segfault【英文标题】:OpenGL VBO Segfault when calling glDrawArrays() 【发布时间】:2014-07-26 00:27:24 【问题描述】:我一直在尝试让 VBO 在我的最新项目中工作,但当我尝试调用 glDrawArrays 时,程序会出现段错误。
生成 VBO
bool Renderer::init()
GLfloat verticies[]=
0,0,
0,32,
32,32,
32, 0;
glGenBuffersARB(1, &vboTest);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboTest);
glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(verticies), verticies, GL_STATIC_DRAW);
然后渲染VBO
void Renderer::renderScene()
glClear(GL_COLOR_BUFFER_BIT);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboTest);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, 0);
glDrawArrays(GL_QUADS, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
glLoadIdentity();
SDL_GL_SwapWindow(window);
【问题讨论】:
您使用的是哪个 OpenGL 版本?你在使用着色器吗?当您尝试将 (X,Y) 坐标渲染为顶点时,我不确定 OpenGL 是如何工作的,尝试添加 Z 坐标并更改 glVertexPointer(2, GL_FLOAT, 0, 0);到 glVertexPointer(3, GL_FLOAT, 0, 0); 您确定在DrawArrays
中发生了段错误吗?什么是崩溃的堆栈跟踪?
实际上我想通了,这是一个非常愚蠢的错误,我使用 SDL_GL_GetProcAddress 加载函数,但我的主文件中有原型,但在渲染器头中我定义了 GL_EXT_PROTOTYPES 所以它试图通过 glext 函数指针访问它们。
【参考方案1】:
没关系,这是一个愚蠢的任意错误。我使用 SDL_GL_GetProcAddress 加载了函数,但随后在渲染器类的标头中定义了 GL_EXT_PROTOTYPES,而不是重新对函数进行原型设计。
【讨论】:
以上是关于调用 glDrawArrays() 时的 OpenGL VBO Segfault的主要内容,如果未能解决你的问题,请参考以下文章
我可以在调用 glDrawArrays 后删除 OpenGL 顶点数组吗?
在 Opengl ES 中在 FBO 上调用多个 glReadPixels 和 glDrawArrays
我可以在更新同一个“GL_ARRAY_BUFFER”时多次调用“glDrawArrays”吗?