Я разрабатываю плагин с использованием FireBreath в Windows (на данный момент), который помимо прочего показывает отображение веб-камеры с использованием OpenGL. Я использую оконный плагин, и я рисую из отдельного потока. Код можно посмотреть здесь:Плагин OpenGL сбой Chrome при изменении видимой области
Заголовочный файл
Исходный файл
(Игнорировать странный код в onWindowResized, это лишь некоторые испытания, которые остались в коммит .)
Проблема в том, что как только окно браузера будет r e-size так, чтобы видимая область плагина была изменена или расширение как-то прокручивалось за пределами видимой области окна прокрутки, плагин сбой в Chrome. У меня нет установленного Firefox, но я предполагаю, что это приложение NpApi, так как оно работает в Internet Explorer.
Я считаю, что происходит то, что Chrome выпускает и создает новый HDC всякий раз, когда изменяются видимые размеры плагина. Вероятно, это приводит к тому, что контекст визуализации недействителен, но он все еще используется в плагине и вызывает сбои.
Я заметил, что NPP_SetWindow get вызывается, когда это происходит, но эти вызовы игнорируются в NpapiPluginModule_NPP.cpp, так что я не могу подключиться к этому событию.
У меня есть Google уже несколько часов, но не нашел никакой помощи. У кого-нибудь есть опыт?
У меня есть идея, что он может работать, если я создаю свое собственное дочернее окно в окне плагина, где я мог бы обрабатывать собственный DC. Я сделал несколько быстрых тестов, которые не удались, что, вероятно, связано с моими слабыми навыками Win32. Но может ли это работать с еще большей работой? Еще одна идея, которую я имею, - это как-то отслеживать видимый регион, но я пока не обратил на это внимания.
Был бы быстрый взгляд на это, но нет времени копать глубже. Достаточно просто настроить OGL без рисования, что происходит в FF и Chrome, а не в FF, когда отключены внепроцессные плагины. Отключение подкласса окна FBs не помогает. Прикрепите Visual Studio с настроенным сервером символов Microsoft (возможно, [Mozillas] (https: //developer.mozilla.org/en/Using_the_Mozilla_symbol_server), и вы увидите, что он сбрасывается с переполнением стека в обработке обработки окон (видимо, бесконечная рекурсия). BTW, 'SetWindow' проходит через' FB :: NpapiPluginWin' здесь. –