gpt4 book ai didi

opengl - GLSL 片段着色器输出类型

转载 作者:行者123 更新时间:2023-12-02 08:15:20 26 4
gpt4 key购买 nike

假设我遇到这样的问题:现在我有一个帧缓冲区,并且一个纹理仅包含一个已绑定(bind)到它的颜色组件(例如,GL_RED)。片段着色器会是什么样子?我猜答案是:

...out float ex_color;

ex_color = ...;

我的问题是:着色器会自动检测帧缓冲区的格式并向其写入值吗?如果片段着色器输出浮点值但帧缓冲区格式为 GL_RGBA 会怎样?

顺便问一下,创建只有一个组件的纹理的正确方法是什么?我阅读了 g-truc 中的示例,其中有一个如下示例:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RED,GLsizei(Texture.dimensions().x), GLsizei(Texture.dimensions().y), 0,GL_RGB, GL_UNSIGNED_BYTE, 0);

指定 GL_RGB 作为像素数据格式是什么意思?

最佳答案

就像 vertex shader inputs不必与 glVertexAttribPointer fragment shader outputs 指定的数据的确切大小匹配不必与要写入的图像的确切大小相匹配。如果输出提供的组件多于目标图像格式,则多余的组件将被忽略。如果它提供的值较少,则其他组件具有未定义的值(与顶点输入不同,其中未指定的值具有明确定义的值)。

What's the meaning of assign GL_RGB as pixel data format?

这就是pixel transfer format 。它描述了您提供给 OpenGL 的像素格式,而不是 OpenGL 存储它们的格式。

您应该始终使用sized internal formats ,而不是像 GL_RED 这样的未调整大小的。

关于opengl - GLSL 片段着色器输出类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17943984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com