私のopenglシェーダで私のユニフォームの適切な場所を取得することに問題があります。私はいつもいつも常にglGetUniformLocation関数から-1を返します。opengl getUniformLocation
多分私はそれをうまく読み込めませんでしたか?
ユニフォームは使用しないために最適化できるとオンラインで読んでいましたが、私のシェイダーに影響を与えるような方法で私のユニフォームを使用しています(または私はそう思います)。 また、stackoverflowや他のサイトでこの問題に関連する回答が出るたびに、彼らはこの事実について話しますが、これに対する代替的な解決策については一つも述べていません。新しいOpenGLイテレーションのためだけに新しいものですか?ここ
は、私の頂点シェーダコードです:ここ
#version 410 core
in vec4 position;
uniform mat4 mvmatrix;
uniform mat4 projmatrix;
void main(void)
{
gl_Position = projmatrix * mvmatrix * position;
}
は私のフラグメントシェーダコードです:
#version 410 core
out vec4 color;
void main(void)
{
color = vec4(1.0,1.0,1.0,1.0)
}
、ここでは、今、私が実装didntの全体program..forのための全体のソースコードですコード全体、プログラムやシェイダーに匹敵する部分だけですが、私はユニフォームの場所を取得するのに苦労しています。私はここ数日間苦労していました。誰かが私をここで救うことを望んでいた:
も、あなたはイムが話していることを特定の部分のみが必要な場合:
//creating program and shaders, compiling shaders, compiling program
GLchar * v_Shader[] = {
"#version 410 core \n"
" \n"
"in vec4 position; \n"
" \n"
" \n"
"uniform mat4 mvmatrix; \n"
"uniform mat4 projmatrix; \n"
" \n"
"void main(void) \n"
"{ \n"
" gl_Position = proj_matrix * mv_matrix * position; \n"
"} \n"
};
GLchar * f_Shader[] = {
"#version 410 core \n"
" \n"
"out vec4 color; \n"
" \n"
"in VS_OUT \n"
"{ \n"
" vec4 color; \n"
"} fs_in; \n"
" \n"
"void main(void) \n"
"{ \n"
" color = vec4(1.0,1.0,1.0,1.0) \n"
"} \n"
};
//creating a opengl program
program = glCreateProgram();
//creating the vertex shader and compiling it
vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, v_Shader, NULL);
glCompileShader(vertexShader);
//creating the fragment shader and compiling it
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, f_Shader, NULL);
glCompileShader(fragmentShader);
//attaching the shaders to the program and linking the program
glAttachShader(program, vertexShader);
glAttachShader(program, fragmentShader);
glLinkProgram(program);
glUseProgram(program);
//getting the program's uniform locations
modelViewMatrixLocation = glGetUniformLocation(program, "mvmatrix");
projectionMatrixLocation = glGetUniformLocation(program, "projmatrix");
をそしていいえ、私はGLFW/SDL/GLEW/freeglutまたは他のライブラリを使用して好きではありません。彼らはまったく私を混乱させます。 、修正将来的にこのようなエラーをキャッチするために
gl_Position = projmatrix * mvmatrix * position;
とgl_Position
ラインを置き換え、シェーダコンパイルのステータスを確認するには
uniform mat4 mvmatrix;
uniform mat4 projmatrix;
...
gl_Position = proj_matrix * mv_matrix * position;
:あなたは頂点シェーダで均一名スペルミスです
です。コンパイルとリンクの段階が成功したかどうかを確認する必要があります。そうでない場合は、プログラムを使用することはできません。それで-1は常に – Amadeus