Bonjour a tous,
Je programme actuellement sous C++ Builder 2006 une dll pour un soft affichant des cibles en déplacement continu, avec l’opengl de base (pas de glut, sdl etc…). Je suis débutant en openGL.
J’utilise uniquement les fonctions d’affichage 2D (je suis en mode ortho) et mes contraintes sont d’avoir un mouvement fluide (vitesse parfaitement constante) et impeccablement affiché sur des configs moyennes ou grosses avec un ou deux écrans (voire même un vidéo projo) .
Mon programme appelle ma dll qui lance un thread chargé de l’affichage et du déplacement de mes cibles.
J’initialise openGL, avec le double buffering tout ça tout ça, pas de soucis.
Quand les images sont statiques, pas de problèmes, …
Mais quand je demande de bouger ; attention les yeux… je me mange un affichage parfois fluide, parfois saccadé (gèle pendant une fraction de seconde et repart, innaceptable pour mes besoins) et même parfois un effet de déchirement (tearing).
Pourtant, les opérations d’affichages et de calculs ne sont pas énormes dans la boucle principale de mon thread :
Je fais un glClear(GL_COLOR_BUFFER_BIT);
Je fais mes déplacements (genre maClasseTrucAAfficher.x += 1) et une gestion de sortie d’écran en 4 lignes sur toutes mes cibles, rien d’énorme pour nos méga-pentium-tri-core-de-la-mort…![]()
J’affiche mes cibles, généralement moins de 100 à coups de glVertex2f pour des carrés blancs basiques.
Et j’intervertis mes buffers : SwapBuffers(handleDeMonDeviceContext) ;
Et bien évidement, le soft étant prévu pour être distribué, je ne peux pas dire plus aux utilisateurs que ‘mettez a jour vos drivers’, donc inutile de me proposer d’activer/désactiver des fonctions de la carte manuellement comme j’ai vu ailleurs.
L’utilisation de glFlush() ne m’a rien changé et le glFinish() m’a ralenti…
Je n’ai plus de pistes, je suis à l’agonie, bon voila quoi.![]()
Merci de m’avoir lu et pour vos éventuelles réponses.
N’hésitez pas a poser des questions si des informations manquent, ou pour des bouts de code.
Partager