繁体   English   中英

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

[英]How to acquire the sampler2D type from a Shader Storage Buffer Object inside a shader?

我试图在不使用统一变量的情况下将sampler2D类型的变量放入我的着色器中。

相反,我想使用着色器存储缓冲区对象(SSBO)交出它。 必须在结构中声明什么类型的变量才能移交? 我怎样才能在着色器中将此类型转换为sampler2D

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

因此, sampler类型只能在GLSL着色器的默认统一块中声明, sampler器的值不能来自SSBO,UBO,TBO或其他任何类型,并且您不能在GLSL中使用sampler类型als l-values。

围绕这些限制的唯一方法是无绑定纹理 ,它允许您想要做的事情。 但请注意,这些不是迄今为止任何OpenGL版本的核心功能(GL 4.6作为编写时间),因此目前仅作为GL扩展存在。 此外,此功能的硬件和驱动程序支持在目前还远未普及。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM