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

3
我将为您翻译以下内容:

我想在OpenGL的GLSurfaceView中显示一个字节数组。

因此,我创建了一个实现Renderer接口的GLRenderer类,并编写了一个onSurfaceCreated方法。

byte[] data = new byte[512*512];
            for (int i = 0; i < 512*512; i++) {
                data[i] = 100;
            }
            ByteBuffer buffer = ByteBuffer.allocateDirect(512*512);
            buffer.put(data);
            buffer.position(0);

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

但是屏幕上没有任何显示内容。请注意,onSurfaceChangedonDrawFrame 方法中没有特殊的代码。


如果您使用无符号字节RGBA格式,则每个像素需要4个字节的数据。另外,您说onDrawFrame中没有特殊代码是什么意思?您如何绑定纹理? - pleluron
使用GL_RED颜色格式,然后返回每像素1字节。 - pleluron
@pleluron 谢谢您的回复,它起作用了。您可以发布答案吗? - epsilones
1个回答

1
格式和数据大小不匹配。GL_RGBA每个纹素占用4*sizeof(type)的空间,因此您需要相应地调整缓冲区。但是,如果您只想要单通道纹理,请使用GL_RED。

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