2016-12-06 25 views
1

我一直在使用JOGL拼湊一個基本的遊戲引擎,當它涉及到訪問和/或在我的shader代碼更新uniform變量都創下了相當大的道路凹凸顯示黑屏。統一變量使用JOGL

這裏是我很分配表和相關緩衝區:

protected float[] test_matrix = { 
    1.0f, 0.0f, 0.0f, 1.0f, 
    0.0f, 1.0f, 0.0f, 1.0f, 
    0.0f, 0.0f, 1.0f, 1.0f, 
    0.0f, 0.0f, 0.0f, 1.0f 
}; 
protected int matrix_size = test_matrix.length; 

FloatBuffer matrix_buffer = Buffers.newDirectFloatBuffer(test_matrix, 0, matrix_size); 

這裏是有問題的代碼:

shaderProgram = gl.glCreateProgram(); 
gl.glAttachShader(shaderProgram, vertShader); 
gl.glAttachShader(shaderProgram, fragShader); 

pmvmatrix = new PMVMatrix(); 
transmatrix_location = gl.glGetUniformLocation(shaderProgram, "transformationMatrix"); 
gl.glUniformMatrix4fv(transmatrix_location, 400, false, matrix_buffer); 

pmvmatrix.glMatrixMode(GLMatrixFunc.GL_MODELVIEW); 
pmvmatrix.glLoadIdentity(); 

gl.glBindAttribLocation(shaderProgram, 0, "position"); 
gl.glBindAttribLocation(shaderProgram, 1, "color"); 

gl.glLinkProgram(shaderProgram); 

,這裏是我的頂點着色器:

#version 400 core 

in vec3 position; 

out vec3 color; 

uniform mat4 transformationMatrix; 

void main(void){ 
    gl_Position = transformationMatrix * vec4(position,1.0); 
    color = vec3(position.x+0.5,1.0,position.y+0.5); 
} 

着色器編譯成功,如果我刪除頂點着色器中的「transformationMatrix *」,則對象正確渲染。

是我的矩陣只是被作爲一個1X16矩陣,而不是一個4X4通過呢?我是否正確使用glUniformMatrix4fv函數?

+0

是'transmatrix_location'小於零? – genpfault

回答

2
transmatrix_location = gl.glGetUniformLocation(shaderProgram, "transformationMatrix"); 
... 
gl.glLinkProgram(shaderProgram); 

錯誤的解決方法。 Link, then Get

...分配給uniform變量的實際位置,直到程序對象被成功鏈接不知道 。已 發生聯之後,命令glGetUniformLocation可以用來獲得均勻的變量的 位置。 ...

+0

轉換那些,仍然變黑屏。我的transmatrix_location變量返回'0'。這應該是一個非零數字嗎? –

+0

@PeterHope:不,零是完全有效的。 – genpfault

+0

嗯,現在我正在調用glLinkProgram,glGetUniformLocation,glUniformMatrix4fv,然後設置矩陣模式和加載標識。那是對的嗎? –