2017-05-06 10 views
1

私はこのサイトwww.learnopengl.com上のチュートリアルを、以下のAM、およびシェーダのチュートリアルの最後に、私はシェーダを断片化するために自分の制服変数を追加しようと、見えます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を()それは、我々はチュートリアルでシェーダ操作のために書いたクラスシェーダのちょうど方法であり、このような前記シェーダプログラムを単に使用するだけである。

ユニフォーム変数とourShader.use()の後の2行をコメントアウトすると、OpenGLはすべてうまくレンダリングしますが、ユニフォーム変数を追加しようとすると、シェイダーコンパイラは型コンストラクタにデータが多すぎると訴えます。私はウェブを検索し、何か有用なものを見つけることができませんでした。これが重複している場合は、私に教えてください。私はその投稿を削除します。

答えて

3

エラーメッセージがかなり明確である:あなたは有効ではありませんコンストラクタに引数を渡します。この特定のケースでは、vec4コンストラクタ(あなたが5台の山車を渡す意味)にvec4 changeColorと追加floatに合格しよう:あなたが何をしたいのか不明確であるので

vec4(changeColor, 1.0f); 

(あるいは、なぜあなたがしたいです)vec4に1.0Fを追加しますが、あなたのいずれかがvec3からchangeColorを変更したり、1.0fを削除する必要があります。

+0

ありがとう、私はそれを見たはずです。 –

関連する問題