【问题标题】:OpenGL VBO: Short or Float?OpenGL VBO:短还是浮点?
【发布时间】:2012-01-16 02:31:38
【问题描述】:

我需要决定是否应该将 GL_UNSIGNED_SHORT 或 GL_FLOAT 用于我的(静态)VBO 作为顶点。短裤使用的内存减少了 2 倍,但它是否也会降低渲染速度(因为 GPU 必须将它们转换为浮点数)?纹理坐标也一样,我可以将 GL_UNSIGNED_BYTE 用于较小的纹理,将 GL_UNSIGNED_SHORT 用于较大的纹理(使用纹理矩阵映射到 0-1),但我担心它可能会降低渲染速度。

【问题讨论】:

    标签: c opengl


    【解决方案1】:

    对于任何现代硬件(支持 DX10 或更好),您可以假设属性读取性能始终由内存访问决定,而不是由整数到浮点数的转换决定。本质上它是免费的

    这对于 DX9 类硬件也是如此,但有些硬件有某些顶点格式,它不能很好地工作。

    话虽如此,我不太确定能否将无符号字节用于纹理坐标。在大多数模型中,您通常需要比 per-texel 更高的纹理坐标精度。无符号短裤通常没问题,但字节精度不够。

    【讨论】:

    • 出于我的目的,无符号字节适用于高达 128x128 的纹理,你的意思是某些顶点格式不能很好地工作? (我的目标是 OpenGL 2.0)
    【解决方案2】:

    将short 转换为float 应该是一个相当便宜的操作。我认为节省的内存带宽将超过额外的处理成本。

    但如果没有实际测试,这只是一个疯狂的猜测。

    【讨论】:

      猜你喜欢
      • 2020-08-09
      • 2011-03-24
      • 2021-03-05
      • 2023-03-05
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      相关资源
      最近更新 更多