Android OpenGL着色器无法在设备上编译
我正在写一个计算着色器,应该在PC和Android上运行。它可以在PC上正常工作,但不能在Android上编译 这是着色器: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
#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)