gpt4 book ai didi

opengl - 使用带有 glew 的 VBO 访问冲突

转载 作者:行者123 更新时间:2023-12-02 02:21:42 24 4
gpt4 key购买 nike

我正在尝试在我的 OpenGL 项目中使用 VBO。我正在使用 glew 库进行扩展,使用 glfw 进行 Windows 处理。当我尝试创建 VBO 应用程序崩溃时,我得到了

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

在函数 glGenBuffersARB 中。这是我的代码:

GLuint vboId1=0; //this is global variable

void createVBO(){
normalsVBO = (float *) malloc(sizeof(float)*3*(SIZE_X-1)*SIZE_Y*2);
verticesVBO = (float *) malloc(sizeof(float)*3*(SIZE_X-1)*SIZE_Y*2);
if(normalsVBO==NULL) exit(-1);
if(verticesVBO==NULL) exit(-1);

glGenBuffersARB(1, &vboId1); //HERE IT CRASHES!

// bind VBO in order to use
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboId1);

...
glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(float)*3*(SIZE_X-1)*SIZE_Y*2, verticesVBO, GL_DYNAMIC_DRAW);
glEnableClientState(GL_VERTEX_ARRAY); // activate vertex coords array
glVertexPointer(3, GL_FLOAT, 0, 0);

}

不知道怎么回事。当然,在调用此函数之前,我调用了 glewInit(),结果是成功的。编辑:我正在使用 Visual Studio 2010

最佳答案

由于您的程序在第一次使用 VBO 相关函数时失败,听起来您没有正确初始化 GLEW(通过在创建并激活 GL 上下文后调用 glewInit)或您的硬件只是不支持 VBO。

只需检查您的硬件是否支持 GL_ARB_vertex_buffer_object 或者 OpenGL 版本是否至少为 1.5,在这种情况下您可以使用 VBO 函数的核心版本(没有 ARB 后缀,但您仍然需要为这些正确初始化的 GLEW,当然):

printf("%s\n", glGetString(GL_VERSION));
if(!strstr(glGetString(GL_EXTENSIONS), "GL_ARB_vertex_buffer_object"))
//no VBO extension

并确保您使用最新的图形驱动程序。如果您使用 Windows 默认驱动程序,它可能只支持 OpenGL 1.1。

关于opengl - 使用带有 glew 的 VBO 访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7862041/

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