【问题标题】:glTexImage*D parameter redundancy?glTexImage*D 参数冗余?
【发布时间】:2013-02-27 19:51:42
【问题描述】:

为什么 glTexImage1D、glTexImage2D 和 glTexImage3D 函数需要内部格式(即 GL_RGBA8、GL_R32UI 等)和像素格式? (GL_RGBA,GL_RED_INTEGER)

在我看来,像素格式可以很容易地从内部格式中解释出来。我问这个不仅仅是出于好奇,而是因为我确保我编写的 OpenGL 纹理对象和帧缓冲区对象包装器(从内部格式推断像素格式)能够正确提取所有内部格式的像素格式。

【问题讨论】:

    标签: c++ opengl


    【解决方案1】:

    像素格式是你提供纹理数据的格式,内部格式是OpenGL在内部存储它的方式。 OpenGL 会自动处理转换。

    man page for glTexImage2D 有一组漂亮的内部格式布局表,还解释了每种格式的转换方式。

    例如,如果您的像素格式为GL_RG,内部格式为GL_COMPRESSED_RGBA,则GL 会将整个蓝色通道填充为0,将Alpha 通道填充为1,然后进行自己的内部压缩。

    每个元素都是红/绿双色。 GL 将其转换为浮点数并将其组合成一个 RGBA 元素,方法是为蓝色附加 0,为 alpha 附加 1。然后将每个分量乘以有符号比例因子 GL_c_SCALE,添加到有符号偏差 GL_c_BIAS,并限制在 [0,1] 范围内。

    【讨论】:

    • 很好的解释!这是一个很大的帮助。
    猜你喜欢
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多