如何解决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 举报,一经查实,本站将立刻删除。