c++ - glBindBuffer 崩溃 - 使用 glew 的 VBO 实现

标签 c++ opengl vbo

我一直在尝试在我的计算机上实现 VBO,但遇到了段错误:

Unhandled exception at 0x00000000 in attocube.exe: 0xC0000005: Access violation

错误出现在我在 void init() 中调用 glBindBuffer(GL_ARRAY_BUFFER, ID); 的行。 我使用了以下问题的代码:How to get VBO working

#include <windows.h>
#include <iostream>
#include <GL/glew.h>
#include <GL/freeglut.h>

#pragma comment(lib,"glew32.lib")

GLuint ID;

void init(){
    glewInit();
    glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
    glShadeModel(GL_FLAT);
    glEnableClientState(GL_VERTEX_ARRAY);
    float data[][2] = {{50,50},{100,50},{75,100}};
    glGenBuffers(1,&ID);
    glBindBuffer(GL_ARRAY_BUFFER, ID);
    glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW);
}

void reshape(int w, int h){
    glViewport(0,0, (GLsizei) w, (GLsizei) h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0f, (GLdouble) w, 0.0f, (GLdouble) h);
}

void display(){
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0.0f,0.0f,0.0f);
    glBindBuffer(GL_ARRAY_BUFFER, ID);
    glVertexPointer(2, GL_FLOAT, 2*sizeof(float), 0);
    glDrawArrays(GL_TRIANGLES,0,3);
    glFlush();  
}

int main(int argc, char **argv){
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(500,500);
    glutInitWindowPosition(300,300);
    glutCreateWindow(argv[0]);
    init();
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutMainLoop();
    return 0;
}

我的配置如下: Windows 7/Geforce GTX 570/glew 1.9.0

最佳答案

您的代码缺少对所需 OpenGL 版本可用性的任何检查(或者在您使用扩展的情况下,如果存在扩展)。您始终必须检查请求的功能是否确实存在。

参见 http://glew.sourceforge.net/basic.html 的第 2 段

现在顶点缓冲对象是一个非常普遍的特性,它们不太可能不可用。但崩溃表明这正是问题所在。因此,请确保正确安装了正确的驱动程序。

关于c++ - glBindBuffer 崩溃 - 使用 glew 的 VBO 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12736691/

相关文章:

c# - C# 程序如何使用任何版本的 C++ dll?

c - 为 OpenGL 生成顶点数组

c++ - 如何管理和组织动态和静态几何

c++ - #在 C++ 中定义一个没有空终止的字符数组

c++ - 使用 SVD 计算最佳拟合平面方程时出错

opengl - 实现使用统一 Sampler2D (lwjgl) 的片段着色器

macos - OpenGL 应用程序在我的 Mac 上失败,在 virtualbox 上运行

c++ - QGLBuffer 和 VBO

c++ - 同一解决方案中的头文件

java - OpenGL:模型显示不正确。 (需要固定绘制距离吗?)