它需要在Mac和Windows上运行,但由于我是一个沉重的Mac用户,我决定首先构建Mac版本.我们没有这个插件的源代码 – 这是外部供应商提供给我们的东西 – 所以它是一个黑盒实现.
在网络上,该插件的工作方式与flash非常相似.您在链接到某个mimetype(即应用程序/ flash)的网页中嵌入了一个区域,并加载了插件,而插件又会指示插件加载某个文件(想想SWF)然后渲染它.
我现在正在做的是:
1. Open the library (Bundle) and extract NP_Initialize etc.2. Call NP_Initialize -> returns the object with NPP function pointers etc3. Call NPP_New (this calls a set of NPP functions) -> ultimately returns NPERR_NO_ERROR.
由于NPERR_NO_ERROR是预期的响应,我假设这三个步骤已成功完成.
在NPP_New期间,插件请求Cocoa事件模型和Core Animation(或者Core Graphics,如果我为Core Animation返回false)渲染模式.
然后我打电话给:
4. NPP_Setwindow5. Once the window is set,I load an online file with CURL,and call NPP_NewStream/WriteReady/Write and DestroyStream.
根据我在NPapi文档中可以找到的内容,NewStream / WriteStream / etc函数基本上将文件加载到插件的内存中,因此可以呈现它.
该插件在浏览器中支持Core Animation和Core Graphics,并且在支持NPAPI插件的浏览器中工作正常.
完成上述所有 *** 作后,我尝试渲染到纹理,但在Core Graphics模式下,我继续使用CGContextRef从NPP_Event函数调用中获得错误响应.在Core Animation模式下运行时,我使用renderInContext将纹理渲染到位图,但整个图像保持空白/透明.
这是一个很长的镜头,但有没有人有任何想法?
解决方法 我假设你不使用这个UI线程,如果你在不同的线程中尝试你的代码,如果是这样的话.但是,它可能与许多事情有关,从图像本身开始(因为它是空的/透明的),这就是我使用的:UIGraphicsBeginImageContextWithOptions(vIEw.bounds.size,vIEw.opaque,[[UIScreen mainScreen] scale]);[vIEw.layer renderInContext:UIGraphicsGetCurrentContext()];UIImage *image = UIGraphicsGetimageFromCurrentimageContext();UIGraphicsEndImageContext(); //after this you should see the image
以下评论与Mozilla CoreAnimationDrawingModel plugin有关
(你的黑盒插件可能基于它吗?)
确保使用Flash 10.1,因为在该版本之前不支持Core Animation绘图模型(您加载了SWF).
注意!如果您的黑盒插件使用QTMovIELayer渲染它应该失败,因为它不支持renderInContext.
关于您的主题的其他有趣读物(自2010年起):Core Animation
总结以上是内存溢出为你收集整理的cocoa – 在Mac应用程序中加载NPAPI插件时遇到问题全部内容,希望文章能够帮你解决cocoa – 在Mac应用程序中加载NPAPI插件时遇到问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)