2016-10-05 8 views
-1

次のコードを取得することはできません。私はposition[]に記述する三角形をレンダリングしたいと思います。GLSLプログラムをリンクできません

このプログラムでは、時々シェーダのコンパイルエラーやプログラム間のエラー、場合によってはその間にコードを変更することなく両方を提供します。

プログラム:

Window window(TITLE, WIDTH, HEIGHT) // Context and glew gets init here 

float position[] = {-0.5, -0.5, 0.0, 
        0.5, -0.5, 0.0, 
        0.0, 0.5, 0.0}; 

// Shader program gets init 
sID = glCreateProgram(); 
vertexShaderID = glCreateShader(GL_Vertex_SHADER); 
fragShaderID = glCreateShader(GL_FRAGMENT_SHADER); 
glShaderSource(vertexShaderID, 1, vertexShaderCodeString); // The Code strings are valid, I printed them out 
glShaderSource(fragmentShaderID, 1, fragShaderCodeString); 

glCompileShader(vertexShaderID); 
glCompileShader(fragShaderID); 
shaderDidCompileCheck(vertexShaderID); // A function I wrote that checks for errors 
shaderDidCompileCheck(fragShaderID); 

glAttachShader(sID, vertexShaderID); 
glAttachShader(sID, fragShaderID); 

glLinkProgram(sID); 
programDidLinkCheck(); // A function I wrote that checks for errors 
glValidateProgram(sID); 

glUseProgram(sID); 
glBindAttribLocation(sID, 0, "position"); 
glUseProgram(0); 

// Defining VBOs and VAOs 
int bufferID; 
glGenBuffers(1, &bufferID); 
glBindBuffer(GL_ARRAY_BUFFER, bufferID); 
glBufferData(GL_ARRAY_BUFFER, 3 * 3 * sizeof(float), mDataPtr, GL_STATIC_DRAW); // I have 3 vertices with 3 coordinates each 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

int vaoID; 
glGenVertexArrays(1, &vaoID); 
glBindVertexArray(vaoID); 
glBindBuffer(GL_ARRAY_BUFFER, bufferID); 
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL); // I Want to load it to the index 0 of the VAO, the vertex size is 3, the data type is GL_FLOAT 
glBindBuffer(GL_ARRAY_BUFFER, 0); 
glBindVertexArray(0); 

glBindVertexArray(vaoID); 
glEnableVertexAttribArray(0); 
glBindVertexArray(0); 

// Main loop 
while(!window.close()) { 
    glClearColor(0.3, 0.8, 0.6, 1); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glUseProgram(sID); 
    glBindVertexArray(vaoID); 
    glDrawArrays(GL_TRIANGLES, 0, 1); 
    glBindVertexArray(0); 
    glUseProgram(0); 

    glfwSwapBuffers(mWindow); 
    glfwPollEvents(); 
} 

バーテックスシェーダ:

#version 410 
in vec3 position; 
out vec3 color; 

void main() { 
    gl_Position = vec4(position, 1.0); 
    color = vec3(position.x + 0.5, 0.5, position.y + 0.5); 
} 

フラグメントシェーダ:

#version 410 
in vec3 color; 
out vec4 outputColor; 

void main() { 
    outputColor = vec4(color, 1.0); 
} 
+1

リンカーまたはシェーダーがエラーコードを返す必要があります。そのエラーコードは何ですか? – Makketronix

+0

'glLinkProgram'の前に' glBindAttribLocation'を実行する必要があります。私は推薦する[www.learnopengl.com](http://learnopengl.com/) – Amadeus

+0

まあ、私が得るエラーコードは、私が自分で書いたデフォルトの文字列です。 –

答えて

0

私はあなたのコードのいくつかのタイプミスがあると思います。 "vertexShaderID = glCreateShader(GL_Vertex_SHADER)"と記述しますが、マクロは大文字 - > "GL_VERTEX_SHADER"で表示されます。 3つのパラメータを渡す代わりに、glShaderSource(vertexShaderID、1、vertexShaderCodeString、NULL)を試してください。

0

どのようにシェーダのソースコードを保存しましたか?バージョンの宣言の後に\n を持つようにしてください。そうしないと、#と同じ行にコードが残ってしまいます。

+0

文字列をチェックしましたが、それでも問題はありません....まあ、私はimmaがProject全体を最初から起動し、新しいグラフィックドライバをダウンロードしていると思います... –

関連する問題