我使用的代碼基本未修改,發現here。本網站上的所有其他教程都適合我。然而,當我試圖運行這個時,我最終只得到矢車菊屏幕。glGetUniform意外地返回負值
經過少許挖掘,我發現(使用println跟蹤調試)所有對glGetUniformLocation(從248行開始)的調用都返回負值。鑑於這是一個在LWJGL網站上託管的相當專業的教程,我沒有修改它(除了一些硬編碼的文件路徑,我改變了),我感覺它可能與我的openGL版本有關,我的圖形卡或類似的東西。
在glGetUniformLocation上查找specifics之後,我發現如果你要求一個不存在的或者是錯誤類型的Uniform,它會返回負數。要說明的是這不是我的問題,我將重現這兩個GLSL代碼和調用到glGetUniformLocation這裏:
#version 150 core
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;
in vec4 in_Position;
in vec4 in_Color;
in vec2 in_TextureCoord;
out vec4 pass_Color;
out vec2 pass_TextureCoord;
void main(void) {
gl_Position = in_Position;
// Override gl_Position with our new calculated position
gl_Position = projectionMatrix * viewMatrix * modelMatrix * in_Position;
pass_Color = in_Color;
pass_TextureCoord = in_TextureCoord;
}
而且調用:
projectionMatrixLocation = GL20.glGetUniformLocation(pId, "projectionMatrix");
viewMatrixLocation = GL20.glGetUniformLocation(pId, "viewMatrix");
modelMatrixLocation = GL20.glGetUniformLocation(pId, "modelMatrix");
System.out.println(pId+", "+projectionMatrixLocation+", "+
viewMatrixLocation+", "+modelMatrixLocation);
我缺少什麼?
射擊:刪除第一個'gl_Position'分配和移動第二分配到頂點着色器的最末端。英特爾圖形? – genpfault
*「我發現如果你問一個不存在的或者是錯誤類型的制服,它會返回負值。」 - - 這並不完全正確。它也可以返回存在的統一體的'-1',但不使用*。這就是爲什麼我會第二次* genpfault *的猜測,你的GLSL編譯器可能錯誤地認爲'gl_Position'的第一個賦值是唯一有效的,因此優化掉所有這些矩陣,因爲它們沒有被使用。 –
是的,它正在被優化。你們中的一個人能否將此作爲答案,以便我可以將其標記爲正確? – user2570303