我正在尝试使用Core Animation/Cocoa在运行Safari(6.2)的OS X(10.8.5)上的浏览器插件中使以下组合工作:
FireBreath + SDL2
我研究了FB提供的BasicMediaPlayer示例,并了解我可以通过FB::P luginWindowMac::getDrawingPrimitive()访问CALayer。
我想完成的是使用 SDL/SDL2 来执行渲染。
在Windows上,这相对容易,因为FB插件窗口(FB::P luginWindowWin)提供了一个HWND,可以传递给SDL_CreateWindowFrom API(后跟SDL_CreateRenderer和SDL_CreateTexture来执行渲染)。void* 对应于 Mac 上的 NSWindow*(从我所学到的),我知道我在我的插件中无法访问它(基于我阅读过的其他帖子)。
所以问题是:如何在 OS X 上将 SDL 与现有的 CALayer 一起使用?
我做了相当多的研究,还浏览了 SDL/SDL2 论坛:
很遗憾,在我的问题中概述的环境中无法使用 SDL。
我最终得到的解决方案是:我基本上决定镜像firebreath提供的示例,称为BasicMediaPlayer:
- 你基本上必须专门化
CAOpenGLLayer
,将OpenGL绘图放置在drawInCGLContext
方法中。
听 - 听
FB::AttachedEvent
:你将收到的插件窗口对象可以转换为FB::PluginWindowMac*
,这允许您通过getDrawingPrimitive
附加专门的CA层。
对于不熟悉OpenGL以及如何渲染帧的人:看看以下关于stackoverflow的问题,这应该可以让你入门。