Bonjour, je lance une application faisant un rendu 3D avec OpenGL sous Vista pour laquelle j'ai activé le full scene antialiasing. Problème, durant l'exécution de l'appli, celle-ci désactive Aero ce que je ne veux pas.
Ci-dessous le code pour "configurer" le PFD de la scène 3D ainsi que le code de création de la fenêtre.
PFD :
Fenêtre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 [...] DWORD flag = 0; if (iResults[0] == GL_TRUE) flag |= PFD_DRAW_TO_WINDOW; if (iResults[1] == GL_TRUE) flag |= PFD_DRAW_TO_BITMAP; if (iResults[2] == WGL_FULL_ACCELERATION_ARB) flag |= PFD_GENERIC_ACCELERATED; if (iResults[2] == WGL_NO_ACCELERATION_ARB) flag |= PFD_GENERIC_FORMAT; if (iResults[3] == GL_TRUE) flag |= PFD_NEED_PALETTE; if (iResults[4] == GL_TRUE) flag |= PFD_NEED_SYSTEM_PALETTE; if (iResults[5] == GL_TRUE) flag |= PFD_SWAP_LAYER_BUFFERS; if (iResults[6] == WGL_SWAP_EXCHANGE_ARB) flag |= PFD_SWAP_EXCHANGE; if (iResults[6] == WGL_SWAP_COPY_ARB) flag |= PFD_SWAP_COPY; if (iResults[18] == GL_TRUE) flag |= PFD_SUPPORT_GDI; if (iResults[19] == GL_TRUE) flag |= PFD_SUPPORT_OPENGL; if (iResults[20] == GL_TRUE) flag |= PFD_DOUBLEBUFFER; if (iResults[21] == GL_TRUE) flag |= PFD_STEREO; if ( underVista ) { flag &= ~(PFD_SUPPORT_GDI); flag |= PFD_SUPPORT_COMPOSITION; // Composition with Aero. } m_pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); m_pfd.nVersion = 1; m_pfd.bReserved = 0; m_pfd.dwLayerMask = 0; m_pfd.dwVisibleMask = 0; m_pfd.dwDamageMask = 0; m_pfd.iLayerType = PFD_MAIN_PLANE; m_pfd.dwFlags = flag; [...]
Je me suis appuyé sur cet article :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 [...] hwnd = CreateWindow( actualClassName, className, WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0, // X position 0, // Y position m_guiGLWidget->getGlxSize()[0], // Width m_guiGLWidget->getGlxSize()[1], // Height mgrWidget, // Parent NULL, // Menu SoWin::getInstance(), NULL ); [...]
http://www.opengl.org/pipeline/article/vol003_7/
Si je n'active pas l'antialiasing, ça marche nickel, quelqu'un a une idée?
Partager