繁体   English   中英

在iPhone上使用OpenGL渲染UIImage / PNG的最简单,最快捷的方法?

[英]Easiest, fastest way to render UIImage/PNG using OpenGL on iPhone?

我编写了一个iPhone应用程序,它从用户那里获取输入并根据输入更新位图上下文。 更新后,它会更新UIView的显示。 我通过在UIView子类中实现drawRect来实现这一点。

目前我正在使用Quartz 2D。 鉴于更新每秒发生多次,我注意到虽然app在模拟器中表现良好,但实际设备上的速度要慢得多(尽管不可用)。 我想重写drawRect来改用OpenGL(因为我听说这个性能要高得多)。 如果你有其他想法,我会全力以赴。

我浏览过网络上有关如何使用OpenGL简单显示PNG的示例/教程,但大多数都对我需要的东西有点过分。 我正在寻找一个简短而甜蜜的样本,用于快速获取PNG文件或UIImage,然后使用OpenGL在UIView内渲染(可以实现?这在概念上甚至是否有意义?) - 或指向文档的指针以加速图像渲染使用现有的Quartz API。

在您决定回复RTFM回复之前 - 请不要浪费我的时间或您的时间。 我不是在寻找捷径,我不介意做功课。 我只是在寻找一个符合我需求的简单解决方案/指导,而且很难找到。 我相信精通OpenGL的人可能会解释需要做什么,并在5分钟内完成这个代码。 如果那就是你,那将是我的一天:)。

任何帮助,指导等总是受到赞赏。 谢谢。

使用您自己分配的内存创建位图上下文

void* data = malloc(width*height*4);

CGContextRef ctx = CGBitmapContextCreate( . . . );

并将您想要的任何内容呈现到该位图上下文中。 接下来,从数据中创建纹理

glGenTextures(1, &texref);
glBindTexture(GL_TEXTURE_2D, texref);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);

现在,只需按照任何有关使用GL渲染此纹理的教程,使用Apple的示例代码了解如何将GL渲染为UIView。 请注意在位图上下文中使用RGBA字节顺序(或将GL调用交换到ARGB)。 此外,请记住,GL仅喜欢尺寸为2 ^ nx 2 ^ n的纹理。

使用iPhone的共享内存架构,数据不会在每个周期发送到显卡,因此这不会导致性能损失。

显示更新位图的更快方法可能是将位图上下文分配给UIView的CALayer(如果需要,可以调整大小和/或转换为所需目标矩形的子视图)。 不需要drawRect或OpenGL框架渲染。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM