我正在开发一个在 Windows 上使用 FireBreath 的插件(目前),其中包括使用 OpenGL 显示网络摄像头提要。我正在使用一个窗口插件,我正在从一个单独的线程中绘图。代码可以在这里查看:
头文件
源文件
(忽略 onWindowResized 中的奇怪代码,这只是提交中保留的一些测试。)
问题是,只要调整浏览器窗口的大小以更改插件的可见区域或扩展以某种方式滚动到滚动框的可见区域之外,插件就会在 Chrome 中崩溃。我没有安装 Firefox,但我猜这是 NpApi 的东西,因为它在 Internet Explorer 中工作。
我相信发生的事情是,只要插件的可见尺寸发生变化,Chrome 就会发布并创建一个新的 HDC。这可能导致渲染上下文无效,但它仍在插件中使用并导致崩溃。
我注意到发生这种情况时会调用 NPP_SetWindow,但是在 NpapiPluginModule_NPP.cpp 中会忽略这些调用,因此我无法连接到此事件。
我已经谷歌了几个小时,但没有找到任何帮助。有没有人有这方面的经验?
我有一个想法,如果我创建我自己的子窗口到我可以处理我自己的 DC 的插件窗口,它可以工作。我做了一些失败的快速测试,这可能是因为我蹩脚的 Win32 技能。但这可以与更多的工作一起工作吗?我的另一个想法是以某种方式跟踪可见区域,但我还没有研究过。