2017-05-06 43 views
1

我正在關注本網站www.learnopengl.com上的教程,並且在着色器教程的末尾,我嘗試將我自己的統一變量添加到片段着色器,像這樣:OpenGL着色器錯誤C1068:類型構造函數中的數據太多

#version 330 core 
in vec3 ourColor; 

out vec4 color; 
uniform vec4 changeColor; 

void main() 
{ 
    color = vec4(changeColor, 1.0f); 
} 

,我編譯和改變這樣的統一的變量:

ourShader.Use(); 
GLint fragColorUniformLocation = glGetUniformLocation(ourShader.Program, "changeColor"); 
glUniform4f(fragColorUniformLocation, 0.0f, 1.0f, 0.0f, 1.0f); 

ourShader.use()僅僅是一個類着色器的方法,這是我們在教程中對Shader操作中寫道,它只是簡單地使用上述着色器程序。

的OpenGL渲染一切就好了,當我註釋掉我勻變速和ourShader.use(後兩行)。但是,當我嘗試添加一個統一的變量,着色器編譯器抱怨說是類型構造太多的數據。我搜索了網頁,並找不到有用的東西,如果這是重複的,請告訴我,我將刪除該帖子。

回答

3

錯誤消息相當清楚:您將參數傳遞給無效的構造函數。在這種特殊情況下,嘗試將vec4 changeColor和一個額外的float傳遞到vec4構造函數(這意味着你通過5輛彩車):

vec4(changeColor, 1.0f); 

因爲它是相當不明確你想要做什麼(或者你爲什麼要將1.0f添加到vec4),但是您必須將changeColor更改爲vec3或刪除1.0f

+0

哦謝謝,我應該看到了。 –