thrix
Založen: 29. 07. 2007 Příspěvky: 6
|
Zaslal: 9. září 2007, 22:48:04 Předmět: Nevykresluje se posledni kontrol |
|
|
Projekt:
C++, WinApi, OpenGL
Kresleni do kontrolu (pres HDC)
Uz si vubec nevim rady s tim, ze se mne prekresluje jen posledni (v čase) kontrol (doted sem to nemel rozdelene do 4, kreslilo se jen do 1), bude to souviset zrejme s mazanim (glClear) nebo prepinanim bufferu (SwapBuffer). Prestoze jsem zkusil snad vsechno (glClear jen u prvniho, SwapBuffer jen u posledniho, apod.), ale porad nic.
kód: |
Manager::Draw() {
window0.BeginDraw();
DrawItems();
window0.EndDraw();
...
window3.BeginDraw();
DrawItems();
window3.EndDraw();
}
Window::BeginDraw() {
glViewport(0, 0, this->w, this->h);
glClear(Color|Depth);
Projection
ModelView
Camera
}
Window::EndDraw() {
glFlush();
SwapBuffers(this->hDC);
}
Manager::Init(hWindow0, ..., hWindow3, w, h) {
this->window0.Init(hWindow0, w, h);
...
this->window3.Init(hWindow3, w, h);
}
Window::Init(HWND hWindow, w, h) {
this->hDC = GetDC(this->hWindow);
SetPixelFormat
this->hRC = wglCreateContext(this->hDC);
wglMakeCurrent(this->hDC, this->hRC);
}
|
Pokud zakomentuju inicializaci posledni polozky (tj. this->window3.Init(...), tzn. ze se akorat neveme HDC, HRC), tak se vykresluje jen do predposledniho kontrolu.
Jakoby posledni GetDC (nebo neco jineho z toho initu) zrusilo vsechny predchozi, nebo jinak nevim. V debugu ale v initu jsou vsechny clenske hDC a hRC ruzne, dokonce Draw probehne u vsech windowu.
Dik za cokoli. |
|
thrix
Založen: 29. 07. 2007 Příspěvky: 6
|
Zaslal: 10. září 2007, 07:48:55 Předmět: |
|
|
VYRESENO
Je potreba nastavit kontext, reseni z http://www.codeproject.com/opengl/GLView.asp.
kód: |
void Window::BeginDraw()
{
this->hOldDC = wglGetCurrentDC();
this->hOldRC = wglGetCurrentContext();
wglMakeCurrent(this->hDC, this->hRC);
glViewport(0, 0, this->width, this->height);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
...
}
void Window::EndDraw()
{
...
SwapBuffers(this->hDC);
wglMakeCurrent(this->hOldDC, this->hOldRC);
}
|
|
|