2017-12-31 50 views
-2

Linux上でOpenGLとGLFWで赤い四角形をレンダリングしようとしています。しかし、次のコードは単に黒い背景のウィンドウを生成し、私はその理由を理解できません。 GLCallマクロは単にエラーをチェックするためのもので、問題の原因ではありません。正方形をレンダリングするときのOpenGLの黒い画面

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

少なくともそこに欠けている 'glEnableVertexAttribArray(0);'。 – HolyBlackCat

答えて

1

は、私はあなたがglEnableVertexAttribArray(0);

1

てみて、追加含まれている必要があります確信しています:

glEnableVertexAttribArray(0); 

後:

GLCall(glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, (void*)0)); 
関連する問題