2013-02-20 19 views
11

我想知道GL_TEXTURE_2D在着色器中是否處於活動狀態。找出GL_TEXTURE_2D是否在着色器中有效

我將顏色綁定到着色器以及活動貼圖(如果設置了GL_TEXTURE_2D)並且需要組合這兩者。

所以如果紋理被綁定,混合顏色和紋理(sampler2D *顏色),如果沒有紋理綁定,使用顏色。

或者我應該換一種方式呢?

回答

17

「GL_TEXTURE_2D已激活」或「已設置GL_TEXTURE_2D」的含義並不十分清楚。

請注意以下事項:

  • glEnable(GL_TEXTURE_2D)對你的(片段)着色器沒有任何影響。它使用片段着色器對您剛剛替換的管道的固定功能部件進行參數化。
  • 從GLSL着色器內部沒有「直接」/「乾淨」的方式來告訴是否存在綁定到與紋理採樣器關聯的紋理單元的有效紋理(據我所知)。
  • 從GLSL 1.3開始,您可能有運氣使用textureSize(sampler, 0).x > 0來檢測與採樣器相關的有效紋理的存在,但這可能會導致未定義的行爲。
  • 如果沒有與採樣器相關聯的紋理,則ARB_texture_query_levels擴展確實明確指出textureQueryLevels(gsampler2D sampler)返回0。

你應該換一種方式解決這個問題嗎?我認爲是這樣的:不用在着色器中作出決定,只需綁定1x1像素紋理的「白色」,並無條件地採樣該紋理,並將結果乘以顏色,這將顯然返回1.0 * color。這將會更加便攜和快速。

+0

謝謝,幫助很多:) – RobotRock 2013-02-20 14:39:46

+4

+1爲白色紋理的方法。其他地方列出的唯一解決方案是使用兩種不同的着色器,這在大多數情況下毫無意義。 – SystemParadox 2013-03-01 23:55:25

+0

opengl默認爲你的着色器採樣器賦值,所以爲了工作,你需要檢查textureSize是否大於1 – Sherlock 2015-10-10 06:02:54

相關問題