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

在片段着色器中添加变化的变量会在Android上使用opengl GLES20破坏渲染

如何解决在片段着色器中添加变化的变量会在Android上使用opengl GLES20破坏渲染

我正在尝试在android上渲染3d网格,顶点的位置如下所示:

        var positionHandle = GLES20.glGetAttribLocation(program,"vPosition").also {
            GLES20.glEnabLevertexAttribArray(it)

            GLES20.glVertexAttribPointer(
                it,3,GLES20.GL_FLOAT,false,12,vertexBuffer
            )
        }

我的顶点着色器:

    uniform mat4 uMVPMatrix;
    attribute vec4 vPosition;
    varying vec4 positionOut;
    void main() {
      gl_Position = uMVPMatrix * vPosition;
      positionOut = vPosition;
    }

片段着色器:

    varying vec4 positionOut;
    precision mediump float;
            void main() {
               gl_FragColor = vec4(1,1,1);
            }

代码一个设备(OnePlus设备上的Android 9)上可以正常工作,但在(Android 10 Samsung galaxy设备)上不起作用,并且不会引发任何错误

如果我从片段着色器中删除varying vec4 positionOut;,则渲染起作用。 问题是,为什么仅可变变量的定义会破坏渲染?我现在不使用该变量,但我想在下一步中使用它。

解决方法

根据the spec,您的代码无效:

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

因此,您要么将其声明为varying mediump ec4 positionOut;,要么放入precision语句的某个范围。

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