0
我和我的一個朋友正在做一些3d編程,我們正試圖擺脫一個問題。我們正試圖訪問頂點着色器中燈光位置的制服,但未找到。OpenGL無法找到第二個制服的glGetUniformLocation制服
下面是一些代碼:
GLuint program = LoadShaders(shaders);
glUseProgram(program);
rotationLoc = glGetUniformLocation(program,"vRotationMatrix");
if(rotationLoc != -1)
glUniformMatrix4fv(rotationLoc,1,GL_TRUE,&world.rotationMatrix[0][0]);
LightLoc = glGetUniformLocation(program, "vLightPos");
if (LightLoc != -1)
glUniform3fv(LightLoc, 1, LightPos);
正如你可以看到我們做同樣的事情對我們的旋轉矩陣第一。它適用於旋轉矩陣,而不適用於LightLoc。 錯誤行是:LightLoc = glGetUniformLocation(program,「vLightPos」); LightLoc返回-1,但它應該返回2.
我們的頂點着色器的外觀(部分)如下:
uniform mat4 vRotationMatrix;
uniform vec3 vLightPos;
void main()
{
color = vColor;
oTexCoord = vTexCoord;
gl_Position = vRotationMatrix * vPosition;
lightPos = vLightPos;
}
lightPos的定義是什麼? – Bahbar
我們根據以下定義lightPost: out vec3 lightPos 在頂點着色器中。 –
後來被覆蓋?在正確拼寫的制服上有-1的通常原因是它已經被優化(通常通過去除死碼)。 – Bahbar