2011-02-01 88 views
3

我嘗試添加立方體貼圖到我的項目,但我得到一個錯誤,我不知道如何解決它 當我評論這幾行時,每件事情都很好,但是當他們在......發生這個錯誤LWJGL立方體圖

「異常線程‘main’org.lwjgl.opengl.OpenGLException:當像素解包緩衝區對象是殘疾人無法使用補償」

GL11.glDisable(GL11.GL_TEXTURE_2D); 
    GL11.glEnable(GL13.GL_TEXTURE_CUBE_MAP); 
    GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1); 

    GL11.glTexImage2D(GL13.GL_TEXTURE_CUBE_MAP_POSITIVE_X,0,GL11.GL_RGBA,20,20,0,GL11.GL_RGBA,GL11.GL_UNSIGNED_BYTE,temp.getTextureID()); 
    GL11.glTexImage2D(GL13.GL_TEXTURE_CUBE_MAP_NEGATIVE_X,0,GL11.GL_RGBA,20,20,0,GL11.GL_RGBA,GL11.GL_UNSIGNED_BYTE,temp.getTextureID()); 
    GL11.glTexImage2D(GL13.GL_TEXTURE_CUBE_MAP_POSITIVE_Y,0,GL11.GL_RGBA,20,20,0,GL11.GL_RGBA,GL11.GL_UNSIGNED_BYTE,temp.getTextureID()); 
    GL11.glTexImage2D(GL13.GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,0,GL11.GL_RGBA,20,20,0,GL11.GL_RGBA,GL11.GL_UNSIGNED_BYTE,temp.getTextureID()); 
    GL11.glTexImage2D(GL13.GL_TEXTURE_CUBE_MAP_POSITIVE_Z,0,GL11.GL_RGBA,20,20,0,GL11.GL_RGBA,GL11.GL_UNSIGNED_BYTE,temp.getTextureID()); 
    GL11.glTexImage2D(GL13.GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,0,GL11.GL_RGBA,20,20,0,GL11.GL_RGBA,GL11.GL_UNSIGNED_BYTE,temp.getTextureID()); 

有什麼東西錯了嗎? 我該如何解決這個錯誤?

感謝您的時間

回答

4

這是因爲最後一個參數glTexImage2D應該是包含了紋理像素的緩衝區。所以你應該使用LWJGL BufferUtils分配一個20 * 20的緩衝區,用你的紋理數據填充它,然後將這個緩衝區傳遞給glTexImage2D函數。

現在,爲什麼傳遞一個int到glTexImage2D仍然編譯的原因是有一個版本接受長爲最新的參數。它應該表示像素緩衝區對象中的偏移量來從中提取像素數據。由於你沒有附加像素緩衝區對象(並且你不需要一個立方體貼圖),LWJGL抱怨道。 所以基本上,把temp.getTextureID()作爲最後一個參數調用glTexImage2D的「錯誤」版本。