是否可以在macOS中创建由简单像素缓冲区支持的窗口?



我知道macOS有很多框架可以使图形处理变得容易。在这种情况下,我想为了让学习体验和可定制性而努力生活。

我想简单地制作一个 X x Y 像素的窗口,制作一个 X x Y 像素的数组,用颜色数据填充数组,并让窗口显示这些像素。

基本上,我想玩弄我自己的小引擎来画东西,这样我就可以从经验中学习。而且我不想使用OpenGL,Metal或任何其他为我完成艰苦工作的框架。只需给我一个窗口,让我一个接一个地给像素着色。一旦我学会了如何做我想做的事情,我就可以升级到更高层次的框架。

那么在macOS中,什么会让我做到这一点呢?我已经看过几个框架,但有太多的框架无法确定真正从哪里开始。一旦我知道从哪里开始,我就可以从那里弄清楚其余的。

到目前为止,我最好的主意是使用Core Graphics,创建一个像素缓冲区,将其设置为整个窗口,并忽略Core Graphics为我做的所有其他花哨的东西。如果可能的话,我想比这低一个级别。

  • 如果您愿意,您可以在macOS上尝试使用SFML- 请参阅此处。

  • 或者使用CImg(需要 XQuartz( - 请参阅同一问题的其他答案。

  • 或者你可以在Mac上的VirtualBox Linux中搞砸libsvga- 看这里。

  • 或者,如果您有 30 美元的闲置资金,您可以写入 RaspberryPi 上的帧缓冲。

  • 或者你可以使用Raspberry Pi帧缓冲器进行更低的级别 - 看这里。

我不确定这是否可能。它当然不受官方支持。有一些旧的、早已弃用的 API 用于访问显示(不是窗口(的帧缓冲。我不知道它们是否仍然有效。您将使用 Quartz 显示服务 API 首先捕获显示器,然后获取帧缓冲地址。例如,CGDisplayAddressForPosition().

如果您访问真正的帧缓冲与访问屏幕外光栅缓冲区并使用最少的高级 API 调用将其块传输到屏幕,这对您的目的真的重要吗?

您可以尝试的是使用IOSurface作为CALayercontents。它受支持,但未明确记录。显然,有很多高级的东西要让IOSurface内容显示在图层中,但你不一定需要处理它,因此。

为了更好地衡量,我将提到 AppKit 中的NSDrawBitmap()功能。它可能是最低级风格的界面。这并不是说它是堆栈的最低级别。例如,很可能在内部,它只是从位图数据构造一个CGImage,然后绘制它。

最新更新