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

Opengl 在运行时确定Image3D的存储类型,opengl,glsl,shader,Opengl,Glsl,Shader,我有一个着色器,它将image3D作为统一输入,存储类型硬编码为r8。然而,主程序传递给它的数据也有望是r16f和r32f。是否可以以其他格式将运行时存储的数据类型传递给着色器?目前我把它作为layout(r8,binding=0)统一的image3D数据因此数据将是几种类型(r8、r16、r32)之一。似乎您希望使用C++语言重载(甚至使用模板)的方式来传递和读取统一文件。不,GLSL不是C++,甚至C。 说: 任何图像变量只能指定一个格式限定符 声明 因此,数据可以在编译时分配一次格式。 您

我有一个着色器,它将image3D作为统一输入,存储类型硬编码为
r8
。然而,主程序传递给它的数据也有望是
r16f
r32f
。是否可以以其他格式将运行时存储的数据类型传递给着色器?目前我把它作为
layout(r8,binding=0)统一的image3D数据

因此
数据将是几种类型(r8、r16、r32)之一。似乎您希望使用C++语言重载(甚至使用模板)的方式来传递和读取统一文件。不,GLSL不是C++,甚至C。
说:

任何图像变量只能指定一个格式限定符 声明

因此,
数据
可以在编译时分配一次格式。
您可以有几种不同格式和绑定的制服。或者使用共享子例程的多个着色器。

读取格式硬编码到图像中,因为着色器可能必须基于该格式执行特殊工作

您最多可以使用几个图像变量,每个变量具有不同的绑定和格式。您可以将同一个图像绑定到所有图像,然后根据
统一标准选择要读取的图像