我一直在尝试在我的计算机上实现VBO,然后遇到了分段错误:
Unhandled exception at 0x00000000 in attocube.exe: 0xC0000005: Access violation
错误出现在我glBindBuffer(GL_ARRAY_BUFFER, ID);
void init()
中的#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;
}
。
我使用了以下问题的代码:How to get VBO working
{{1}}
我的配置如下: Windows 7 / Geforce GTX 570 / glew 1.9.0
答案 0 :(得分:2)
您的代码缺少对所需OpenGL版本可用性的任何检查(如果扩展存在,则使用扩展的情况)。您始终必须检查所请求的功能是否确实存在。
请参阅http://glew.sourceforge.net/basic.html
的第2段现在,顶点缓冲区对象是一个非常普遍的功能,它们不太可能无法使用。但崩溃表明这是一个非常大的问题。因此,请确保正确安装了正确的驱动程序。
答案 1 :(得分:1)
我在使用远程桌面连接的工作站上工作。我刚刚尝试直接在机器上运行代码,它可以工作。 VBO不适用于RDC。我感觉真的很蠢。非常感谢您的帮助。
答案 2 :(得分:0)
我使用GL&lt; 4.0。在glewExperimental = GL_TRUE;
解决之前设置glewInit();
。
答案 3 :(得分:0)
无论如何,除了远程桌面问题,使用GLEW检查VBO的代码是:
bool hasVBO = GLEW_ARB_vertex_buffer_object == TRUE;
bool hasVAO = GLEW_ARB_vertex_array_object == TRUE;
答案 4 :(得分:0)
对于那些仍然遇到此问题困难的人,如果从另一个不是渲染线程的线程调用glBindBuffer
,程序将崩溃。无论如何,至少在使用Allegro 5时。我通过将我的VBO代码移动到主线程来修复此问题,并且崩溃停止了。
答案 5 :(得分:0)
我让远程桌面在两台Win7 PC之间工作,运行OpenGL 4.3:
在批处理文件中,输入:
tscon 1 /dest:console /PASSWORD:yourPassword
cd C:\your\Exe\Folder
start yourProgram.exe
C:\Windows\System32\rundll32.exe user32.dll,LockWorkStation
以管理员身份运行它。 它将关闭会话,打开控制台(您的PC现在已登录,任何人都可以走,并按原样使用),启动程序并锁定屏幕。
然后您将使用远程桌面重新连接;并且您的程序应该使用服务器的图形硬件加速运行。
这假设您的远程会话是ID 1.要检查,请运行命令窗口“查询会话”,并查看以“&gt;”开头的行。