使用alpha组件将像素数据从Java发送到OpenGL的最有效方法

时间:2014-05-21 12:57:38

标签: java opengl bufferedimage

我正在寻找将BufferedImage中包含的4分量像素数据打包成OpenGL可以使用的格式的最有效(CPU,而非内存)方式。

据我所知,在Java方面,有 TYPE_4BYTE_ABGR TYPE_INT_ARGB ,在GL方面有 GL_RGBA GL_BGRA 。请注意,这意味着重新映射alpha组件。目前从Java到GL我做了类似的事情:

int w = image.getWidth(), h = image.getHeight();
for (int i=0;i<w;i++)
    for (int j=0;j<h;j++)
{
    int col = image.getRGB(i, j);
    data.put(4*(j*w+i), (byte)((col >> 16) & 0xff));
    data.put(4*(j*w+i)+1, (byte)((col >> 8) & 0xff));
    data.put(4*(j*w+i)+2, (byte)((col >> 0) & 0xff));
    data.put(4*(j*w+i)+3, (byte)((col >> 24) & 0xff));
}

其中data是 ByteBuffer ,然后将 GL_RGBA 格式发送到其中一个 glTexture 方法。

我并不是真的在寻找上述代码的轻微调整(除非您认为它们会产生重大影响),而是一种避免完全重新映射的方法。或者至少避免 getRGB 中的颜色转换。例如,在Java中处理 TYPE_3BYTE_BGR 时,我可以将其直接发送到 GL_BGR 并填充缓冲区:

data.put(((DataBufferByte)image.getData().getDataBuffer()).getData());

0 个答案:

没有答案