我如何使用 SDL2 在 Mac OS X 上使用 Core Animation-Cocoa 在 FireBreath 中进行渲染

How can I use SDL2 for rendering in FireBreath on Mac OS X using Core Animation-Cocoa

我正在尝试使用 Core Animation/Cocoa 在 OS X (10.8.5) 运行 Safari (6.2) 上的浏览​​器插件中使用以下组合:

FireBreath + SDL2

我研究了 FB 提供的 BasicMediaPlayer 示例,了解到我可以通过 FB::PluginWindowMac::getDrawingPrimitive() 访问 CALayer。

我想完成的是使用SDL/SDL2来执行渲染。

在Windows上比较容易,因为FB插件window(FB::PluginWindowWin)提供了一个HWND,可以传递给SDL_CreateWindowFrom API (后跟 SDL_CreateRenderer 和 SDL_CreateTexture 来执行渲染)。 void* 将对应于 Mac 上的 NSWindow*(据我了解),我知道我无法在我的插件中访问它(根据我阅读的其他帖子)。

所以问题是:如何在 OS X 上将 SDL 与现有 CALayer 一起使用?

我做了很多研究,还浏览了 SDL/SDL2 论坛:

很遗憾,我似乎无法在我的问题中概述的环境中使用 SDL。

我最终得到的解决方案:我基本上决定镜像 firebreath 提供的名为 BasicMediaPlayer 的示例:

  1. 您基本上必须专门化 CAOpenGLLayer,将 OpenGL 绘图放在 drawInCGLContext 方法中。
  2. 收听 FB::AttachedEvent:您将收到的插件 window 对象可以转换为 FB::PluginWindowMac*,它允许您通过 [=14= 附加您的专用 CA 层].

对于不熟悉 OpenGL 以及如何渲染帧的任何人:请查看 Whosebug 上的以下 question,这应该可以帮助您入门。