Я разрабатываю плагин с использованием FireBreath для Windows (на данный момент), который, среди прочего, отображает канал веб-камеры с использованием OpenGL. Я использую оконный плагин и рисую из отдельного потока. Код можно посмотреть здесь:
Заголовочный файл
Исходный файл
(Не обращайте внимания на странный код в onWindowResized, это просто проверка, которая осталась в коммите.)
Проблема в том, что как только размер окна браузера изменяется так, что видимая область плагина изменяется или расширение каким-то образом прокручивается за пределы видимой области поля прокрутки, плагин в Chrome падает. У меня не установлен Firefox, но я предполагаю, что это NpApi, так как он работает в Internet Explorer.
Я считаю, что происходит то, что Chrome выпускает и создает новый HDC всякий раз, когда изменяются видимые размеры плагина. Это, вероятно, приводит к тому, что контекст рендеринга недействителен, но он все еще используется в плагине, и это вызывает сбой.
Я заметил, что когда это происходит, вызывается NPP_SetWindow get, но эти вызовы игнорируются в NpapiPluginModule_NPP.cpp, поэтому я не могу подключиться к этому событию.
У меня есть Google уже несколько часов, но я не нашел никакой помощи. У кого-нибудь есть опыт в этом?
У меня есть идея, что это могло бы сработать, если бы я создал свое собственное дочернее окно для окна плагина, где я мог бы обрабатывать свой собственный контроллер домена. Я провел несколько быстрых тестов, которые не увенчались успехом, вероятно, из-за моих хромых навыков работы с Win32. Но может ли это работать с некоторой дополнительной работой? У меня есть еще одна идея - как-то отслеживать видимую область, но я еще не изучал ее.
SetWindow
проходит черезFB::NpapiPluginWin
. - person Georg Fritzsche   schedule 20.02.2012