Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS 5.0 OpenGL ES 2.0纹理缓存上使用mipmap过滤_Ios_Opengl Es_Opengl Es 2.0 - Fatal编程技术网

在iOS 5.0 OpenGL ES 2.0纹理缓存上使用mipmap过滤

在iOS 5.0 OpenGL ES 2.0纹理缓存上使用mipmap过滤,ios,opengl-es,opengl-es-2.0,Ios,Opengl Es,Opengl Es 2.0,我使用纹理缓存将视频帧绘制到屏幕上,就像苹果的RosyWriter示例应用程序一样 我想将图像的采样从1080p降到320x480左右(出于各种原因,我不想以较低的分辨率拍摄),并使用mipmap过滤来消除混叠。但是,当我尝试添加: glGenerateMipmap(CVOpenGLESTextureGetTarget(inputTexture)); glTexParameteri(CVOpenGLESTextureGetTarget(inputTexture), GL_TEXTURE_MIN_

我使用纹理缓存将视频帧绘制到屏幕上,就像苹果的RosyWriter示例应用程序一样

我想将图像的采样从1080p降到320x480左右(出于各种原因,我不想以较低的分辨率拍摄),并使用mipmap过滤来消除混叠。但是,当我尝试添加:

glGenerateMipmap(CVOpenGLESTextureGetTarget(inputTexture));
glTexParameteri(CVOpenGLESTextureGetTarget(inputTexture), GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

我只是得到一个黑屏,好像没有生成mipmap。我正在从一个纹理渲染到另一个纹理。源和目标都使用纹理缓存映射到像素缓冲区。

只能为两个大小的纹理生成mipmap。我所能想到的iOS摄像头返回的视频帧大小中没有一个是二维的。对于在仍然生成mipmap的情况下使用纹理缓存,我认为您必须执行一些操作,比如将纹理在屏幕外重新渲染到由纹理支持的两个FBO的幂,然后为其生成mipmap

也就是说,这可能不是实现你想要的最好方式。Mipmaps仅在使屏幕上的纹理变小而不是变大时才有帮助。而且,它们在运行时生成速度非常慢,因此这会拖慢整个视频处理

放大时会看到什么样的别名?当放大视频帧时,正常的硬件纹理过滤应该产生一个相当平滑的图像。例如,从我的框架中获取并运行FilterShowcase示例,然后查看裁剪过滤器。用这种方式放大一段视频似乎可以很好地平滑事情,只需使用硬件过滤


我确实在框架中使用mipmap对大型图像进行平滑下采样(当smoothlyScaleOutput设置为“是”时,请参见GPUImagePicture),但这同样是用于缩小图像,而不是放大图像。

嘿,Brad,对不起,这个问题让人困惑-我对它进行了编辑以使其有意义。虽然我添加了放大功能,但这不是重点。当我缩小图像时,问题实际上发生了,图像被降采样,这样可以更容易地进行流式处理。能够放大一个区域只与此相关,因为这意味着我不能简单地降低原始捕获分辨率,而必须在软件中手动降低采样。在着色器中对图像进行低通滤波是否足以消除混叠?我已经准备好了写入帧缓冲区和帧外缓冲区等的样板代码。@chris838-在寻找其他东西时,我今天遇到了这个:它描述了在NPOT纹理上实现三线性过滤。这可能有助于在您的情况下实现更平滑的下采样。