OpenGL SuperBible讨论纹理缓冲区对象,这些对象是由VBO内部数据形成的纹理。看起来使用它们有好处,但我发现的所有示例都创建了常规纹理。有没有人有什么建议关于何时使用其中一个?纹理缓冲区对象或常规纹理?
回答
根据extension registry,纹理缓冲区只有一维,不能进行任何过滤,并且必须通过访问显式纹理元素(通过索引)来访问,而不是使用标准化的[0,1]浮点纹理坐标。所以它们并不是真正的纹理替代品,而是大型的统一阵列(例如蒙皮矩阵或每个实例数据)。将它们与统一缓冲区进行比较,比对普通纹理进行比较更有意义,如完成here。
编辑:如果您想要将VBO数据用于常规的,过滤的2D纹理,则不会绕过数据副本(最好通过PBO完成)。但是,如果您只是希望普通数组访问VBO数据并且属性不足以满足此要求,则纹理缓冲区应该是选择的方法。
编辑:检查在OpenGL超级相应章节后,我发现,他们一方面提,该纹理缓冲器总是1维和由离散的整数纹理像素偏移访问,但是,另一方面无法明确提到缺少过滤。在我看来,他们或多或少地将它们作为纹理进行宣传,只是从缓冲区获取数据,这解释了OP的问题。但如上所述,这只是错误的比较。纹理缓冲区只是提供了一种直接访问着色器中的缓冲区数据的方式(虽然有一个可调节的元素类型),但不是更多(使它们对普通纹理无用),但也不会少(它们仍然是一个很棒的功能)。
这是完全错误的。那个exure支持1d,2d和3d纹理 – 2011-06-08 19:36:44
@VJo不,你的评论是错误的。阅读链接的扩展规范以获取更多信息。也许你正在搞PBO的纹理缓冲区。 – 2011-06-08 19:52:06
@VJo:缓冲区纹理是texels的一维数组,并且缓冲区纹理不支持mipmapping,具有标准化浮点纹理坐标的纹理查找以及任何类型的纹理过滤。顺便说一句,它是OpenGL 3.1+的一部分:http://www.opengl.org/sdk/docs/man3/xhtml/glTexBuffer.xml – Calvin1602 2011-06-09 09:08:41
当VBOs不受支持时使用常规纹理。
这是错误的,因为纹理缓冲区不提供常规纹理的常用特征。 – 2011-06-08 22:45:35
不能说这个答案是错误的,因为当硬件不支持特性(扩展)时,常规纹理总是可以用来模拟TexBO的行为。 – rotoglup 2011-06-08 23:42:55
@rotoglup好的,如果从这一点来看,你可能是对的。 – 2011-06-09 01:00:26
- 1. 纹理顶点缓冲区对象
- 2. 纹理VBOs(顶点缓冲区对象)
- 3. 作为帧缓冲区存储的纹理缓冲区对象
- 4. 如何写入纹理缓冲区对象?
- 5. 将纹理应用于顶点缓冲区对象基元
- 6. Android,缓冲纹理查看
- 7. 计算着色器,缓冲区或纹理
- 8. 纹理缓存没有渲染到iOS中的帧缓冲区对象
- 9. 纹理AFRAME对象
- 10. OpenGL:渲染到纹理和帧缓冲区对象时遇到问题
- 11. 常量缓冲区中的纹理变换矩阵无法正常工作
- 12. 复制纹理对象
- 13. 在顶点缓冲区上平铺纹理? (Windows Phone 7/XNA)
- 14. 将深度缓冲区转换为GLSL的深度纹理
- 15. JOGL 2.0,渲染纹理的深度缓冲区
- 16. 纹理帧缓冲区数据不准确
- 17. OpenGL - 将帧缓冲区纹理设置为完全透明
- 18. 使用帧缓冲区渲染纹理GLKit的GLKBaseEffect
- 19. Open GL - 如何从像素缓冲区加载纹理
- 20. OpenGL/OpenGL ES中的帧缓冲区,纹理和glColor行为
- 21. OpenGL:读取帧缓冲区的深度纹理
- 22. 无法呈现到绑定到帧缓冲区的纹理
- 23. 错误的深度缓冲区(纹理)输出?
- 24. 使用DirectX进行帧缓冲区纹理数据更新
- 25. 如何将深度缓冲区复制到GPU上的纹理?
- 26. WebGL:同时使用纹理和颜色缓冲区
- 27. 如何获取附加到帧缓冲区的纹理?
- 28. 在纹理缓冲区之间插值openGL
- 29. 着色纹理没有顶点缓冲区漫反射
- 30. 在OpenGL中将缓冲区内容填充到纹理中
总结一下基督徒所说的:TBOs是用于高级用途的。对于你通常所说的“纹理”(即图像),请使用glGenTextures&co。 – Calvin1602 2011-06-09 09:14:17