Opengl 如何从着色器中的着色器存储缓冲区对象获取sampler2D类型?

Opengl 如何从着色器中的着色器存储缓冲区对象获取sampler2D类型?,opengl,glsl,shader-storage-buffer,Opengl,Glsl,Shader Storage Buffer,我正在尝试将类型为sampler2D的变量不使用 统一变量 相反,我想使用着色器存储缓冲区对象(SSBO)将其移交。 在要移交的结构中必须声明什么类型的变量? 然后如何将此类型强制转换为着色器中的sampler2D 您不能这样做,采样器s只是不透明类型,而不是在着色器中可以访问其值的真实变量。OpenGL实现将使用您通过glUniform1i为采样器设置的值来实际设置纹理采样,以便在特定硬件上执行该操作-在某些实现中,更改采样器的值实际上会触发着色器代码的重新编译或修补 因此,采样器类型只能在G

我正在尝试将类型为
sampler2D
的变量不使用 统一变量

相反,我想使用着色器存储缓冲区对象(SSBO)将其移交。 在要移交的结构中必须声明什么类型的变量?
然后如何将此类型强制转换为着色器中的
sampler2D

您不能这样做,
采样器
s只是不透明类型,而不是在着色器中可以访问其值的真实变量。OpenGL实现将使用您通过
glUniform1i
为采样器设置的值来实际设置纹理采样,以便在特定硬件上执行该操作-在某些实现中,更改采样器的值实际上会触发着色器代码的重新编译或修补

因此,
采样器
类型只能在GLSL着色器的默认统一块中声明,采样器的值不能来自SSBO、UBO、TBO或任何内容,并且不能在GLSL中使用
采样器
类型als l值


绕过这些限制的唯一方法就是允许你做你想做的事情。但要注意的是,这些并不是迄今为止任何OpenGL版本的核心功能(在撰写本文时为GL4.6),因此目前仅作为GL扩展存在。此外,目前对该功能的硬件和驱动程序支持还远未普及。

感谢您的解释。我没有发现任何关于这方面的东西。你看了这页吗?:似乎有一些关于如何使用SSBO的好资料。