Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android上使用opengl GLES20向片段着色器添加可变变量会中断渲染_Android_Opengl Es_Opengl Es 2.0 - Fatal编程技术网

在Android上使用opengl GLES20向片段着色器添加可变变量会中断渲染

在Android上使用opengl GLES20向片段着色器添加可变变量会中断渲染,android,opengl-es,opengl-es-2.0,Android,Opengl Es,Opengl Es 2.0,我正在尝试在android上渲染3d网格,顶点的位置如下所示: var positionHandle = GLES20.glGetAttribLocation(program, "vPosition").also { GLES20.glEnableVertexAttribArray(it) GLES20.glVertexAttribPointer( it, 3, GLES20.G

我正在尝试在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, 0,1,1);
            }
此代码在一台设备(OnePlus设备上的安卓9)上运行良好,但在(安卓10三星Galaxy设备)上无法运行,并且不会引发任何错误

如果我删除行
variabling vec4 positionOut从片段着色器渲染工作。

问题是为什么只有可变变量的定义会破坏渲染?我现在不使用该变量,但我想在下一步中使用它。

您的代码无效,如下所示:

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


因此,您必须将其声明为例如
variable mediump ec4 positionOut,或者您将其放入了
精度
语句的某个范围。

您的代码无效,如下所示:

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


因此,您必须将其声明为例如
variable mediump ec4 positionOut,或者您将其放入
precision
语句的某个范围。

也许您需要在声明定位器变量之前设置precision语句。这对@alex
没有帮助,不会抛出错误
-@derhass似乎发现了错误,但是还有一个问题,您没有检测到一个应该很容易检测到的错误。是一些显示如何检测编译和链接错误的示例代码-不确定它是否是OpenGL的正确方言,但应该足够接近。也许在声明定位器变量之前需要设置精度语句。这对@alex
没有任何错误抛出没有帮助
-@Derhas似乎已经发现了错误,但是还有一个问题,您没有检测到一个应该很容易检测到的错误。下面是一些示例代码,展示了如何检测编译和链接错误-不确定这是否是OpenGL的正确方言,但应该足够接近。