我是OpenGL的新手。我正在为学术目的在Android上制作一个色盲应用程序。我拥有着色器中所需的所有代码来进行我需要的操作,但是我仍然必须让着色器能够看到我在Java代码中创建的数据。在我的Java代码中,我最终得到了一个大小为262144的大型int数组。我试图以任何方式将此数组传递到着色器,但它太大了。我被告知,如果我将数据转换为纹理,我可以轻松地将这些信息传递到着色器中。
我已经按照同事的指示将我的int数组转换为字节数组,但现在我迷失了如何创建opengl纹理并将我的字节数据输入到它中以供着色器查看和使用。
所以,我需要创建一个opengl纹理,用我的数据填充它(字节数组最好?)然后能够在我的着色器中使用该纹理。如果有人可以帮助我,我将不胜感激。看到例子后我工作得很好,而不是解释,因为我非常英语,但我欢迎任何帮助。
我确实尝试过编码。我最终试图制作GLES20.glTexImage2D。我想我可以传入我的字节数组,但它需要一个缓冲区?请给我完成任务所需的所有步骤。
非常感谢!
麦克
答案 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);