LWJGL不能使用bytebuffer,但可以使用float数组

时间:2016-10-01 08:52:28

标签: java opengl lwjgl

我正在尝试通过LWJGL显示纹理:

glBindTexture(GL_TEXTURE_2D, textureId);

            BufferedImage img = null;

            img = ImageIO.read(new File(filePath));

            Raster imgRaster = img.getData();

            DataBufferByte imgBuffer = (DataBufferByte) imgRaster.getDataBuffer();

            ByteBuffer byteBuffer = ByteBuffer.wrap(imgBuffer.getData());

            //glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1,1, 0, GL_RGB, GL_FLOAT, new float[]{1f,0f,1f});
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img.getWidth(), img.getHeight(), 0,
                         GL_RGB, GL_UNSIGNED_BYTE, byteBuffer);

            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

然而,纹理是完全黑色的(据我所知,没有错误)。在调试器中,我验证了bytebuffer中确实存在数据(足以说明我提供的大小的纹理),所以我至少应该看到一些东西。

但是,如果我在数组中快速抛出几个浮点数并将其传递给glTexImage2D:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1,1, 0, GL_RGB, GL_FLOAT, new float[]{1f,0f,1f});

屏幕上的形状突然变成洋红色。

过去我遇到过那些* Buffers的问题,用数组替换它们似乎总是有效。

我是否需要使用ByteBuffer做一些工作?

0 个答案:

没有答案