相关疑难解决方法(0)

GLKView设置drawable属性

我正在尝试移植Apples GLPaint示例以使用GLKit.使用UIView,可以返回视图的CAEAGLLayer并将drawableProperties设置为包含kEAGLDrawablePropertyRetainedBacking.这具有在呈现渲染缓冲区之后保留可绘制内容的效果,如预期的那样.在绘制调用之后,删除此属性会导致闪烁,部分可绘制内容似乎被绘制到不同的缓冲区.

问题是这正是我现在在GLKView中遇到的问题,但似乎没有办法设置drawable属性.返回CAEAGLLayer并设置属性没有任何效果,我没有看到GLKView的任何相关属性来设置保留的支持.

有没有人遇到这个或有解决方案?

iphone opengl-es-2.0 ios5 glkit

31
推荐指数
3
解决办法
4572
查看次数

如何创建一个适用于Retina显示的CGBitmapContext,而不是浪费空间进行常规显示?

是否真的如果它在UIKit,包括drawRect,Retina显示器的高清方面是自动处理?那么这意味着drawRect,1024 x 768视图的当前图形上下文实际上是2048 x 1536像素的位图上下文?

(更新:如果我使用当前上下文创建图像drawRect并打印其大小:

CGContextRef context = UIGraphicsGetCurrentContext();
CGImageRef image = CGBitmapContextCreateImage(context);
NSLog(@"width of context %i", (int) CGImageGetWidth(image));
NSLog(@"height of context %i", (int) CGImageGetHeight(image));
Run Code Online (Sandbox Code Playgroud)

然后在新的iPad上,状态栏被禁用,打印2048和1536,iPad 2将显示1024和768)

我们实际上享受为我们自动处理1点= 4像素的奢侈品.

但是,如果我们使用CGBitmapContextCreate,那么那些将是像素,而不是点?(至少如果我们为该位图提供数据缓冲区,缓冲区的大小(字节数)显然不是用于更高的分辨率,而是用于标准分辨率,即使我们NULL作为缓冲区传递以便CGBitmapContextCreate为我们处理缓冲区,大小可能与传入数据缓冲区相同,而且只是标准分辨率,而不是Retina的分辨率.

我们总是可以为iPad 1和iPad 2以及新iPad创建2048 x 1536,但它会浪费内存,处理器和GPU功能,因为它只需要新iPad.

那么我们是否必须使用a if () { } else { }来创建这样的位图上下文,我们如何实际这样做呢?并且我们所有的代码CGContextMoveToPoint都必须针对Retina显示器进行调整才能使用x * 2,y * 2而非视网膜显示器也只需使用x, y?这对代码来说可能非常混乱.(或者我们可以定义一个局部变量scaleFactor,并设置它[[UIScreen mainScreen] scale]所以它是1标准分辨率和2如果是视网膜,所以我们x并 …

core-graphics cgbitmapcontextcreate ios retina-display

15
推荐指数
1
解决办法
1万
查看次数

在Retina iPad上显示全屏CAEAGLLayer的问题

我遇到了一些问题,让UIView使用大型CAEAGLLayer来正确显示.如果帧高于某个大小(在任一维度上显然为768,且contentScaleFactor为2.0),则会使用先前版本缓冲区的扭曲图像重绘.

在Apple的GLPaint示例中重现它非常容易.PaintingView.m的硬编码contentScaleFactor为1.0,但如果将其更改为2.0:

self.contentScaleFactor = 2.0;
Run Code Online (Sandbox Code Playgroud)

并在Retina iPad(而不是模拟器)上运行它,当你绘制时你得到这样的东西:

http://imgur.com/jPNqV

opengl-es ipad ios retina-display

3
推荐指数
1
解决办法
1604
查看次数