我正在使用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
的調用,則不會顯示精靈,但其他所有內容(無紋理)都會正確顯示。
爲什麼你要爲每一幀重新加載紋理?這會很快消耗掉你的記憶。紋理不是垃圾收集。使生成的紋理ID成爲類成員變量並僅加載一次紋理! – datenwolf 2012-08-05 09:26:57
我只在初始化GL時創建紋理。 – efritz 2012-08-05 20:46:14
我只是問,因爲您在描述爲渲染代碼的代碼中調用了TextureLoader.loadTexture。 – datenwolf 2012-08-05 21:32:56