我目前正在爲Android構建一個應用程序,但遇到了一些拒絕渲染的着色器的問題。GLSL着色器不會渲染統一變量的顏色
考慮以下片段着色器:
uniform vec4 color;
void main(){
gl_FragColor = vec4(1.0);
}
此着色器工作正常在純色繪製對象(在這種情況下的白色)。統一矢量color
已被優化,並且無法使用glGetUniformLocation()
(返回-1)找到。
試圖從統一的可變顏色可以做到像這樣:
uniform vec4 color;
void main(){
gl_FragColor = color;
}
然而,當我用這個,沒什麼渲染。着色器已成功創建,並且glGetUniformLocation()
爲顏色返回有效值(0)。但屏幕上沒有顯示,甚至沒有顯示黑色。唯一的改變是用color
代替vec4(1.0)
。 這段代碼有相同的結果:
uniform vec4 color;
void main(){
gl_FragColor = vec4(1.0)+color;
}
奇怪的是,當我在不同的項目中嘗試過的着色器,它的作品,因爲它應該,所以問題一定是出在我的代碼做到萬無一失。
這是我的繪製方法(請記住,它的工作原理當彩色變量不是在着色器):
GLES20.glUseProgram(colorshader);
GLES20.glUniform4f(colorIndex, 1, 1, 1, 1); //colorIndex is the result of glGetUniformLocation() called with the correct shader index and variable name.
Matrix.multiplyMM(mvpMatrix, 0, vpMatrix, 0, matrix, 0);
GLES20.glUniformMatrix4fv(matrixindex, 1, false, mvpMatrix, 0);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, vertices);
GLES20Fix.glVertexAttribPointer(Shader.ATTRIBUTE_VERTEX, 3, GLES20.GL_FLOAT, false, 12, 0);
GLES20.glLineWidth(width);
GLES20.GL_UNSIGNED_SHORT, 0);
GLES20.glDrawArrays(GLES20.GL_LINES, 0, count);
我完全不知道什麼可能導致這個奇怪的行爲,如果任何人有任何想法或可能的解決方案,請幫助我。
更新:
看來,使用任何勻變速不是採樣造成這種情況(僅此)着色此行爲。
更新2 使用glGetError()
返回錯誤代碼502: GL_INVALID_OPERATION
。
「但屏幕上沒有顯示,甚至沒有顯示黑色。」這表明某處存在錯誤。你檢查錯誤嗎? – 2012-02-11 16:07:49
@NicolBolas:我的想法是,我在創建着色器時沒有遇到任何明確的錯誤,並且因爲我可以爲顏色統一獲得一個值,所以它在過程中稍後會出錯。不幸的是我不知道如何調試。 'glGetError()'可能對代碼有幫助嗎? – Jave 2012-02-11 17:06:29
'glGetError'就是你應該使用的。 – 2012-02-11 17:07:45