bonjour a tous,
Je me suis mis en tete de programmer une console (style Quake, ou CS...) et une fenetre d'affichage en OpenGL (en gros y'a deux fenetre openGL qui tourne mais l'une affiche que tu textes+ texture pour l'affichage , l'autre affiche une scene 3D).
Je n'utilise ni glut, ni tout le reste: c'est du pur API Win32 (mon truc devrait fonctionner à la fois en GL et en DX comme ça).
Bon j'arrive à créer mes 2 fenetres, le problème c'est l'affichage:
- Etape 1 création de la fenetre console (hwndConsole).
- Etape 2 la console lance la création de la 2eme fenetre(hwndVisu)
- Lorsque je fais un peekmessage, je teste pour qui est le message (soit hwndConsole, soit hwndVisu) et je lance 2 rendus différents:
au fait g_HDC est un tableau de 2 de HDC et je l'utilise ainsi:
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 int InitGLAPI::EnterMsgLoop() { MSG msg; ZeroMemory(&msg,sizeof(MSG)); bool ExitGL=false; while(!ExitGL) { if(PeekMessage(&msg,hwndConsole,0,0,PM_REMOVE)) { if(msg.message==WM_QUIT) { ExitGL=true; } else { InitGLAPI::RenderGLConsole(); TranslateMessage(&msg); DispatchMessage(&msg); } } else if(PeekMessage(&msg,hwndVisu,0,0,PM_REMOVE)) { if(msg.message==WM_QUIT) { ExitGL=true; } else { InitGLAPI::RenderGLVisu(); TranslateMessage(&msg); DispatchMessage(&msg); } } else if(PeekMessage(&msg,0,0,0,PM_REMOVE)) { if(msg.message==WM_QUIT) { ExitGL=true; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } } return (int)msg.wParam; } void InitGLAPI::RenderGLConsole() { //Ecran noir glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); CameraConsole->activeCamera(); glBegin(GL_TRIANGLES); glColor3f(1.0,0.0,0.0);glVertex3f(1.0,0.0,0.0); glColor3f(0.0,1.0,0.0);glVertex3f(0.0,1.0,0.0); glColor3f(0.0,0.0,1.0);glVertex3f(0.0,0.0,1.0); glEnd(); glFlush(); SwapBuffers(g_HDC[0]); } void InitGLAPI::RenderGLVisu() { //Ecran noir glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); CameraVisu->activeCamera(); glBegin(GL_TRIANGLES); glColor3f(1.0,0.0,0.0);glVertex3f(0.0,0.0,0.0); glColor3f(0.0,1.0,0.0);glVertex3f(-2.0,0.0,0.0); glColor3f(0.0,0.0,1.0);glVertex3f(0.0,-1.0,0.0); glEnd(); glFlush(); SwapBuffers(g_HDC[1]); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 bool CConsoleGLWindow::OnCreate(HWND hWnd,LPARAM lParam) { static HGLRC hRC; static HDC hDC; hDC=GetDC(hWnd); g_HDC[0]=hDC; SetupPixelFormat(hDC); hRC=wglCreateContext(hDC); wglMakeCurrent(hDC,hRC); return 0; }
Et là....![]()
Dans la deuxieme fenetre j'affiche bien le triangle, dans la premiere (la console) ecran noir (mais par contre il 'y a rafraichissement, ça ne reste pas figé, l'ecran reste noir).
L'objectif apres c'est de lancer la visualisation OpenGL dans un thread et de pouvoir endormir le thread lorsque je passe en mode console.
Je dois mal faire quelque chose mais je ne sais pas quoi, comment vous feriez au niveau initialisation des fenetres OpenGL?
merci...
Partager