有时,术语“图形上下文”有点抽象。它们实际上是系统资源,但它们是来自图形卡的资源,就像文件句柄来自硬盘驱动器或任何永久存储设备一样?
就像文件句柄具有某些状态有关文件句柄是只读还是读/写,以及下一次读取操作的当前位置(状态)一样,图形上下文也具有有关当前笔触颜色,笔触宽度,或任何相关数据。 (更新:,在写入模式下,我们可以转到200MB文件中的任意点并更改数据,就像我们拥有Graphics Context的画布并在其上方绘制内容一样)
因此,Graphics Context实际上是全局的,系统范围的资源。它们不是应用程序单例或任何内容的一部分,就像文件(或文件句柄)不是(必要)应用程序单例的一部分一样。
而且,如果没有功能强大的图形卡(或者如果图形卡已经用完资源),则操作系统可以使用低级图形例程(使用位图)来模拟图形上下文,而不是让图形卡来处理它。
这是图形上下文在iOS和一般大多数其他常见OS上实际工作的方式吗?
最佳答案
我认为最好不要以特定的系统资源来考虑Graphics Context。据我所知,除了内存之外,图形上下文不再像任何类“对象”那样对应于任何特定资源。实际上,Graphics上下文旨在为核心图形功能提供“画布”以供操作。事实是,Apple没有向我们提供图形上下文内部工作方式的具体细节。但是,我们对此有几件事了解:
renderInContext
首先为您提供图像,其中包括渲染和复制图像。如果您希望随后显示它,则必须将其传递回Core Graphics,然后再将其写回。在iPad 3上,这涉及大量内存(取决于视图的大小),并且很容易使缓冲区溢出。[view setNeedsDisplay]
。如果您要进行GPU绘图,我相信唯一的方法就是在使用iOS的情况下使用OpenGL。如果您使用的是MacOS,我认为您实际上可以使用QuartzGL在GPU上启用Quartz(核心图形...同样的东西)绘图。但这可能不值得付出努力,请参阅本文:Mac QuartzGL (2D drawing on the graphics card) performance
更新
正如您在下面的评论中看到的那样,Apple当前用于Quartz绘制的安排可能是最好的,尤其是因为视图是直接绘制到GPU缓冲区的。有一种想法认为应该在GPU上进行任何视觉处理,但事实是,GPU并不是为矢量图设计的。它们旨在处理大量的变换,光照,纹理贴图等。通过使用CPU处理矢量绘图并将其他所有东西留给GPU,Apple适当地分割了图形处理。此外,由于Quartz直接吸引到GPU的缓冲区(这避免了繁重的内存工作),因此您在CPU和GPU之间的数据传输上不会失去任何效率。
关于ios - 图形上下文的概念与文件句柄非常相似吗? (在iOS和其他系统上),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10775738/