微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Android上的着色器中声明OpenGL版本?

我正在试验OpenGL ES 3.0并在快速参考表中找到以下声明:

“#version 300 es” must appear in the first line of a shader program
written in GLSL ES version 3.00. If omitted,the shader will be
treated as targeting version 1.00.

所以我尝试在着色器的开头添加它,但这只会导致错误

Link Failed because of invalid vertex shader.

由.glGetProgramInfoLog报告.如果我使用“#version 300 gl”语句删除第一行,则着色器将编译并运行.

这是我的顶点着色器的代码

private final String vertexshadercode =
        "#version 300 es \n" +
        "uniform mat4 uMVPMatrix; \n" +
        "attribute vec2 a_TexCoordinate; \n" +
        "attribute vec4 vPosition; \n" +
        "varying vec2 v_TexCoordinate; \n" +
        "void main() { \n" +
        "  v_TexCoordinate = a_TexCoordinate; \n" +
        "  gl_Position = uMVPMatrix * vPosition; \n" +
        "} \n";

我还将version语句添加到顶点和片段着色器,仍然得到相同的错误.

我在我的GLSurfaceView中调用了setEGLContextClientVersion(3),并添加了< uses-feature android:glEsversion =“0x00030000”android:required =“true”/>到我的清单,表明该应用程序需要OpenGL ES 3.0.

我是否读错了OpenGL ES文档,我不需要添加此版本声明?如果我需要添加它,我做错了什么总是会导致错误

解决方法

阅读 GLSL ES3.0 spec,它将“属性”和“变化”列为将导致错误的保留关键字.

在GLES3中,您必须使用“in”限定输入变量,并使用“out”输出变量.

所以在顶点着色器中,

attribute -> in
varying   -> out

并在片段着色器中

varying -> in

规范(存储限定符)中的第4.3节具有所有细节.

原文地址:https://www.jb51.cc/android/309603.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐