c/c++开发分享在简单的OpenGL应用程序中“访问冲突读取位置0x000000000”

当使用缓冲区对象存储顶点数组时,我在openGL中遇到问题。 当我运行代码时,会出现一个窗口,显示消息“ 访问冲突读取位置0x000000000 ”,当我将光标移动到glGenBuufers函数旁边的箭头时,我看到描述: 这是当该线程从当前函数返回时执行的下一个语句

在简单的OpenGL应用程序中“访问冲突读取位置0x000000000”

码:

int frame=0; void display(); void datasource(); GLuint vbo; void datasource() { GLfloat vertex1[]={-1.000000 ,0.500000 ,-0.700000 ,0.500000 ,-1.000000 ,0.800000 ,-0.700000 ,0.800000 ,-0.400000 ,0.500000 ,-0.100000 ,0.500000 ,-0.400000 ,0.800000 ,-0.100000 ,0.200000 ,0.500000 ,0.500000 ,0.500000 ,0.200000 ,0.800000 ,0.500000,0.800000 ,0.800000 ,0.800000 ,0.500000 ,1.100000 ,0.500000 ,0.800000 ,0.800000 ,1.100000,0.800000 }; glGenBuffers(1,&vbo); glBindBuffer(GL_ARRAY_BUFFER,vbo); glBufferData(GL_ARRAY_BUFFER,sizeof(vertex1),vertex1,GL_STATIC_DRAW); } void init(int arc,char **arch) { glutInit(&arc,arch); glutInitWindowSize(800,800); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutCreateWindow("chess"); glClearColor(0.0,0.0,0.0,0.0); glutDisplayFunc(display); } int main(int arc,char **arch) { init(arc,arch); datasource(); glutMainLoop(); return 0; } void display() { frame++; glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glDrawArrays(GL_TRIANGLE_STRIP,0,8); glutSwapBuffers(); glutPostRedisplay(); } 

我做错了什么?

    glGenBuffers,glBindBuffer和glBufferData是Vertex Buffer Object 扩展或OpenGL-1.5的函数。 默认系统ABI仅转到OpenGL-1.2,因此您需要先加载扩展的OpenGLfunction才能使用它。 仅包含标题是不够的,因为那些只是为您提供未初始化的符号。

    最简单的方法:

    函数指针本身( glGenBuffers )可能是NULL ( 源 )。 当OpenGL系统尚未正确初始化时,会发生这种情况,并且调用NULL函数指针显然会导致段错误。 看一下glGenBuffers的地址,是NULL吗? 如果是,那么你在初始化代码的某个地方犯了一个错误。

      以上就是c/c++开发分享在简单的OpenGL应用程序中“访问冲突读取位置0x000000000”相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/546472.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注