我开始在 OSX 中进行 GUI 开发,我想知道,系统中绘制图形的 VERY BASE 层是什么?似乎有很多上层抽象(AppKit、OpenGL、CG 等),它们既好又省时,但对我来说,在我了解基础层之前无法使用(除非它的二进制或程序集,在这种情况下我会加入毛巾)。
2 回答
我开始在 OSX 中进行 GUI 开发,我想知道,系统中绘制图形的 VERY BASE 层是什么?
信不信由你,但自从 MacOS X Tiger 以来,整个图形堆栈都基于 OpenGL。OpenGL 下面只有 GPU 驱动程序,然后是裸机。
似乎有很多上层抽象(AppKit、OpenGL、CG 等),它们既好又省时,但对我来说,在我了解基础层之前无法使用(除非它的二进制或程序集,在这种情况下我会加入毛巾)。
为什么它们对你不可用?您希望从增加的知识中获得什么?您使用的级别越低,您必须越了解它是如何有效利用它的。OpenGL 本身已经相当低级了。OpenGL 实现向您隐藏了一些血腥细节,例如按需纹理数据从快速内存交换到常规内存等,并且 GLSL 编译器也相当高级。但另一方面,为了有效地使用 OpenGL,您应该以 GPU 原生使用的格式提供数据,着色器可以以二进制形式缓存,缓冲区对象为您提供用于 DMA 传输的 API。
如果你真的对最低层感兴趣,那你就必须看看 GPU 设计,即金属。AMD 实际上确实在他们的一些 GPU 上发布了完整的编程文档(Google for OpenGPU)。
你可以做的比查看Quartz 2D Programming Guide更糟糕。这是您将最常使用的层,理解这一点将成为您进行任何进一步调查的基础。