微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android 如何为 GL_TEXTURE_EXTERNAL_OES 生成 mipmap

如何解决Android 如何为 GL_TEXTURE_EXTERNAL_OES 生成 mipmap

当我将 cameraTexture 渲染为低分辨率 SurfaceView 时,它看起来像素化了。

似乎我需要为相机纹理生成 mipmap,但它不会以这种方式工作。

GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glGenTextures(1,glTextures,0);
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,glTextures[0]);

GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,GLES20.GL_TEXTURE_MIN_FILTER,GL11.GL_LINEAR_MIPMAP_LINEAR);
GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,GLES20.GL_TEXTURE_MAG_FILTER,GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,GLES20.GL_TEXTURE_WRAP_S,GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,GLES20.GL_TEXTURE_WRAP_T,GLES20.GL_CLAMP_TO_EDGE);

mInputSurfaceTexture = new SurfaceTexture(inputTexture);
mInputSurfaceTexture.setDefaultBufferSize(CCamera.SIZE.getWidth(),CCamera.SIZE.getHeight());
mInputSurfaceTexture.setonFrameAvailableListener(new CameraFrameListener(),mGLHandler);
mInputSurface = new Surface(mInputSurfaceTexture);

# Feed mInputSurface to camera service.

public void onFrameAvailable(SurfaceTexture surfaceTexture) {
    surfaceTexture.updateTexImage();
    GLES20.glGenerateMipmap(GLES11Ext.GL_TEXTURE_EXTERNAL_OES);   
    //GLES11Ext.glGenerateMipmapOES(GLES11Ext.GL_TEXTURE_EXTERNAL_OES);
}

顺便说一句,这是不同的:

GLES11Ext.glGenerateMipmapOES

GLES20.glGenerateMipmap

解决方法

你不能,至少不能直接。

实现将 YUV 转换为 RGB 以写入 RGB 图像的屏幕外传递,然后对其进行 mipmap。如果您知道您只需要低分辨率版本,那么 YUV 到 RGB 的传递也可以实现初始的 2:1 下采样以最小化内存带宽开销。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。