.[ ČeskéHry.cz ].
Nevykresluje se posledni kontrol

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
thrix



Založen: 29. 07. 2007
Příspěvky: 6

PříspěvekZaslal: 9. září 2007, 22:48:04    Předmět: Nevykresluje se posledni kontrol Odpovědět s citátem

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
thrix



Založen: 29. 07. 2007
Příspěvky: 6

PříspěvekZaslal: 10. září 2007, 07:48:55    Předmět: Odpovědět s citátem

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);
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna