OpenGL是否会锁定每个纹理阶段的输出?

时间:2012-02-09 18:44:01

标签: opengl multitexturing

当使用OpenGL 1.4固定功能多纹理时,每个纹理阶段的输出是否被钳制到[0,1]之后才被传递到下一阶段?

spec说(第153页):

  

如果TEXTURE_ENV_MODE的值是COMBINE,纹理函数的形式取决于COMBINE_RGB和COMBINE_ALPHA的值,根据   表3.24。然后,纹理函数的RGB和ALPHA结果分别乘以RGB_SCALE和ALPHA_SCALE的值。结果是   夹紧到[0,1]。

但在我的测试中,这并没有发生。我的RGB组件的纹理环境是:

  • 第1阶段:从GL_TEXTURE中减去GL_CONSTANT,其中整个纹理为黑色,GL_CONSTANT颜色为(.5, .5, .5, 1.0)
  • 第2阶段:将GL_TEXTURE添加到GL_PREVIOUS,其中纹理是测试彩虹。

输出变得明显更暗,我制作第一阶段的GL_CONSTANT颜色。

是否存在某种状态我可以实现我期望的钳位?

2 个答案:

答案 0 :(得分:4)

很可能这是一个驱动程序错误。由于固定功能硬件不再存在,因此它们都在着色器中进行模拟。由于在着色器中钳位不是默认行为,因此它们必须记住在组合阶段之间进行钳制。如果他们忘了测试它......哎呀。

无论如何,你无能为力。如果您的实现不像规范所说的那样,那么您可以做的最好就是提交错误报告。

答案 1 :(得分:0)

是。在规范3.8.13章中,它说:

  

Cf和Af是传入片段的主要颜色成分;   Cs和As是纹理源颜色的组成部分,源自   滤波的纹理值Rt,Gt,Bt,At,Lt和It如图所示   表   3.21; Cc和Ac是纹理环境颜色的组成部分; Cp和Ap是由先前纹理产生的分量   环境(纹理环境0,Cp和Ap与Cf相同   和Af,分别);和Cv和Av是主要的颜色成分   由纹理函数计算。

     

所有这些颜色值都在[0; 1]范围内。纹理函数在表中指定   3.22,   3.23,和   3.24。

我不知道你的具体情况,但这会回答你的第一个(和标题)问题。