브라우저 창 내에서 슬라이드 쇼로 그림을 그릴 브라우저 플러그인을 만들고 있지만, 작성한 플러그인은 첫 번째 플러그인 인스턴스에만 그립니다. 플러그인의 여러 인스턴스를 열면 각 그림과 겹치는 첫 번째 플러그인 창에 그림이 계속 표시됩니다.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
이것은 파이어 폭스와 IE에서 발생하며 창 모드만을 사용하고 있습니다. 또한 각 플러그인 인스턴스에는 자체 스레드와 데이터가 있습니다. SetFocus에 대하여 나는 OpenGL 예제 플러그인에서 그 코드를 사용하여 원래의 구현과 직면했던 문제를 복제했습니다. SetFocus를 제거해도 출력에는 아무런 차이가 없었습니다. –
hDC와 hRC의 정의를 추가 할 수 있습니까? 나는 그것들이 공유되지 않았다고 가정합니까? – taxilian