【问题标题】:Meaning and Implications of InternalFormat, Format, and Type parameter for WebGL TexturesWebGL 纹理的 InternalFormat、Format 和 Type 参数的含义和含义
【发布时间】:2019-09-13 22:30:20
【问题描述】:

在 WebGL 中,对 texSubImage2DreadPixels 的调用需要 FormatType 参数。此外,texSubImage2D 需要一个 InternalFormat 参数。虽然很容易找到有关这些参数的哪些组合有效的文档,但尚不清楚这些参数的确切含义以及如何有效地使用它们,特别是考虑到某些内部格式可以与多种类型配对,例如 R16F/HALF_FLOAT vs R16F/FLOATGL_R11F_G11F_B10F/FLOAT vs GL_R11F_G11F_B10F/GL_UNSIGNED_INT_10F_11F_11F_REV(我使用的符号是InternalFormat/@987654336pp) >

此外,这两个 API 调用都可以与 pixels 参数结合使用,该参数可以是 TypedArray - 在这种情况下,不清楚 TypedArray 的哪些选择对于给定的 InternalFormat/ 有效/ Format/Type 组合(以及哪个选择在避免强制转换方面是最佳的)

例如,GPU 使用的每个 texel 的内部内存是否真的完全由 InternalFormat 决定——要么以依赖于实现的方式(例如 WebGL1 unsized 格式),要么对于一些新的在WegGL2 中添加了InternalFormats,这是一种完全指定的方式。

FormatType 参数是否主要与数据如何编组进出ArrayBuffers 相关?例如,如果我使用GL_R11F_G11F_B10F/GL_UNSIGNED_INT_10F_11F_11F_REV 这是否意味着我应该传递 texSubImage2DUint32Array 数组的每个元素的位都在 javascript 中小心地旋转,而如果我使用 GL_R11F_G11F_B10F/Float 那么我应该使用带有三个的 Float32Array将元素数量乘以前面的情况,WebGL 会为我处理这些位吗? WebGL 是否会尝试检查我通过的TypedArray 是否与我选择的Format/Type 一致,还是直接在底层ArrayBuffer 上操作?我可以在最后一个实例中使用Float64Array 吗?还有HALF_FLOAT怎么办?

【问题讨论】:

    标签: webgl webgl2


    【解决方案1】:

    看起来大部分问题可以通过参考WebGL2 Spec 的第 3.7.6 节纹理对象来回答。特别是在texImage2D 的文档中找到的表格中的信息,它阐明了每个Type 需要哪个TypedArray

    TypedArray  WebGL Type 
    ----------  ----------
    Int8Array   BYTE
    Uint8Array  UNSIGNED_BYTE
    Int16Array  SHORT
    Uint16Array UNSIGNED_SHORT
    Uint16Array UNSIGNED_SHORT_5_6_5
    Uint16Array UNSIGNED_SHORT_5_5_5_1
    Uint16Array UNSIGNED_SHORT_4_4_4_4
    Int32Array  INT
    Uint32Array UNSIGNED_INT
    Uint32Array UNSIGNED_INT_5_9_9_9_REV
    Uint32Array UNSIGNED_INT_2_10_10_10_REV
    Uint32Array UNSIGNED_INT_10F_11F_11F_REV
    Uint32Array UNSIGNED_INT_24_8
    Uint16Array HALF_FLOAT
    Float32Array    FLOAT
    

    我的猜测是

    • InternalFormat 决定使用多少 GPU 内存来存储纹理
    • FormatType 控制数据如何编组进/出纹理和 javascript。
    • Type 确定必须使用什么类型的 TypedArray
    • Format 加上 pixelStorei 参数(第 6.10 节)决定了 TypedArray 需要多少元素以及实际使用哪些元素(东西会被紧密包装,某些行会被填充等)

    待办事项: 锻炼详情

    • 编码/解码一些比较模糊的Type 值与javascript 之间的关系。
    • 根据TypeFormatpixelStorei 参数计算类型化数组大小要求和步幅信息

    【讨论】:

      猜你喜欢
      • 2021-03-09
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 2011-09-02
      • 2018-07-23
      • 1970-01-01
      • 2012-11-06
      • 2021-07-18
      相关资源
      最近更新 更多