2012-08-05 247 views
0

我正在使用LWJGL作爲它的OpenGL綁定,我試圖用紋理繪製四邊形。我成功地做到了這一點,但是有一個奇怪的副作用,我不確定它爲什麼會出現。調用glTexImage2D清除數據緩衝區

下面的代碼在第一次加載紋理時(在第一次渲染之前)執行。當我綁定紋理/繪製四邊形時,我保存了textureID的值。下面的設置代碼是從找到的答案中獲得的here

int textureID = GL11.glGenTextures(); // Generate texture ID 

GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureID); // Bind texture ID 

// Setup wrap mode 
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_CLAMP); 
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_CLAMP); 

// Setup texture scaling filtering 
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST); 
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); 

// Send texel data to OpenGL 
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA8, image.getWidth(), image.getHeight(), 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buffer); 

在渲染循環,我畫了四用下面的代碼:

int texture = TextureLoader.loadTexture(TextureLoader.loadImage("/pc_run/run3.png")); 

GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture); 

GL11.glBegin(GL11.GL_QUADS); 
{ 
    GL11.glTexCoord2f(0.0f, 0.0f); 
    GL11.glVertex2f(-hw, -hh); 

    GL11.glTexCoord2f(1.0f, 0.0f); 
    GL11.glVertex2f(+hw, -hh); 

    GL11.glTexCoord2f(1.0f, 1.0f); 
    GL11.glVertex2f(+hw, +hh); 

    GL11.glTexCoord2f(0.0f, 1.0f); 
    GL11.glVertex2f(-hw, +hh); 
} 
GL11.glEnd(); 

到目前爲止,這個工程(而且也披掛glPushMatrix()/glPopMatrix()調用之間)。但是,不管我到目前爲止所繪製的GLContext是什麼都沒有顯示出來。在初始化代碼中刪除對GL11.glTexImage2D的調用,則不會顯示精靈,但其他所有內容(無紋理)都會正確顯示。

+0

爲什麼你要爲每一幀重新加載紋理?這會很快消耗掉你的記憶。紋理不是垃圾收集。使生成的紋理ID成爲類成員變量並僅加載一次紋理! – datenwolf 2012-08-05 09:26:57

+0

我只在初始化GL時創建紋理。 – efritz 2012-08-05 20:46:14

+0

我只是問,因爲您在描述爲渲染代碼的代碼中調用了TextureLoader.loadTexture。 – datenwolf 2012-08-05 21:32:56

回答

2

您需要爲不應該紋理化的對象禁用紋理處理(glDisable(GL_TEXTURE_2D))。

+0

謝謝。如果這是記錄在某處我真的錯過了大好時光。 – 2013-11-23 15:30:23