iphone - 在iPhone上使用OpenGL ES 2.0渲染大小> 1024的UIImage

标签 iphone ios opengl-es uiimage rendering

我正在iPhone 4(1936X2592)上捕获全分辨率UIImage
然后将其缩放为1936x1936大小的正方形。

现在,我需要将此图像加载到纹理中,并让OpenGL使用GLSL进行渲染。

问题是OpenGL仅支持2个纹理大小的幂,最多只能支持1024个。

那么我该如何解决呢?

谢谢。

编辑:我的问题是无关紧要的,我的目标是3GS及更高版本,它支持2048x2048图像大小。
我的问题是另一个问题:Camera frame to UIImage to OpenGL rendering gives an odd image

最佳答案

从3GS开始,OpenGL支持高达2048x2048的纹理。 4S和iPad2支持4096x4096。

但是,如果不是这种情况,则您的选择围绕着将像素打包在一起,有损压缩或使用多个纹理展开,您都可以在GLSL中或通过几何来修复这两个问题(需要付费)。

最明显的选择是上传为四个图块。您在每个方向上的输出大小为1936,可以上传具有一定重叠的纹理,这样,即使使用线性纹理过滤,也应该能够实现无缝连接。假设您只需要水平分割,则可以确保一个纹理的底部两行与另一个纹理的前两行相同,并将几何图形连接在这两行之间。

其他选项不仅不那么明显,而且用处不大。在有损压缩方面,您可以将纹理从RGB转换为YUV空间,并在代表每个RGBA样本的32位中存储四个5位Y样本,一个6位U样本和一个6位V样本。然后,您需要打开包装并在着色器中重新组合。但是,您会降低视觉质量并大大降低性能。

关于iphone - 在iPhone上使用OpenGL ES 2.0渲染大小> 1024的UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8065171/

相关文章:

objective-c - 使用 OpenGL ES 模板时的错误信息

ios - 调用 glDrawArrays 时随机崩溃

multithreading - 有什么方法可以在不创建伪造的 NSThread 的情况下进入 Cocoa 多线程模式?

ios - 如何在 iOS 8 中将 UIVisualEffectView 添加到 UINavigationBar?

Android 字符串资源存储在 ...\res\values\strings.xml 之外

iphone - 在 iPad3 上发生旋转/2x 之前,应用程序不会响应

ios - 如何在栏按钮项中的第二行文本下方添加下划线?

iphone - CATransaction 动画淡入淡出 uiviews

iphone - 在 Xcode 4 和 iOS 4 中定义成员和属性

iphone - NSManagedObjectContext executeFetchRequest 返回不稳定的对象,导致 EXC_BAD_ACCESS、SIGABRT 等