簡體   English   中英

Android openGL ES 3.0 着色器不工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM