包含OpenGL GLEW成功,但不起作用

时间:2017-09-16 09:45:59

标签: opengl glew

我刚刚学习openGL,我刚刚发现我应该使用可编程管道而不是固定管道。

因此,我开始使用VAO来制作一系列顶点。这意味着使用以下功能: glGenVertexArraysglBindVertexArray等等。

这些功能都是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。

0 个答案:

没有答案