Android OpenGL着色器无法在设备上编译

Android OpenGL着色器无法在设备上编译,android,opengl-es,compute-shader,Android,Opengl Es,Compute Shader,我正在写一个计算着色器,应该在PC和Android上运行。它可以在PC上正常工作,但不能在Android上编译 这是着色器: #version 310 es uniform vec2 lightPos; // passed from the app layout (local_size_x = 512, local_size_y = 1) in; layout (rgba8, binding = 0) uniform image2D img_output; layout (rgba8, bi

我正在写一个计算着色器,应该在PC和Android上运行。它可以在PC上正常工作,但不能在Android上编译

这是着色器:

#version 310 es

uniform vec2 lightPos; // passed from the app

layout (local_size_x = 512, local_size_y = 1) in;
layout (rgba8, binding = 0) uniform image2D img_output;
layout (rgba8, binding = 1) uniform readonly image2D colorTex;
layout (rgba8, binding = 2) uniform readonly image2D transpTex;

void main () {
    imageStore(img_output, ivec2(3, 6), vec4(0.3 ,0.2 ,0.5 ,0.9));
}
错误是:
着色器编译错误:错误:“”:读/写图像上不支持的格式

如果我将最后一个参数更改为
ivec4
uvec4
我得到:
错误:“imageStore”:未找到匹配的重载函数

GL.GetString(StringName.Version)返回
GL版本:opengles3.1V@141.0 (GIT@I0bc8e21cf2)


这是在索尼Xperia Z5(Android仿真器似乎不支持OpenGL ES 3.1)上实现的

如果输出图像声明为仅写,则着色器将编译:

layout(rgba8,binding=0)统一写入image2D img_输出


不知道为什么需要这样做,是否有人拥有讨论此问题的规范的链接?

如果输出图像声明为仅写,则着色器将编译:

layout(rgba8,binding=0)统一写入image2D img_输出

不知道为什么需要这样做,是否有人有讨论此问题的规范的链接?

这在第72页的“4.9内存访问限定符”部分中指定:

除了使用格式限定符r32f、r32i和r32ui限定的图像变量外,图像变量必须指定内存限定符readonly或内存限定符writeonly

此限制仍适用于GLSL ES 3.20。

第72页“4.9内存访问限定符”一节中规定了此限制:

除了使用格式限定符r32f、r32i和r32ui限定的图像变量外,图像变量必须指定内存限定符readonly或内存限定符writeonly


此限制仍然适用于GLSL ES 3.20。

检查opengl版本是否支持ES 3.1支持的函数
imageStore
@ASK its:(我的着色器是ES 3.1)检查opengl版本是否支持ES 3.1支持的函数
imageStore
@ASK its:(我的着色器是ES 3.1)