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