3

我尝试将多维数据集映射添加到我的项目中,但是当我评论这几行时,我遇到了一个错误,我不知道如何修复它,一切正常,但是当它们在...时发生此错误

“线程“主”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

1 回答 1

4

这是因为 glTexImage2D 的最后一个参数应该是一个包含纹理像素的缓冲区。所以你应该使用 LWJGL BufferUtils分配一个 20*20 的缓冲区,用你的纹理数据填充它,然后将此缓冲区传递给 glTexImage2D 函数。

现在,将 int 传递给 glTexImage2D 仍然编译的原因是因为有一个版本接受 long 作为最新参数。它应该代表像素缓冲区对象中的偏移量,以从中获取像素数据。由于您没有附加像素缓冲区对象(并且立方体贴图不需要像素缓冲区对象),LWJGL 抱怨。所以基本上,将 temp.getTextureID() 作为最后一个参数调用 glTexImage2D 的“错误”版本。

于 2011-03-22T10:06:12.103 回答