7

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

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

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

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

非常感谢!

麦克风

4

1 回答 1

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);
于 2013-01-12T15:37:20.673 回答