View Full Version : [c] CreateDC e PixelFormat
DanieleC88
29-07-2003, 21:01
Usando l'HDC restituito da CreateDC("DISPLAY", NULL, NULL, NULL); sto cercando di impostare un pixel format: ho provato di tutto ma il pixel format resituito da ChoosePixelFormat e' sempre 0. Forse non posso cambiare pixel formato usando display.drv ?
Sinceramente non lo so...comunque ho sempre visto usare ChoosePixelFormat dopo GetDC sulla finestra dell'applicazione...
Non è che magari hai sbagliato l'inizializzazione della struttra dati ?
Quello che segue è un esempio di inizializzazione funzionante...
PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR), // size of this pfd
1, // version number
PFD_DRAW_TO_WINDOW | // support window
PFD_SUPPORT_OPENGL | // support OpenGL
PFD_DOUBLEBUFFER, // double buffered
PFD_TYPE_RGBA, // RGBA type
24, // 24-bit color depth
0, 0, 0, 0, 0, 0, // color bits ignored
0, // no alpha buffer
0, // shift bit ignored
0, // no accumulation buffer
0, 0, 0, 0, // accum bits ignored
32, // 32-bit z-buffer
0, // no stencil buffer
0, // no auxiliary buffer
PFD_MAIN_PLANE, // main layer
0, // reserved
0, 0, 0 // layer masks ignored
};
HDC hdc;
int iPixelFormat;
iPixelFormat = ChoosePixelFormat(hdc, &pfd);
DanieleC88
31-07-2003, 20:34
diavolo, il PixelFormat mi perseguita... avevo problemi in Delphi, ora anche in C... la stessa tua inizializzazione l'ho presa dalla guida compresa col Delphi dell'SDK Win32... purtroppo sul mio PC di sviluppo (che e' un po'anzianotto, e' del 1995) non riesco proprio a trovare il PixelFormat giusto... ho ridotto cColorBits a 16, cDepthBits a 24 e cosi' via, ma il risultato e' sempre lo stesso:
((iPixelFormat = ChoosePixelFormat(hdc, &pfd)) == 0) mi restituisce VERO.
non ce la faro' mai. e pensare che l'unica cosa che mi serve e' il double buffering: sto realizzando una DLL per GDI, che mi sembra anche abbastanza buona :), ma senza double buffering sarebbe inutile.
Prova con 24-bit color depth e 16-bit z-buffer...
Prova a fare questa cosa e guarda come è settato:
PIXELFORMATDESCRIPTOR pfd;
HDC hdc;
int iPixelFormat;
// get the current pixel format index
iPixelFormat = GetPixelFormat(hdc);
// obtain a detailed description of that pixel format
DescribePixelFormat(hdc, iPixelFormat,
sizeof(PIXELFORMATDESCRIPTOR), &pfd);
Dopo ci modifichi soltanto il double buffering e sei a cavallo...
Comunque ripeto... Io non l'ho mai visto usare sul DC "DISPLAY"...ma sempre sul DC dell'applicazione....
DanieleC88
03-08-2003, 20:29
L'ho gia' fatto, ma ora non mi ricordo cosa mi restituisce... mi sembra un PFD vuoto (tutti 0) o numeri sballati... inutilizzabile comunque... ho provato la procedura standard anche sul mio computer nuovo, che ha una GeForce2, e non avrei dovuto avere problemi, invece... :cry:
Comunque un giorno o l'altro vi postero' il codice, cosi' (PixelFormat) a parte, mi dite se sono diventato un programmatore o sono ancora un novellino...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.