私はブラウザウィンドウ内でスライドショーとして画像を描画するブラウザプラグインを構築していますが、作成したプラグインは最初のプラグインインスタンスでしか描画しません。プラグインの複数のインスタンスを開くと、最初のプラグインウィンドウで各ピクチャと重複して描画されます。FireBreathプラグインがすべてのプラグインインスタンスで描画されない
私はURLから画像を描画するためにOpenGLを使用しています。続い
は、スレッドを使用して、ループ内でダミーのOpenGL tringlesを描画するコードである:
FB :: PluginWindowWin * pluginWindowWin = dynamic_castを(pluginWindow)。
EnableOpenGL(pluginWindowWin->getHWND(), &hDC, &hRC);
SetFocus(pluginWindowWin->getHWND());
//FB::
static int fps = 1;
GLfloat rotate = 0;
static double start = 0, diff, wait;
wait = 1/fps;
//return 0;
while (true)
{
//lets check for keyboard input
try
{
FB::Rect pos = pluginWindow->getWindowPosition();
PAINTSTRUCT ps;
if (pluginWindowWin){
hDC = BeginPaint(pluginWindowWin->getHWND(), &ps);
pos.right -= pos.left;
pos.left = 0;
pos.bottom -= pos.top;
pos.top = 0;
rotate += 0.1f;
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(rotate, 0.0f, 1.0f, 0.0f);
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(0.0f, 1.0f);
glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(0.87f, -0.5f);
glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(-0.87f, -0.5f);
glEnd();
glBegin(GL_QUADS); // Draw A Quad
glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(-0.5f, 0.5f, 0.0f); // Top Left
glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(0.5f, 0.5f, 0.0f); // Top Right
glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(0.5f, -0.5f, 0.0f); // Bottom Right
glColor3f(0.0f, 0.0f, 0.0f); glVertex3f(-0.5f, -0.5f, 0.0f); // Bottom Left
glEnd(); // Done Drawing The Quad
glPopMatrix();
glRotatef(rotate, 0.0f, 1.0f, 0.0f);
SwapBuffers(hDC);
}
//rtri+=0.1f;
::SetTextAlign(hDC, TA_CENTER | TA_BASELINE);
LPCTSTR pszText = _T("FireBreath Plugin!\n:-)");
::TextOut(hDC, pos.left + (pos.right - pos.left)/2, pos.top + (pos.bottom - pos.top)/2, pszText, lstrlen(pszText));
if (pluginWindowWin) {
// Release the device context
EndPaint(pluginWindowWin->getHWND(), &ps);
}
}
catch (...)
{
return 0;
}
Sleep(10);
}//end of while run
ここで間違っていることは何ですか?
このブラウザではどのような現象が発生していますか?ウィンドウモードまたはウィンドウレスモードですか? (私は窓が付いていると思いますが、そうでない場合は大きな問題です)。プラグインのインスタンスごとにスレッドの新しいインスタンスを開始していますか?各スレッドは独自のプラグインhwndのインスタンスを含む独自のデータを持っていますか? SetFocusの呼び出しが何かをしても最初から一度だけ呼び出され、各ウィンドウでは一度も呼び出されないことに気づいていますか? – taxilian
これはFirefoxとIEの両方で発生し、私はウィンドウモードのみを使用しています。また、各プラグインインスタンスには独自のスレッドとデータがあります。 SetFocusについて私は、元の実装で直面していた問題を複製するためにOpenGLサンプルプラグインからそのコードを使用しましたが、SetFocusを削除すると出力に何の違いもありませんでした。 –
hDCとhRCの定義を追加できますか?私はそれらが共有されていないと思いますか? – taxilian