我刚刚学习openGL,我刚刚发现我应该使用可编程管道而不是固定管道。
因此,我开始使用VAO来制作一系列顶点。这意味着使用以下功能:
glGenVertexArrays
,glBindVertexArray
等等。
这些功能都是glew库的一部分。并且我得出结论,glew库存在问题,因为没有glew-methods工作。
我收到此错误消息:
CUBE.exe中0x00000000处抛出异常:0xC0000005:访问冲突执行位置0x00000000。
我已经阅读了有关此错误消息的所有论坛以及关于功能失效的glew的论坛而没有任何成功..
如果尝试使用该技巧来设置glewExperimental = GL_TRUE
;
我试图创建一个上下文。
和ofc。检查glew库是否正确链接。
我还在任何与glew相关的方法调用之前放了glewInit()
。
还有更多..
所以这是漫长的一天.. 这是我的代码供参考。
#include <stdio.h>
#include <GL\glew.h>
#include <GL\glut.h>
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
void Initialize() {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}
void init(void) {
glewInit();
GLuint arrayID;
glGenVertexArrays(1, &arrayID);
glBindVertexArray(arrayID);
static const GLfloat g_vertex_buffer_data[] = {
-1.0f,-1.0f,-1.0f, // triangle 1 : begin
-1.0f,-1.0f, 1.0f,
-1.0f, 1.0f, 1.0f, // triangle 1 : end
1.0f, 1.0f,-1.0f, // triangle 2 : begin
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f,-1.0f, // triangle 2 : end
1.0f,-1.0f, 1.0f,
-1.0f,-1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f, 1.0f,-1.0f,
1.0f,-1.0f, 1.0f,
-1.0f,-1.0f, 1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f,-1.0f, 1.0f,
1.0f,-1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f, 1.0f,
1.0f,-1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f,-1.0f,
-1.0f, 1.0f,-1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
1.0f,-1.0f, 1.0f
};
GLuint vertexBuffer;
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data),
g_vertex_buffer_data, GL_STATIC_DRAW);
glEnableVertexAttribArray(1);
glVertexAttribPointer(
1,
3,
GL_FLOAT,
GL_FALSE,
0,
(void*)0
);
glDrawArrays(GL_TRIANGLES, 0, 12 * 3);
}
int main(int iArgc, char** cppArgv) {
glutInit(&__argc,__argv);
glDrawArrays(GL_TRIANGLES, 0, 12 * 3);
glutInitDisplayMode(GLUT_RGBA);
glutInitWindowSize(950, 500);
glutInitWindowPosition(200, 200);
glutCreateWindow(__argv[0]);
wglCreateContext;
wglMakeCurrent;
glewExperimental = GL_TRUE;
Initialize();
init();
wglMakeCurrent;
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
我的代码中有一些不连贯的东西(一天中充满了不同尝试的结果),但重要的是,如果我清除了那些闪光的东西,我的程序将会显示一个窗口。
如果有任何相关性,我的OpenGL版本是3.3。