在运行时确定Image3D的存储类型

时间:2017-07-28 11:53:46

标签: opengl glsl shader

我有一个着色器,它将image3D作为统一输入,存储类型硬编码为r8。但是,主程序传递给它的数据有望也是r16fr32f。是否有可能以其他格式传递到着色器在运行时将存储哪种类型的数据?目前我将其作为layout (r8, binding = 0) uniform image3D data;

2 个答案:

答案 0 :(得分:1)

所以data将是几种类型之一(r8,r16,r32)。看来你想要一个C ++ ish重载(甚至是模板)方式来传递和读取制服。不,GLSL不是C ++,甚至不是C.

GLSL4.5 spec 4.4.6.2说:

  

可以为任何图像变量指定一个格式限定符   声明

因此,在编译时可以为data分配一次格式。

你可以拥有几种不同格式和绑定的制服。或者几个着色器可能带有共享子程序。

答案 1 :(得分:1)

读取格式是硬编码到图像,因为着色器可能必须根据该格式进行特殊工作。

你能做的最多就是有几个图像变量,每个变量都有不同的绑定和格式。您将相同的图像绑定到所有图像,然后根据uniform选择要读取的图像。