2009-07-21 78 views
0

我想用着色器模仿OpenGL glTexEnv的行爲。這是相當複雜的功能,但應該可行。唯一的問題是該函數根據紋理基本內部格式的不同而工作。我如何從紋理中獲取這些信息?紋理基礎的內部格式與glTexImage2D函數一起給出,所以我必須將它保存到某個變量中,並根據綁定的紋理將其傳遞給着色器,或者使用OpenGL以某種方式得到它?OpenGL紋理基礎內部格式到着色器

+0

內部格式如何影響着色器? – Luca 2010-04-08 19:54:19

+0

@Luca你可能有一個紋理,例如只有一個通道(假設只有Red值,編碼在32位上)。現在,如果着色器至少需要兩個通道(例如紅色和綠色),則在提供單通道紋理時可能會遇到問題。 – wil 2013-02-28 02:43:27

回答

0

看來紋理混合值不是內置制服的一部分。

http://www.opengl.org/sdk/libs/OpenSceneGraph/glsl_quickref.pdf

一般有用於模仿的FFP的行爲方式有兩種:

  1. 一個大的着色器,將值傳遞給着色器...
  2. 創建着色器,爲每個行爲和內部格式例如,根據需要動態調整。

我更喜歡第二種方式,因爲它不會導致一個大而緩慢的全局着色器。 取而代之的是,你會得到小的特定着色器。

此外:這個常見問題被稱爲「組合着色器爆炸」問題。

0

不,紋理基礎內部格式不直接用於着色器。如果你不想自己存儲它,你可以隨時要求GL的價值把它傳遞給你的着色器。

glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &outFormat)`