我正在尝试通过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做一些工作?