如何在Android中从字节数组创建OpenGL纹理

时间:2013-01-12 04:02:08

标签: android opengl-es textures shader jogl

我是OpenGL的新手。我正在为学术目的在Android上制作一个色盲应用程序。我拥有着色器中所需的所有代码来进行我需要的操作,但是我仍然必须让着色器能够看到我在Java代码中创建的数据。在我的Java代码中,我最终得到了一个大小为262144的大型int数组。我试图以任何方式将此数组传递到着色器,但它太大了。我被告知,如果我将数据转换为纹理,我可以轻松地将这些信息传递到着色器中。

我已经按照同事的指示将我的int数组转换为字节数组,但现在我迷失了如何创建opengl纹理并将我的字节数据输入到它中以供着色器查看和使用。

所以,我需要创建一个opengl纹理,用我的数据填充它(字节数组最好?)然后能够在我的着色器中使用该纹理。如果有人可以帮助我,我将不胜感激。看到例子后我工作得很好,而不是解释,因为我非常英语,但我欢迎任何帮助。

我确实尝试过编码。我最终试图制作GLES20.glTexImage2D。我想我可以传入我的字节数组,但它需要一个缓冲区?请给我完成任务所需的所有步骤。

非常感谢!

麦克

1 个答案:

答案 0 :(得分:5)

我认为你需要做以下事情;

byte data[4 * 262144];  // your byte array, 4 * int count
ByteBuffer buffer = ByteBuffer.allocateDirect(4 * 262144);
buffer.put(data);
buffer.position(0);

GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width, height, 0,
                    GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, buffer);