[英]Android openGL ES 3.0 shaders are not working
我在 android 中使用 openGl ES 3.0 在屏幕上渲染一個矩形,我想使用着色器根據頂點位置生成顏色混合。
我確定問題出在頂點和片段着色器代碼中,但我不知道是什么,這些是着色器代碼:
private final String vertexShaderCode =
"#version 300 es"+
"in vec3 position;" +
"out vec3 color;"+
"void main() {" +
" gl_Position = vec4(position.x,position.y,position.z,1.0);" +
" color = vec3(position.x+0.5,1.0,position.y+0.5);"+
"}";
private final String fragmentShaderCode =
"#version 300 es"+
"in vec3 color;"+
"out vec4 out_color;"+
"void main() {" +
" out_color= vec4(color.x,color.y,color.z,1.0);" +
"}";
我試圖根據頂點位置用顏色填充形狀,因此它是每個像素生成的顏色的混合。
但我不明白為什么它不起作用?
更新:
我有 3 個信息:
由於無效的頂點着色器,鏈接失敗。
語言版本 '300' 未知,此編譯器最多只支持版本 '320 es'
#version 指令后發現意外文本。
您的着色器代碼未成功編譯,因為您錯過了換行符 ( \\n
)。 版本聲明必須在單獨的行中:
"#version 300 es\n"+
請參閱OpenGL ES 着色語言 3.00 規范 - 3.4 版本聲明:
#version
指令必須出現在着色器的第一行中,並且必須后跟換行符。
此外,您必須將浮點變量的精度限定符添加到片段着色器。 例如:
"#version 300 es\n"+
"precision mediump float;\n"+
請參閱OpenGL ES 着色語言 3.00 規范 - 4.5.4 默認精度限定符:
片段語言沒有浮點類型的默認精度限定符。 因此,對於浮點、浮點向量和矩陣變量聲明,要么聲明必須包含精度限定符,要么必須事先聲明默認的浮點精度。
您可以像這樣顯示着色器錯誤:
GLES20.glAttachShader(program, vertexShader);
GLES20.glAttachShader(program, pixelShader);
GLES20.glLinkProgram(program);
int[] linkStatus = new int[1];
GLES20.glGetProgramiv(program, GLES20.GL_LINK_STATUS, linkStatus, 0);
if (linkStatus[0] != GLES20.GL_TRUE) {
GLES20.glDeleteProgram(program);
throw new RuntimeException("Could not link program: "
+ GLES20.glGetProgramInfoLog(program));
}
你能顯示任何顏色的形狀嗎? 不顯示形狀的原因可能有很多。 但如果只是顏色問題,它會縮小搜索范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.