簡體   English   中英

Android 如何為 GL_TEXTURE_EXTERNAL_OES 生成 mipmap

[英]Android How to generate mipmap for GL_TEXTURE_EXTERNAL_OES

當我將 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 下采樣,以最小化 memory 帶寬開銷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM