LWJGL中的立方体贴图

3
我尝试在我的项目中添加立方体贴图,但是我遇到了一个错误,不知道如何修复它。当我注释掉这几行代码时,一切都正常工作,但当它们存在时,就会出现以下错误:
"Exception in thread "main" org.lwjgl.opengl.OpenGLException: Cannot use offsets when Pixel Unpack Buffer Object is disabled"
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());

有什么问题吗?

我该如何修复这个错误?

谢谢您的时间。

1个回答

4
这是因为 glTexImage2D 的最后一个参数应该是包含纹理像素的缓冲区。因此,您应该使用 LWJGL BufferUtils 分配一个 20*20 的缓冲区,用纹理数据填充它,然后将此缓冲区传递给 glTexImage2D 函数。
现在,将整数传递给 glTexImage2D 仍然能够编译的原因是,有一个版本接受长整型作为最后一个参数。它应该表示从像素缓冲对象中获取像素数据的偏移量。由于您没有附加像素缓冲对象(并且对于立方体贴图不需要),LWJGL 报错。 因此,将 temp.getTextureID() 作为最后一个参数调用了“错误”的 glTexImage2D 版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接