OpenGL SuperBible讨论纹理缓冲对象,它是由VBO内部的数据构成的纹理。看起来使用它们有好处,但我发现的所有示例都创建了常规纹理。有没有人对何时使用其中一个有任何建议?
答案 0 :(得分:8)
根据extension registry,纹理缓冲区只是一维的,不能进行任何过滤,必须通过访问显式纹素(通过索引)来访问,而不是标准化的[0,1]浮点纹理坐标。因此,它们并不是常规纹理的替代品,而是大型统一数组(例如,蒙皮矩阵或每个实例数据)。将它们与统一缓冲区进行比较比使用常规纹理更有意义,例如完成here。
编辑:如果您想将VBO数据用于常规的,过滤的2D纹理,您将无法绕过数据副本(最好通过PBO完成)。但是当你只想要对VBO数据进行普通数组访问时,属性就不足以满足要求,那么纹理缓冲区应该是首选方法。
编辑:在检查SuperBible中的相应章节后,我发现他们一方面提到,纹理缓冲区始终是1维的,并且可以通过离散整数纹素偏移来访问,但是另一方面没有明确提到缺乏过滤。在我看来,他们或多或少地将它们作为纹理宣传,只是从缓冲区中获取数据,这解释了OP的问题。但如上所述,这只是错误的比较。纹理缓冲区只是提供了一种直接访问着色器中缓冲区数据的方式,以简单数组的形式(虽然具有可调节的元素类型),而不是更多(使它们对常规纹理无用),但也不是更少(它们仍然是一个很好的功能) )。
答案 1 :(得分:0)
不支持VBO时使用常规纹理。
答案 2 :(得分:0)
缓冲区纹理是唯一的纹理类型,它允许从着色器(如纹理)访问缓冲区对象。它们与普通的OpenGL纹理(包括Texture1D,Texture2D和Texture3D)完全不同。使用缓冲区纹理而不是普通纹理的主要原因有两个:
同时,OpenGL中的常规纹理的工作方式有所不同,并且是为实际纹理设计的。这些具有纹理缓冲区不共享的以下功能:
总而言之,您可以说普通纹理对实际纹理很有用,而缓冲区纹理则可以作为传入原始值数组的一种方法。