TextureMind
Senior Member
Messaggi: 321
Registrato: Apr 2012
Offline
|
|
La normale procedura per la creazione di un context opengl prevede l'uso di hdc associato ad una finestra, nel seguente modo:
hdc = GetDC(hwnd);
PixelFormat = ChoosePixelFormat(hdc, &pfd);
SetPixelFormat(hdc, PixelFormat, &pfd);
hrc = wglCreateContext(hdc);
wglMakeCurrent(hdc, hrc);
Fin qui tutto bene. La domanda che mi sorge spontanea è la seguente: ma è possibile avere più di un hdc associato alla stessa finestra? Per esempio:
hdc1 = GetDC(hwnd);
hdc2 = GetDC(hwnd);
Lo chiedo perchè ho notato che con directx il rendering context viene creato usando hwnd, per cui una finestra può avere solo un contesto. Vale lo stesso per opengl, oppure è possibile avere più di un hdc per finestra, e quindi più di un rendering context?
|
|
| 11-07-2012 18:05 |
|
_tommo_
Mod nerdcore
Messaggi: 5,877
Registrato: Nov 2008
Offline
|
#2
RE: [OpenGL] Hdc e Hwnd
hdc è un handle, ovvero un identificatore numerico (un int, actually).
Quindi GetDC non è che crea diversi HDC, semplicemente ti passa lo stesso numero due volte.
Tommaso Checchi
< devlog | twitter | Dojo, a C++ game framework >
|
|
| 11-07-2012 18:41 |
|
TextureMind
Senior Member
Messaggi: 321
Registrato: Apr 2012
Offline
|
#3
RE: [OpenGL] Hdc e Hwnd
Il fatto che sia un handle è chiaro, ma visto che si deve chiamare una ReleaseDC dopo una GetDC, suppongo che riservi una risorsa per poi restituire in uscita il suo handle, il fatto che sia un numero non implica per forza che la risorsa venga riservata una sola volta e la guida non era molto chiara al riguardo. Anche dalla mia esperienza due GetDC consecutive restituiscono lo stesso handle, ma una cosa che mi ha depistato parecchio è il commento di un utente sulla pagina di MSDN:
"The GetDC function retrieves ALWAYS a DIFFERENT handle to a device context (DC) ... "
Comunque, diamo per buono che due GetDC consecutive resituiscano lo stesso handle, potrei concludere che per una finestra avrei sempre un solo device context, però che succederebbe se usassi una GetDCEx con diverse clipping regions? Per esempio:
hdc1 = GetDCEx(hwnd, clip1, flags1);
hdc2 = GetDCEx(hwnd, clip2, flags2);
Ci sarebbe la possibilità di avere due handle diversi per finestra? Ed in questo caso, come si comporterebbero le opengl? Potrei dividere davvero una finestra in due regioni speculari e disegnarvi dentro? Chiedo queste cose apparentemente scontate perchè la documentazione non parla chiaro e gli esempi scarseggiano. In sintesi:
- voglio capire se è previsto (anche in linea teorica) che una finestra abbia più di un device context e se è possibile creare con essi più di un rendering context di opengl visualizzati sulla stessa finestra.
Grazie.
|
|
| 12-07-2012 9:20 |
|
Gabriele
Posting Freak
Messaggi: 4,364
Registrato: Oct 2010
Offline
|
|
| 12-07-2012 12:19 |
|