gpt4 book ai didi

cocoa - Safari下的NPAPI自渲染插件(32位与64位)

转载 作者:行者123 更新时间:2023-12-03 18:00:22 26 4
gpt4 key购买 nike

我正在 OSX 之上的 safari 中工作,使用核心图形,并且我有一个运行两个线程(主线程和渲染计时器线程)的插件。渲染计时器线程调用“NPN_InvalidateRect”,而主插件线程处理相应的事件并重绘自身。然而,这在 32 位 Safari 和 64 位 Safari 中的工作方式似乎有所不同:

  • 64 位(cocoa 事件模型):需要 NPN_InvalidateRect + NPN_ForceRedraw = 正确重绘
  • 32 位(如果支持则为 cocoa,否则为carbon):NPN_InvalidateRect = 正确重绘但是,同时执行 NPN_InvalidateRect + NPN_ForceRedraw (如 64 位情况)会导致图像闪烁。

问题:

  1. 是否有更好的方法来强制插件自行渲染,同时坚持 native NPAPI、核心图形以及对carbon&cocoa 事件模型的支持。

  2. 如果没有,我如何在运行时检测浏览器是作为 32 位应用程序运行还是作为 64 位应用程序运行,以便我可以选择调用哪些 NPN 函数。

谢谢

(交叉发布到firebreath,我将在两个地方发布回复)

最佳答案

首先,这个:

The rendering timer thread invokes "NPN_InvalidateRect"

这是一个严重的问题,除非你真的意味着你的渲染计时器线程导致 NPN_InvalidateRect 在主插件线程上被调用。 NPAPI 显然不是线程安全的,您需要在主线程上调用 NPN_InvalidateRect 等方法。

其次,你真的不应该调用 NPN_ForceRedraw。 Chromium、Firefox OOP、WebKit2 和几乎可以肯定 Safari 的 OOP 模式(这就是您在 64 位中获得的模式)将 NPN_ForceRedraw 视为无操作;强制立即重画的概念违背了 OOP 插件的整个模型。在所有情况下,您应该只调用 NPN_InvalidateRect,并相信浏览器会回调您。在 OOP 插件世界中,您不应期望能够强制浏览器在任何给定时刻呈现插件。

关于cocoa - Safari下的NPAPI自渲染插件(32位与64位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7401889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com