假设我有这样的混合方程和系数,颜色超出范围,例如
Source color: (0.8f, 0.8f, 0.8f, 1.0)
Destination color: (0.8f, 0.8f, 0.8f, 1.0)
glBlendFunc(GL_ONE, GL_ONE);
glBlendEquation(GL_FUNC_ADD);
计算后颜色是否应该标准化还是被钳制? GL标准定义的是什么,我无法找到它。
答案 0 :(得分:1)
通常,颜色矢量永远不会在GL中自动“标准化”。如果该操作对于颜色缓冲区的当前格式有意义,则它们被钳制在各个片段处理阶段,并且在使用浮点格式时它们从不被钳制。
OpenGL 4.6 Core Profile specification:
第17.3.6节混合:
如果颜色缓冲区是定点的,则源和的组件 目标值和混合因子各自被钳制到[0,1]或 [-1,1]分别用于无符号归一化或有符号归一化 在评估混合方程之前的颜色缓冲区。如果颜色 缓冲区是浮点数,不会发生钳位。 由此产生的四个 值将被发送到下一个操作。
因此,如果启用了混合,则除非使用非标准化浮点颜色缓冲区,否则输入值将被限制。混合的结果没有被限制。
接下来的操作是 第17.3.7节sRGB转换:
[注意:
cl
是操作的输入值(混合阶段的结果值),cs
是sRGB转换的结果值,{{1} }如果禁用sRGB转换]R,G和B的结果
cs = cl
值以及未修改的A形成新的RGBA颜色值。 如果颜色缓冲区是定点的,则每个组件都被夹紧 到范围[0,1],然后使用公式2.3转换为定点值。结果四个值被发送到随后的抖动操作。