|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : octobre 2003 Messages : 29 ![]() |
Bonjour,
Je développe une appli très simple utilisant OpenGL avec BCB6. J'affiche une objet issue d'un WaveFront puis réalise des tranches avec glOrtho que je récupère sous forme d'image ensuite pour le besoin d'une application particulière. Ces calculs sont "rapides" sur le PC de développement (avec une CG de base à chipset Intel !) mais très lente dès que je passe sur d'autres PC normalement plus puissant. La différence qd je regarde avec OpenGL Extension Viewer est que mon pc de base est en OpenGL 1.1, les autres en OpenGL 2.x avec des cartes graphiques plus puissantes. Comment optimiser ces calculs ? |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Alexandre LaurentÉtudiant Inscription : mai 2008 Messages : 6 560 ![]() |
Bonjour,
Rapidité différente, oui parce que les cartes graphiques ne sont pas les mêmes. Après, les différences peuvent sembler incohérentes, mais cela dépend de l'architecture des GPU et de vos programmes. En effet, il semble que vous utilisez du OpenGL 1.x (appel à glBegin() / glEnd()), qui maintenant, sont devenu obsolète. De plus, si vous tentez des opérations précises (lectures des buffers, accès textures ou je ne sais quoi), sur certaines cartes, de part leur conception, ces appels peuvent être rapides, mais sur d'autres, non. Finalement, ce que vous pouvez essayer de faire, pour amélioré la situation, c'est d'utiliser des techniques un peu plus évoluer (je suis parti du principe que vous étiez avec des glBegin() / glEnd()), du genre Vertex Buffer Object, les shaders et si besoin, des FrameBufferObject.
__________________
Vous souhaitez participer à la section Jeux ? Contactez-moi ![]() La rubrique a aussi un blog ! Ma page sur DVP Mon Portfolio Qui connaît l'erreur, connaît la solution. |
|
|
01
|
|
|
#3 | ||||
|
Invité de passage
![]() Inscription : octobre 2003 Messages : 29 ![]() |
En fait mon code est le suivant :
Code :
Avec DrawScene qui est la suivante : Code :
Ensuite, je fais un glReadPixels pour récupérer ces données dans une image OpenCV pour lui faire subir des traitements spécifiques. Comment puis-je rendre ceci plus rapide sur d'autres machines ? |
||||
|
|
00
|
|
|
#4 | ||
|
Membre éprouvé
![]() Inscription : février 2008 Messages : 407 ![]() |
Bonjour,
quelques questions / idées pour optimiser votre code: 1) la partie suivante, vous l'appelez à chaque dessin? Code :
2) Dans votre Draw(), vous commencez par un: => c'est ici redondant car c'est déjà appelé dans votre fonction de cadrage. Là vous rechargez la matrice modelview à chaque dessin, alors que ce mode est déjà activé. C'est plus que redondant, ca fait perdre du temps de calcul... (openGL ne verifie pas quels états sont déjà activés quand un changement d'état est demandé et l'effectue "bêtement") 3) De même dans votre dessin, vous avez la ligne suivante: => à moins que vous ayez besoin de le désactiver ailleurs, cet état devrait être activé une fois pour toute lors de l'initialisation et rester à ON tout le long Voilà, ca ne résoudra probablement pas tous vos problèmes mais vous pouvez déjà commencer par ces optimisations et voir si vous observez toujours d'aussi grandes différences entre les systèmes de test. Bonne chance! |
||
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() nicolas Développeur de jeux vidéo Inscription : août 2007 Messages : 2 168 ![]() |
ca doit représenter peanuts ca, par rapport a la méthode ReadPixels.
Questions: * c'est quoi, une différence de vitesse? c'est quoi la vitesse sur intel et sur nvidia (en millisecondes de préférence? * est-ce que tu vérifies tes appels a OpenGL? en faisant un glGetError() après chaque appel tu pourrais vérifier * est ce que tu as essayé un debugger comme gDEBugger? * est ce que tu as essayé un renderer software (on peut choisir ca dans SetPixelFormat) |
|
|
10
|
|
|
#6 | |
|
Membre éprouvé
![]() Inscription : février 2008 Messages : 407 ![]() |
Citation:
Après oui, il faut mesurer les temps d'exécution des différents appels OpenGL et voir ce qui varie de manière significative d'un système à l'autre. Ah, et sinon des trucs tout bêtes mais sait-on jamais: - Rebooter les 2 systemes avant de tester: il m'est déjà arrivé qu'à force de debugs suivis de crashs ou exits répétés, le ressources de la carte graphique ne soient pas libérées proprement, du coup ca plante ou donne des résultats au mieux bizarres. J'en ai (re) fait l'expérience pas plus tard que la semaine dernière donc au cas où... - Et bien sûr vérifier que les bons drivers sont installés et à jour |
|
|
|
00
|
|
|
#7 | ||
![]() ![]() ![]() Alexandre LaurentÉtudiant Inscription : mai 2008 Messages : 6 560 ![]() |
Sinon, comme là nous n'avons pas vraiment le code de dessin, pouvez vous donner le contenu des fonctions Draw:
Code :
__________________
Vous souhaitez participer à la section Jeux ? Contactez-moi ![]() La rubrique a aussi un blog ! Ma page sur DVP Mon Portfolio Qui connaît l'erreur, connaît la solution. |
||
|
|
01
|
|
|
#8 | |
|
Expert Confirmé
![]() nicolas Développeur de jeux vidéo Inscription : août 2007 Messages : 2 168 ![]() |
Citation:
|
|
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : octobre 2003 Messages : 29 ![]() |
Merci pour toutes ces réponses,
La différence est de 1 pour 4, j'ai sur mon PC de base 32 image/s contre 4 sur l'autre ! Mais je viens de trouver la différence !!! En fait, c'est un accès disque, donc rien à voir avec OpenGL... qui se faisait en local puis en réseau ! Merci de tous vos conseils, cela m'a permis de nettoyer quand même un peu mon code !!! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com