2017-12-31 25 views
-2

Ich versuche, ein rotes Quadrat mit OpenGL und GLFW auf Linux zu rendern. Der folgende Code erzeugt jedoch einfach ein Fenster mit einem schwarzen Hintergrund und ich kann nicht herausfinden warum. Das GLCall-Makro dient nur zur Fehlerüberprüfung und ist nicht die Ursache des Problems.OpenGL schwarzer Bildschirm beim Rendern eines Quadrats

int main(){ 

    Window window(1280, 720); 

    float vertices[] = {-0.5f, -0.5f, 
         0.5f, -0.5f, 
         0.5f, 0.5f, 
         0.5f, 0.5f, 
         -0.5f, 0.5f, 
         -0.5f, -0.5f 
         }; 

    const char* vertexShader = "#version 330 core\n" 
         "layout (location = 0) in vec2 position;\n" 
         "void main(){\n" 
         "gl_Position = vec4(position, 0.0, 1.0);\n" 
         "}"; 

    const char* fragmentShader = "#version 330 core\n" 
      "out vec4 color;\n" 
      "void main(){\n" 
      "color = vec4(1.0f, 0.0f, 0.0f, 1.0f);\n" 
      "}"; 


    GLuint vao; 
    GLCall(glGenVertexArrays(1, &vao)); 
    GLCall(glBindVertexArray(vao)); 

    GLuint vbo; 
    GLCall(glGenBuffers(1, &vbo)); 
    GLCall(glBindBuffer(GL_ARRAY_BUFFER, vbo)); 
    GLCall(glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, (void*)0)); 
    GLCall(glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW)); 

    GLuint vshader = glCreateShader(GL_VERTEX_SHADER); 
    GLCall(glShaderSource(vshader, 1, &vertexShader, NULL)); 
    GLCall(glCompileShader(vshader)); 

    GLuint fshader = glCreateShader(GL_FRAGMENT_SHADER); 
    GLCall(glShaderSource(fshader, 1, &fragmentShader, NULL)); 
    GLCall(glCompileShader(fshader)); 

    GLuint shader = glCreateProgram(); 
    GLCall(glAttachShader(shader, vshader)); 
    GLCall(glAttachShader(shader, fshader)); 
    GLCall(glLinkProgram(shader)); 
    GLCall(glUseProgram(shader)); 

    while(window.isOpen()){ 
     glClear(GL_COLOR_BUFFER_BIT); 
     GLCall(glDrawArrays(GL_TRIANGLES, 0, 6)); 
     glfwSwapBuffers(window.getPointer()); 
     glfwPollEvents(); 
    } 

    return 0; 
} 
+2

Mindestens es fehlt 'glEnableVertexAttribArray (0);'. – HolyBlackCat

Antwort

1

Ich bin sicher, dass Sie glEnableVertexAttribArray(0);

1

Versuchen Hinzufügen muss Folgendes enthalten:

glEnableVertexAttribArray(0); 

nach:

GLCall(glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, (void*)0)); 
Verwandte Themen