字节数组图像使用GLES20.GlTexImage2D()android xamarin显示到glsurafceview

时间:2017-01-25 13:04:12

标签: android xamarin bytebuffer glsurfaceview glteximage2d

我必须将字节数组图像绘制到glsurfaceview,它不断来自xamarin android项目中的服务器。代码不适用于直接缓冲区绘制,但它适用于位图绘制。

如果我将字节数组转换为位图并绘制:

,我的代码正常工作
mBitmap = { .. create bitmap from byte[].. }
GLUtils.TexImage2D(GLES20.GlTexture2d, 0, mBitmap, 0);

如果我输入以下代码,则使用相同的代码,然后不绘制。我想使用GLES20.GlTexImage2D()绘制字节数组。我的工作代码不是:

// mFrameBuffer is my byte array
ByteBuffer buffer = ByteBuffer.AllocateDirect(mFrameBuffer.Length);
buffer.Order (ByteOrder.NativeOrder());
buffer.Put (mFrameBuffer);
buffer.Position (0);
GLES20.GlTexImage2D (GLES20.GlTexture2d, 0, GLES20.GlRgb565, mWidth, mHeight, 0, GLES20.GlRgb565, GLES20.GlUnsignedByte, buffer);

如何使用GlTexImage2D绘制图像直接字节数组。

2 个答案:

答案 0 :(得分:0)

buffer.position(0)之后你应该在某个插槽上绑定一些纹理

int id = -1;
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, id);

在检查了您的位图配置后,如果它不是RGB565,您应该在glTexImage2D中使用相应的颜色格式,例如GLES20.GL_RGBA如果位图配置为Bitmap.Config.ARGB_8888

GLES20.glTexImage2D(GL20W.GL_TEXTURE_2D, 0, GL20W.GL_RGBA, mWidth, mHeigh, 0,
            GL20W.GL_RGBA, GL20W.GL_UNSIGNED_BYTE, buffer)

然后将您的屏幕设置为FrameBuffer目标:

GLES20.glBindFramebuffer(GL_FRAMEBUFFER, 0);

完成此步骤后,只需绘制纹理

答案 1 :(得分:0)

我通过GLES20.GlRgb565到GLES20.GlRgba的更改格式找到了解决方案。

GLES20.GlRGB565和GLES20.GlRGBA4不是传递给glTexImage2D的GLES20.GlTexImage2D()的有效值。