Android openGL ES 3.0着色器不起作用

问题描述 投票:2回答:2

[我正在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);" +
                    "}";

我正在尝试根据顶点位置用颜色填充形状,因此它是每个像素生成的颜色的混合。

但是我不为什么它不起作用?

UPDATE:

我有3条信息:

  • 由于无效的顶点着色器,链接失败。

  • 语言版本'300'未知,此编译器仅支持版本'320 es'

  • #version指令后发现意外文本。

android opengl-es shader glsles opengl-es-3.0
2个回答
2
投票
"#version 300 es\n"+

请参见OpenGL ES Shading Language 3.00 Specification - 3.4 Version Declaration

#version指令必须出现在着色器的第一行中,并且必须后跟换行符。

此外,您必须为片段着色器添加浮点变量的精度限定符。例如:]]


"#version 300 es\n"+ "precision mediump float;\n"+

请参见OpenGL ES Shading Language 3.00 Specification - 4.5.4 Default Precision Qualifiers

片段语言没有浮点类型的默认精度限定符。因此,对于浮点,浮点向量和矩阵变量声明,声明必须包含精度限定符,或者必须事先声明默认的浮点精度。


2
投票
© www.soinside.com 2019 - 2024. All rights reserved.