iOS:GLPaint 无法在大框架上绘制

标签 ios opengl-es

苹果手绘示例GLPaint , 使用 OpenGL ES 绘制不能用大框架绘制。我需要在大 Canvas 上绘制超过 {2410, 1808} 的内容。但是当我尝试绘图时,控制台上会显示一条消息,

2012-06-05 14:29:40.780 GLPaint[3390:707] Frame of drawingView: {{-827.222, -567.004}, {2410, 1808}}
2012-06-05 14:29:40.884 GLPaint[3390:707] failed to make complete framebuffer object 8cd6 

On my code I have set the frame as-

//PaintingViewGL performing the freehand drawing of OpenGL ES
//drawingView is a UIView with dynamic frame size

paintingViewGL = [[PaintingViewGL alloc] initWithFrame:drawingView.frame];
paintingViewGL.backgroundColor = [UIColor clearColor];

[drawingView addSubview:paintingViewGL];
paintingViewGL.center = drawingView.center;
paintingViewGL.hidden = NO;

我在帧大小 {1435, 1076} 和稍大一点的帧(如 {1600, 1200})上得到了很好的结果,画笔像波浪一样消失并开始在屏幕上跳舞。有时我会收到 Received memory 警告。在这种情况下,Level=1。

最佳答案

对于 iPad 2 之前的设备,最大纹理大小为 2048 x 2048,因此您不能绘制大于该大小的纹理或帧缓冲区对象。您只会看到错误和黑屏。在较新的设备(iPad 2、Retina iPad、iPhone 4S)上,此纹理大小限制已增加到 4096 x 4096。

在更大的 Canvas 上绘图的唯一解决方案是在 OpenGL ES 中创建平铺机制,就像 CATiledLayer 在 Core Animation 中所做的那样。不过,祝您好运,因为如果您对 OpenGL ES 渲染不太熟悉,这将是一项重大任务。

此外,您将在 OpenGL ES 中遇到非常大的场景的内存问题,尤其是在较旧的 iOS 设备上。对于您提到看到警告的 1600x1200 图像,每个未压缩的帧本身占用约 7.7 MB 的内存。如果您有多个图层或纹理,如果您不小心,可能会很快加起来并耗尽设备上的可用内存。对于 2410x1808 图像,您现在看到的是每帧 17.4 MB,因此这是您希望平铺它以仅使用您当时需要的平铺的另一个原因。

关于iOS:GLPaint 无法在大框架上绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10892455/

相关文章:

ios - UIColor colorWithPatternImage : fails on JPG file - but UIImage loads the JPG fine?

ios - 如何删除推送通知 API

ios - 在 inappbrowser iOS 10(clearcache=no;)中缓存 Cookies 在应用程序重启时不起作用 - Cordova/Ionic

java - 如何在 3D 应用程序中定义和标准化单位?

iOS openGL 图像反转

android - Nexus S 上的 OpenGL ES 黑色纹理

ios - 释放 IOSurface

ios - Swift firebase createUser 函数完成 block

ios - 使用 GLKit 按需 OpenGL ES 渲染

android - 如何使用 libpng 生成 RGBA4444 纹理数据,并将其用于 opengl?