在我的程序中,我有一个在不同情况下多次使用的纹理。在每种情况下,我都需要应用一组特定的参数。
我想避免创建额外的缓冲区,并且每次我需要将其用于其他内容时创建纹理的副本,所以我想知道是否有更好的方法?
答案 0 :(得分:7)
这是sampler objects的用途(从版本3.3开始在核心中使用,或使用ARB_sampler_objects
)。采样器对象将纹理图像与其参数分开,因此您可以将一个纹理与多个参数集一起使用。该功能的创建完全是出于您的问题。
引自ARB_sampler_objects
扩展规范:
在未扩展的OpenGL纹理中,被认为是图像数据集(mip-chains,数组,立方体图面集等)和采样状态(采样模式,mip映射状态,坐标包装和钳位规则等)。 。)合并成一个对象。应用程序通常使用许多纹理,这些纹理具有一组有限的采样状态,它们之间是相同的。为了以这种方式使用纹理,应用程序必须生成和配置许多纹理名称,从而增加应用程序和实现的开销。此外,如果应用程序希望以多种方式从纹理中进行采样(例如,使用和不使用mip-mapping),则必须修改纹理的状态或创建两个纹理,每个纹理都具有相同图像数据的副本。这可能会给应用程序带来运行时和内存成本。