2012-02-09 50 views
3

當使用OpenGL 1.4固定功能多紋理時,在傳遞到下一個階段之前,每個紋理階段的輸出是否固定爲[0,1]?OpenGL是否會鉗制每個紋理階段的輸出?

spec說(第153頁):

如果TEXTURE_ENV_MODE的值是COMBINE,紋理函數的形式取決於COMBINE_RGB和COMBINE_ALPHA的值,根據 表3.24。然後紋理函數的RGB和ALPHA結果分別乘以RGB_SCALE和ALPHA_SCALE的值。結果是 固定爲[0,1]。

但在我的測試中,沒有發生。對於RGB分量我的紋理環境是:

  • 第一階段:GL_TEXTURE,在整個紋理是黑減去GL_CONSTANT和GL_CONSTANT顏色(.5, .5, .5, 1.0)
  • 第2步:添加GL_TEXTURE到GL_PREVIOUS,其中紋理是一個測試彩虹。

輸出變得明顯越暗,我使第1階段的GL_CONSTANT越亮。

是否有某種狀態可以使我獲得夾持期望?

回答

4

賠率很好,這是一個驅動程序錯誤。由於固定功能硬件不再存在,所有這些都在着色器中模擬。並且由於在着色器中夾具不是默認行爲,所以他們將不得不記住夾緊在組合階段之間。如果他們忘了測試它......哎呀。

無論哪種方式,你都無法做到。如果你的實現不像規範說明的那樣限制,那麼你可以做的最好的事情是提交一份錯誤報告。

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中指定。

我不知道你的特殊情況,但是這會回答你的第一個(和標題)問題。