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

7

我对OpenGL完全不熟悉。我正在为学术目的在Android上制作一款色盲应用程序。我已经在着色器中编写了所有所需的代码来进行必要的操作,但是我仍然需要让着色器能够看到我在Java代码中创建的数据。在我的Java代码中,我最终得到了一个大小为262144的大整数数组。我尝试以任何可能的方式将此数组传递到着色器中,但它太大了。有人告诉我,如果将我的数据转换为纹理,则可以轻松地将这么多信息传递到着色器中。

按照同事的建议,我已将整数数组转换为字节数组,但现在我迷失了方向,不知道如何创建OpenGL纹理并将我的字节数据输入其中,以便着色器可以看到并使用它。

因此,我需要创建一个OpenGL纹理,用我的数据(字节数组最佳?)填充它,然后能够在我的着色器中使用该纹理。如果有人能帮助我,我将非常感激。我通过查看示例而不是解释来很好地工作,因为我对OpenGL非常无知,但我欢迎任何帮助。

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

非常感谢!

Mike

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);

你知道如何在Android NDK中实现这个吗?http://stackoverflow.com/questions/14431693/how-can-i-bind-a-pixel-array-of-integer-colors-to-a-texture-using-the-android-nd - torger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接