2008-12-01 79 views
0

我有一個使用紋理顯示圖像的OpenGl程序。我希望能夠加載要顯示的新圖像。將新紋理加載到已定義的紋理名稱中

在我的初始化函數我呼籲:

Gl.glGenTextures(1, mTextures); 

由於只有一個圖像將在時間顯示,我使用的是相同的紋理名稱爲每個圖像。

每一個新的圖像被加載我調用以下時間:

Gl.glBindTexture(Gl.GL_TEXTURE_2D, mTexture[0]); 

Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_LUMINANCE, mTexSizeX, mTexSizeY, 0, Gl.GL_LUMINANCE, Gl.GL_UNSIGNED_SHORT, mTexBuffer); 
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR); 
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR); 

第一圖像將顯示爲預期。但是,所有圖像在第一個之後加載,全部顯示爲黑色。

我在做什麼錯?

+0

你叫上mTexture mTextures和BindTextures GenTextures沒有的'......我希望這個問題是不是這個:) – UncleZeiv 2009-02-12 23:26:36

回答

0

什麼時候使用這些紋理提交幾何?我認爲這是與紋理加載交錯,雖然你沒有表現出來。當然,如果你要用不同的圖像替換紋理名稱,你根本不需要使用紋理名稱,是嗎?當您需要設置新紋理時,您可以僅調用glTextImage2D,然後在需要時使用該紋理,根本不涉及glBindTexture()

一個顯而易見的事情當然是插入錯誤檢查代碼,當一個操作失敗,該代碼不會被覆蓋,直到被應用程序讀取存儲的OpenGL錯誤代碼。有關詳細信息,請參閱glGetError()

+0

謝謝您的建議。 圖片加載後,我發佈重繪。 我曾嘗試調用glBindTexture,並在加載圖像時調用glTexImage2d。這沒有幫助。 我還在glTexImage2d和我的繪圖代碼後添加了對glGetError的調用,沒有錯誤 – 2008-12-02 18:51:12

0

您正在尋找的功能是「glCopyTexImage2D」或「glCopyTexSubImage2D」。

1

我不認爲問題出現在您顯示的代碼中。您需要提供更多信息,以你如何與紋理繪畫,以及通過什麼紋理數據glTexImage2D模樣。您確定在您致電glTexImage2D時仍然有效嗎?

1

畫完後你有glDisable GL_TEXTURE_2D嗎?把一個glColor4f(1,1,1,1);你應該看到至少白色的矩形,如果2D紋理被禁用。它會幫助你在這裏找到問題所在。