【问题标题】:Writing a plugin using NPAPI + D3D. It works on Firefox, but the browser blacks out. Why?使用 NPAPI + D3D 编写插件。它可以在 Firefox 上运行,但浏览器会黑屏。为什么?
【发布时间】:2011-07-03 09:10:36
【问题描述】:

我正在编写一个插件,使用 NPAPI 和 D3D。我只是简单地将来自 DXSDK 和 NPAPI 的 D3D 示例放在一起。插件启动时我收到一个 HWND,然后我将它传递给 D3D 进行绘制。

虽然有效。测试页上的控件(400 * 300 矩形)确实显示了我的预期。

但 FireFox 窗口中的所有其他区域都是黑色的,包括菜单栏。测试页上的所有其他内容都看不到。

我只用 HWND 尝试了 InitDevice(D3D) 并且根本不进行渲染。但还是遇到了同样的问题。

谁能帮帮我吗?

【问题讨论】:

    标签: direct3d npapi browser-plugin


    【解决方案1】:

    我以前见过这种情况发生几次;我遇到了两种不同的情况。第一个是我的 D3D 初始化有一些奇怪的地方,这显然与 firefox 冲突——但我仍然不确定我做了什么改变才能让它工作。

    我希望您遇到的第二个问题是,当我初始化 D3D 并尝试在主线程上绘图时。我的理论(未经证实)是 Firefox 实际上是在创建自己的某种 DX 上下文,因此在同一线程冲突上创建另一个上下文。当我们将初始化和绘图代码移到另一个线程时,一切都开始工作了。

    这是FireBreath 有这么多代码来帮助实现线程安全并允许跨线程调用回 javascript 的原因之一——每次我尝试使用 OGL 或 DX 在主线程上绘图时,我在某个地方遇到了问题。

    希望有帮助!

    【讨论】:

    • 非常感谢,我会试试看一下 FireBreath。
    • 今天正在查看提交消息,并找到了我们修复第一个问题时的日志——这也是一个线程问题,尽管显然我们在多个线程上进行调用。
    猜你喜欢
    • 2023-03-26
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 2015-08-28
    相关资源
    最近更新 更多