Bonjour,

Je suis en train de faire de l'affichage 3D de pièces.
Après avoir affiché cette dite-piece de façon brute.
Ensuite, l'ai réussi à l'afficher via l'optimisation VBO

Le probleme est que quand je perds le focus de la fenetre sans forcement la mettre derriere une autre fenetre, le driver de la carte graphique ne réponds plus pendant quelques secondes avant de revenir.

Pourriez vous m'aider ?
Merci.
Flow

Mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
void LoadVBO()
        {
            Gl.glGenBuffersARB(1, out VBOObject.VBOid);
            Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER, VBOObject.count);
 
            Gl.glBufferDataARB(Gl.GL_ARRAY_BUFFER_ARB, (IntPtr)(VBOObject.count * 3 * sizeof(float)), VBOObject.xyz, Gl.GL_STATIC_DRAW_ARB);
        }
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
            Gl.glEnableClientState(Gl.GL_VERTEX_ARRAY);
 
            LoadVBO();
 
            Gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);						// Black Background
            Gl.glClearDepth(1.0f);										// Depth Buffer Setup
            Gl.glDepthFunc(Gl.GL_LEQUAL);									// The Type Of Depth Testing (Less Or Equal)
            Gl.glEnable(Gl.GL_DEPTH_TEST);									// Enable Depth Testing
            Gl.glShadeModel(Gl.GL_SMOOTH);									// Select Smooth Shading
            Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT, Gl.GL_NICEST);			// Set Perspective Calculations To Most Accurate
            Gl.glEnable(Gl.GL_TEXTURE_2D);									// Enable Textures
            Gl.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);						// Set The Color To White
 
 
            Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, VBOObject.count);
            Gl.glVertexPointer(3, Gl.GL_FLOAT, 0, null);
 
 
            while (!toquit)
            {
                DrawGLScene();// Loop That Runs While done = false
                Application.DoEvents();                                         // Process Events
                bool res = Gdi.SwapBuffers(hDC);
            }
 
            Gl.glDisableClientState(Gl.GL_VERTEX_ARRAY);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
       private void DrawGLScene()
        {
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
            Gl.glLoadIdentity();
 
            Glu.gluLookAt(212, 60, 194, 186, 55, 171, 0, 1, 0);	
 
            Gl.glRotatef(xv, 1f, 0f, 0f);
            Gl.glRotatef(yv, 0f, 1f, 0f);
            Gl.glRotatef(zv, 0f, 0f, 1f);
 
            Gl.glDrawArrays(Gl.GL_LINES, 0, VBOObject.count);
        }