2011-09-06 134 views
11

我有一個擁有屬性Texture_ID的對象。我需要在構造函數中初始化Texture_ID的值,所以我想要OpenGL未使用的某個值表示紋理尚未設置。什麼是OpenGL紋理ID的範圍?

我不知道零(0)是否是一個很好的值?如果OpenGL適用於紋理ID的範圍,我想要一個超出此範圍的值。任何想法?

回答

15

0是您正在查找的值(表示未設置的紋理ID /未創建的紋理),因爲0永遠不是有效的紋理ID。

+8

+1請參閱[這裏](http://www.opengl.org/sdk/docs/man/xhtml/glBindTexture.xml)「零值被保留以表示每個紋理目標的默認紋理。」 – user786653

+0

@chris:用戶786653說的是實話嗎?如果是這樣,可能我必須使用GLuint的最大值? – jondinham

+3

@Paul:您創建的任何紋理對象都將具有非零值。如果這就是你打算使用這個類的方法,那麼零就是完美的。 –

2

我寧願在構造函數中初始化紋理。這樣你永遠不會有一個對象處於無效狀態。

+0

但在我的項目中,對象在尚未具有紋理時進行初始化。只是項目的限制。例如:我必須用顏色顯示一個立方體,然後打開一個圖像文件來獲取紋理以在立方體上繪製,所以在這種情況下,當在構造函數中時,紋理還不知道 – jondinham

+4

構造函數可能會在調用之前被調用一個有效的OpenGL上下文,這會導致幾個問題。 – datenwolf

+0

@datenwolf:如果我有一個代表OpenGL紋理對象的對象,那麼這個對象在沒有OpenGL上下文的情況下是沒有意義的。 –

2

0是OpenGL用於其默認紋理的值。它永遠不會將該值返回給您,您可以使用該值進行錯誤檢查。

雖然我會建議使用-1

+7

紋理ID是GLuint,意思是'unsigned int',我不認爲'-1'有效 – jondinham

+3

然後使用'0xffffffff'。它對你來說仍然是'-1'! – Shahbaz