IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

[SOURCE][SDL][OPENGL]Singleton pour gérer le fenêtrage


Sujet :

Contribuez

  1. #1
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut [SOURCE][SDL][OPENGL]Singleton pour gérer le fenêtrage
    Bonjour,

    voici une proposition de code source :
    un singleton pour gérer le fenêtrage OpenGL en utilisant la SDL afin de conserver la portabilité du code

    pour ce qui est du langage et des bibliothèques :
    - qui dit singleton dit C++
    - quelques fonctions de la SDL, bien sur pour l'initialiser mais aussi pour tester l'initialisation
    - des fonctions SDL propres à OpenGL
    - un peu de gestion du temps avec la SDL
    - une forme basique d'exception, libre à vous de complexifier la chose pour l'améliorer
    - un peu d'OpenGL pour paramétrer l'affichage (frustum + perspective) et afficher un triangle (tutorial 3 de nehe)

    je n'ai pas voulu faire trop compliqué mais assez pour que ce soit utile et utilisable dans l'état tout en restant facilement modifiable
    le zip contient également un main afin que vous puissiez le tester et voir comment l'utiliser

    j'espère avoir suffisement commenté la chose
    dites moi ce que vous en pensez et s'il y a des bugs à corriger

    [edit] j'ai oublié de préciser, basculer du mode fenêtré au mode plein écran et/ou vice-versa ne fonctionne pas sous windows
    quelqu'un pourrait-il me confirmer que ça fonctionne sous *nux ?
    pour que le plein écran fonctionne sous windows, il faut initialiser le plein écran dès le départ :
    - soit en modifiant dans les paramètres par défaut du programme
    - soit transmettre une résolution plein écran dès le départ
    le changement de résolution plein écran -> plein écran fonctionne bien lui
    Fichiers attachés Fichiers attachés
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Voici mes remarques et voici une version "corrigée" :

    Ajouter Main.h
    Changer main.cpp -> Main.cpp
    Ajouter makefile

    Ajouter #ifdef USING_WINDOWS pour le include <windows.h>, était-il vraiment nécessaire ?

    Migration des include de Main.cpp dans Main.h
    Changer les include "" en <> de Main.cpp

    Migration de include "sdl/sdl.h" de Display.cpp en include <SDL/SDL.h> dans Display.h

    Enlever le define de NULL, stdlib le donne

    Passage de define à const (on est en C++...)

    Changement de l'appel Update dans le constructeur, j'avais ceci comme message :

    Display.cpp: In constructor ‘CDisplay::CDisplay(CDisplay::SParameters*)’:
    Display.cpp:19: error: no matching function for call to ‘CDisplay::Update(CDisplay::SParameters)’
    Display.h:74: note: candidates are: bool CDisplay::Update()
    Display.h:79: note: bool CDisplay::Update(CDisplay::SParameters&)
    -> Utilisation d'une variable temporaire...

    Remarque ce n'est pas encore un singleton car je peux utiliser l'opérateur d'affectation pour en faire une copie locale...


    Voili voilou,
    Jc
    Fichiers attachés Fichiers attachés

  3. #3
    Invité
    Invité(e)
    Par défaut
    Le switch fullscreen / windowed marche bien sous linux,je n'ai pas encore pris le temps de tester sur d'autres systemes...


    Je ne suis pas chez moi, mais je testerai ton code demain, et je repasserai faire un petit commentaire

  4. #4
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Citation Envoyé par fearyourself
    Ajouter Main.h
    Changer main.cpp -> Main.cpp
    Ok pour le Main.cpp
    désolé pour le .h, le main était juste là à titre d'exemple
    j'avoue, ça fait un peu travail baclé

    Ajouter makefile
    je ne sais pas faire de makefile
    si vous avez une solution pour me venir en aide n'hésitez pas

    Ajouter #ifdef USING_WINDOWS pour le include <windows.h>, était-il vraiment nécessaire ?
    comme je codais sous windows et avec visual, in lui fait windows.h pour comprendre les WINAPI déclarés dans gl.h
    c'est plus un #ifdef VISUAL... ou un truc du genre
    sûr que ça fait pas portable; et si je code avec code::block pas besoin

    Changer les include "" en <> de Main.cpp
    ok c'est noté

    Migration des include de Main.cpp dans Main.h
    Migration de include "sdl/sdl.h" de Display.cpp en include <SDL/SDL.h> dans Display.h
    vu qu'on inclus les .h un peu partout et étant donné que Display.h ne fait pas appel à des fonctions de la SDL, est-ce vraiment nécessaire ?
    en fait, j'ai jamais trop aimé mettre tous mes include dans le .h, ça augmente le temps de compilation inutilement
    apparemment tu me conseillerai plutot le contraire

    Enlever le define de NULL, stdlib le donne
    stdlib n'était pas inclus, bien entendu si on met tous les includes dans le .h ça résoud le problème

    Passage de define à const (on est en C++...)
    je doit oublier les define pour tout ce qui est valeur brute ?
    d'un autre côté la valeur se retrouve avec un type bien déclaré

    Changement de l'appel Update dans le constructeur, j'avais ceci comme message :
    [...]
    -> Utilisation d'une variable temporaire...
    j'ai eu du mal à comprendre mais en fait c'est parceque la fonction DefaultParameters retourne une structure que le compilo n'arrive pas à utiliser en référence
    visual ne me faisait pas d'erreur ni de warning donc je n'y avait pas prêté attention

    Remarque ce n'est pas encore un singleton car je peux utiliser l'opérateur d'affectation pour en faire une copie locale...
    autant pour moi
    en regardant la source corrigée, c'est la seule chose que tu sembles ne pas avoir modifié

    Voili voilou,
    Jc
    Merci

    ah oui, une autre chose : tu disais dans un autre post que tester un pointeur comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(m_pInstance)
    	delete m_pInstance;
     
    m_pInstance = NULL;
    était inutile et que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete m_pInstance, m_pInstance = NULL;
    était mieux, en fait delete teste le pointeur ?

    également, le basculement "fenêtré <-> plein écran" buggue sous windows contrairement à linux (merci pour le test bibi.skuk)
    si quelqu'un a une sollution à ce problème ce serait sympa
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  5. #5
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par shenron666
    ah oui, une autre chose : tu disais dans un autre post que tester un pointeur comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(m_pInstance)
    	delete m_pInstance;
     
    m_pInstance = NULL;
    était inutile et que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete m_pInstance, m_pInstance = NULL;
    était mieux, en fait delete teste le pointeur ?
    C'est simplement que delete NULL ne fais rien.
    Et si on regroupe les deux instructions sur une ligne, c'est simplement pour éviter qu'elles soient séparées. Ca montre bien que c'est une opération qui ne doit pas être éclatée.

  6. #6
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par shenron666
    je ne sais pas faire de makefile
    si vous avez une solution pour me venir en aide n'hésitez pas
    Je l'ai mis dans le .zip du dernier post

    vu qu'on inclus les .h un peu partout et étant donné que Display.h ne fait pas appel à des fonctions de la SDL, est-ce vraiment nécessaire ?
    en fait, j'ai jamais trop aimé mettre tous mes include dans le .h, ça augmente le temps de compilation inutilement
    Cela reste à prouver, je n'ai jamais remarqué quelque chose de tel

    apparemment tu me conseillerai plutot le contraire
    En effet, tout include dans le .h, un seul include dans toto.cpp vers toto.h -> c'est ma facon de faire... (mais au moins les <> à la place des "", ce n'est pas pareil)

    stdlib n'était pas inclus, bien entendu si on met tous les includes dans le .h ça résoud le problème
    C'est plus grave que cela, tu supposes que NULL==0 or c'est faux, certains systèmes ont une autre valeur (du moins c'est techniquement possible donc il faut rester portable...)

    je doit oublier les define pour tout ce qui est valeur brute ?
    En C++, c'est la tendance oui...

    j'ai eu du mal à comprendre mais en fait c'est parceque la fonction DefaultParameters retourne une structure que le compilo n'arrive pas à utiliser en référence
    visual ne me faisait pas d'erreur ni de warning donc je n'y avait pas prêté attention
    Je pense que le compilateur gcc n'a pas aimé parce qu'il considére que pour faire un passage par référence il faut passer une variable pas le retour d'une fonction.

    autant pour moi
    en regardant la source corrigée, c'est la seule chose que tu sembles ne pas avoir modifié
    J'ai tenté de garder le post court
    Merci

    également, le basculement "fenêtré <-> plein écran" buggue sous windows contrairement à linux (merci pour le test bibi.skuk)
    si quelqu'un a une sollution à ce problème ce serait sympa
    Faudra que je prenne le temps d'aller sous Windows -> pour mon ordi

    Jc

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par fearyourself
    Cela reste à prouver, je n'ai jamais remarqué quelque chose de tel


    En effet, tout include dans le .h, un seul include dans toto.cpp vers toto.h -> c'est ma facon de faire... (mais au moins les <> à la place des "", ce n'est pas pareil)
    Le truc est simple...

    Si par exemple, tu fait un truc du genre

    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
     
    /* ficha.h */
    #ifndef FICHA_H
    #define FICHA_H
     
    #include <stdio.h>
    #include <GL/gl.h>
     
    void foo( GLuint plop );
    #endif
    /* eof */
     
    /* ficha.c */
    #include "ficha.h"
     
    void foo( GLuint plop ) {
       printf( "%i\n", plop );
    }
    /* eof */
    Et que dans tout tes autres fichiers tu doit utiliser la fonction foo(), tu va devoir inclure à chaque fois ton fichier ficha.h, donc, pour chaque *.o que tu veux, avoir un include de stdio.h de fait, ce qui fait plein de données à traiter en plus, alors que faire :

    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
     
    /* ficha.h */
    #ifndef FICHA_H
    #define FICHA_H
     
    #include <GL/gl.h>
     
    void foo( GLuint plop );
    #endif
    /* eof */
     
    /* ficha.c */
    #include "ficha.h"
     
    #include <stdio.h>
     
    void foo( GLuint plop ) {
       printf( "%i\n", plop );
    }
    /* eof */
    Fait que tu ne fera l'include de stdio.h uniquement la ou tu en as vraiment besoin, et non partout. Par contre, cela n'est pas changeable pour le cas de GL/gl.h ici.

    En gros, on inclue dans le *.h tout ce qu'il faut pour avoir les definitions de type qui vont bien, et dans le *.[c|cpp] tout ce dont on a besoin à l'interieur des fonctions, cela peux faire gagner un peu de temps de compilation, dans le cas ou il y aurait des trucs gros (genre des templates) mais qui ne seraient pas utile dans le .h et non utilisés dans le reste du code.

    Après c'est vrai que pour un petit truc, cela ne change rien.

  8. #8
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Citation Envoyé par fearyourself
    Citation Envoyé par shenron666
    je ne sais pas faire de makefile
    si vous avez une solution pour me venir en aide n'hésitez pas
    Je l'ai mis dans le .zip du dernier post
    En fait je parlai plus du "dis papa, comment on fait un makefile ? "
    en bref, en dehors de l'utilisation des ide je ne sais pas compiler un code source
    pour dire vrai je n'ai jamais utilisé de makefile pour compiler
    donc forcément je ne me suis jamais penché sur la question

    C'est plus grave que cela, tu supposes que NULL==0 or c'est faux, certains systèmes ont une autre valeur (du moins c'est techniquement possible donc il faut rester portable...)
    J'en prend bonne note, en faisant les include comme tu me l'a suggéré je ne devrais plus rencontrer la "fausse nécessité" de redéfinir des types standards

    Je pense que le compilateur gcc n'a pas aimé parce qu'il considére que pour faire un passage par référence il faut passer une variable pas le retour d'une fonction.
    Je pense la même chose, le compilateur 7.1 de visual (qui n'est pas le meilleur exemple, loin de là) doit compiler d'une autre façon
    il y a de quoi se poser des questions

    Faudra que je prenne le temps d'aller sous Windows -> pour mon ordi
    Je crois que le problème du bug "fullscreen<->windowed" sous windows est connu, je vais chercher un peu mais il est probable qu'il n'y ait pas de solution "propre"
    à la limite, faire un SDL_Quit suivi d'un SDL_Init en ayant pris soin auparavant de faire un SDL_WasInit pour connaitre les sous systèmes à relancer
    j'ai essayé un SDL_QuitSubSystem(SDL_INIT_VIDEO) puis un SDL_InitSubSystem(SDL_INIT_VIDEO) mais sans succès
    si je trouve quelque chose je vous les fait savoir
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  9. #9
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Tout d'abord, concernant le passage en plein écran sous windows, ça devrai fonctionner
    Dans la FAQ sur le site de la SDL on trouve ceci :
    Q: Why doesn't SDL_WM_ToggleFullScreen() work on Windows?
    A: The semantics of SDL_WM_ToggleFullScreen() are that switching between fullscreen and windowed mode is transprent to the application. The display pixels pointer does not change, the display depth does not change, etc. This cannot be guaranteed on Windows. However, there is a simple method you can use to change between fullscreen and windowed mode:
    flags ^= SDL_FULLSCREEN;
    screen = SDL_SetVideoMode(..., flags);
    source: http://www.libsdl.org/faq.php?action...&category=4#79

    Il s'agit bien de la méthode employée, donc c'est peut-etre moi qui ait un problème ?
    Si quelqu'un peux essayer sur un système windows et me dire si le basculement fenêtre<->plein écran fonctionne ou pas ce serai sympa

    J'ai effectué quelques corrections manquantes comme la déclaration du constructeur de copie et de l'opérateur de copie dans la partie privée pour en faire un vrai singleton

    j'ai également ajouté 2 classes pour la gestion du temps
    CTimer : permet d'effectuer simplement des mesures de temps
    CTimeSps : Classe dérivée de CTimer pour faciliter le calcul d'images par secondes par exemple

    elles utilisent SDL_GetTicks pour récupérer le temps écoulé mais en remplaçant le define correspondant on peut les utiliser avec n'importe quelle bibliothèque

    j'ai estimé que ces classes étaient assez basiques et qu'un nouveau fil dans le forum n'était pas nécessaire mais si vous voulez ça peut changer

    s'il y a d'autres corrections à apporter, faites moi signe
    Shenron
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  10. #10
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par shenron666
    Tout d'abord, concernant le passage en plein écran sous windows, ça devrai fonctionner
    Dans la FAQ sur le site de la SDL on trouve ceci :
    source: http://www.libsdl.org/faq.php?action...&category=4#79

    Il s'agit bien de la méthode employée, donc c'est peut-etre moi qui ait un problème ?
    Si quelqu'un peux essayer sur un système windows et me dire si le basculement fenêtre<->plein écran fonctionne ou pas ce serai sympa
    Ok je testerais cela ce soir

    J'ai effectué quelques corrections manquantes comme la déclaration du constructeur de copie et de l'opérateur de copie dans la partie privée pour en faire un vrai singleton

    j'ai également ajouté 2 classes pour la gestion du temps
    CTimer : permet d'effectuer simplement des mesures de temps
    CTimeSps : Classe dérivée de CTimer pour faciliter le calcul d'images par secondes par exemple

    elles utilisent SDL_GetTicks pour récupérer le temps écoulé mais en remplaçant le define correspondant on peut les utiliser avec n'importe quelle bibliothèque

    j'ai estimé que ces classes étaient assez basiques et qu'un nouveau fil dans le forum n'était pas nécessaire mais si vous voulez ça peut changer
    En effet, cela n'est pas nécessaire , on peut tout mettre ensemble mais du coup, il faudra trouver une bonne facon de le présenter

    s'il y a d'autres corrections à apporter, faites moi signe
    Shenron
    Je vais voir déjà ce que cela donne sous Linux

    Jc

  11. #11
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Ok sous linux je confirme que cela fonctionne mais voici mes remarques :

    - T'as enlevé le makefile , je l'ai remis dans la version jointe

    - T'as oublié un cas default dans le main (je l'ai pas déjà fait remarqué ?)

    - T'avais un warning sur l'inutilisation de argc et argv

    Tout cela est corrigé par contre tu utilises printf dans du code C++, pas bien! Utilise cerr à la place..

    Sinon j'aime ton gestionnaire de Time, il est simple mais c'est une bonne solution pour calculer le taux de rafraîchissement...

    J'appelerais plutôt la fonction Start -> Restart cela me semble plus parlant...

    Sinon cela est bien sympa !

    [EDIT]Je vais encore voir ce que cela donne sous mon Windows...[/EDIT]
    Jc

  12. #12
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Citation Envoyé par fearyourself
    Ok sous linux je confirme que cela fonctionne mais voici mes remarques :

    - T'as enlevé le makefile , je l'ai remis dans la version jointe
    Argh sorry my lord, désolé d'avoir oublié de mettre le makefile dans le zip
    j'y ai pensé et dans ma hate (j'ai refait le zip 3 fois ) j'ai oublié le makefile
    je l'ai toujours, il est pas disparu, n'envoyer pas de sos, bref je le remet

    par contre, la version jointe, c'est pas dans le post non ?

    - T'as oublié un cas default dans le main (je l'ai pas déjà fait remarqué ?)
    Je ne pense pas que tu me l'ai fait remarqué mais effectivement j'ai oublié de virer un cas default inutile
    c'est bien de d'un cas inutile dont on parle ?

    [QUOTE]- T'avais un warning sur l'inutilisation de argc et argv [QUOTE]Tu fais comment pour supprimer le warning ?
    je veux dire, je ne peux pas mettre mon main en void, argc et argv sont nécessaires à SDL pour trouver le main et le lier

    Tout cela est corrigé par contre tu utilises printf dans du code C++, pas bien! Utilise cerr à la place..
    ok pour les modifs, j'ai remplacé les printf par des cout et cerr
    comme j'ai appris le C à l'origine et que je suis autodidacte sur le C++ j'ai gardé les habitudes du C
    pas facile de s'en séparer, c'est pourquoi je conseillerai pas à quelqu'un qui veut apprendre le C++ de passer par le C, il risque de prendre de "mauvaises" habitudes ou plutot de ne pas prendre les bonnes

    par contre, comme je suis loin d'être maitre en la matière, comment faire en C++ un :il faut que je me trouve une référence sur la matière...
    (plus généralement, une bonne référence exhaustive au possible sur la STL)

    Sinon j'aime ton gestionnaire de Time, il est simple mais c'est une bonne solution pour calculer le taux de rafraîchissement...

    J'appelerais plutôt la fonction Start -> Restart cela me semble plus parlant...
    Ca fait toujours plaisir de voir qu'on a parfois des idées qui sont appréciées par des personnes qu'on estime
    quand au Start en Restart, il est pris en compte

    Sinon cela est bien sympa !

    [EDIT]Je vais encore voir ce que cela donne sous mon Windows...[/EDIT]
    Jc
    et moi il faudrait que j'essaie sur une autre machine qui n'est pas équipée d'une carte graphique intégrée intel

    une dernière chose, j'effectue quelques corrections et mises à jour et je mettrai le zip à jour dans le premier post plutot que d'en rajouter un à chaque fois
    qu'en penses tu ?
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  13. #13
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par shenron666
    Argh sorry my lord, désolé d'avoir oublié de mettre le makefile dans le zip
    j'y ai pensé et dans ma hate (j'ai refait le zip 3 fois ) j'ai oublié le makefile
    je l'ai toujours, il est pas disparu, n'envoyer pas de sos, bref je le remet

    par contre, la version jointe, c'est pas dans le post non ?
    toi t'oublies le makefile et moi de joindre le .zip... Vu que tu as modifié la plupart des choses toi-même je te laisse mettre à jour ta version et je regarderais si j'ai encore quelques remarques

    - T'avais un warning sur l'inutilisation de argc et argv
    Tu fais comment pour supprimer le warning ?
    je veux dire, je ne peux pas mettre mon main en void, argc et argv sont nécessaires à SDL pour trouver le main et le lier
    tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    (void) argc;
    (void) argv;
    à la fin du main, je le mets juste avant le return final...

    par contre, comme je suis loin d'être maitre en la matière, comment faire en C++ un :il faut que je me trouve une référence sur la matière...
    (plus généralement, une bonne référence exhaustive au possible sur la STL)
    En incluant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <iomanip>
    Tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::cout << setw(3) << time;
    et moi il faudrait que j'essaie sur une autre machine qui n'est pas équipée d'une carte graphique intégrée intel
    Désolé, j'ai pas eu le temps hier soir, ce soir je ferais un tour sur Windows...

    une dernière chose, j'effectue quelques corrections et mises à jour et je mettrai le zip à jour dans le premier post plutot que d'en rajouter un à chaque fois
    qu'en penses tu ?
    Tout à fait, cela me semble parfait,
    Jc

  14. #14
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Citation Envoyé par fearyourself
    toi t'oublies le makefile et moi de joindre le .zip... Vu que tu as modifié la plupart des choses toi-même je te laisse mettre à jour ta version et je regarderais si j'ai encore quelques remarques


    ok donc j'ai fait les corrections que tu m'as demandé et tout cela est très bien

    maintenant j'ai un bug non résolu sur lequel il faut que je me penche :
    le passage entre mode plein écran et mode fenêtre

    je viens de réaliser qu'en fait, ça fonctionne... mal
    c'est peut-etre un problème avec la carte graphique intel intégrée avec la machine que j'utilise actuellement
    petite explication :

    1) je lance l'appli, avec F1,F2,F3 je change de résolution -> pas de problème
    2) je fait espace -> je passe en plein écran -> le triangle qui tourne n'apparait pas
    3) je change la résolution avec F1,F2,F3 -> le prog change de résolution en restant donc en plein écran -> le triangle réapparait
    4) je fait espace -> le prog retourne en mode fenêtre -> plus de triangle
    5) changement de résolution -> le triangle réapparait
    dans les cas de changement de résolution où je n'ai pas le triangle, même si je choisi la même résolution que l'actuelle, le triangle réapparait

    je vais faire quelques recherches là dessus, comme toujours si quelqu'un a une solution...
    peut-etre devrais-je poster le problème dans le forum SDL (ça ferait un peu double post par contre)

    note: je met à jour le zip du post original
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  15. #15
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par shenron666


    ok donc j'ai fait les corrections que tu m'as demandé et tout cela est très bien
    Ok je regarde cela

    maintenant j'ai un bug non résolu sur lequel il faut que je me penche :
    le passage entre mode plein écran et mode fenêtre

    je viens de réaliser qu'en fait, ça fonctionne... mal
    c'est peut-etre un problème avec la carte graphique intel intégrée avec la machine que j'utilise actuellement
    petite explication :

    1) je lance l'appli, avec F1,F2,F3 je change de résolution -> pas de problème
    2) je fait espace -> je passe en plein écran -> le triangle qui tourne n'apparait pas
    3) je change la résolution avec F1,F2,F3 -> le prog change de résolution en restant donc en plein écran -> le triangle réapparait
    4) je fait espace -> le prog retourne en mode fenêtre -> plus de triangle
    5) changement de résolution -> le triangle réapparait
    dans les cas de changement de résolution où je n'ai pas le triangle, même si je choisi la même résolution que l'actuelle, le triangle réapparait

    je vais faire quelques recherches là dessus, comme toujours si quelqu'un a une solution...
    peut-etre devrais-je poster le problème dans le forum SDL (ça ferait un peu double post par contre)
    Oui ce sera mieux, ne serait-ce que pour les personnes qui auront le même genre de problème...
    Jc

  16. #16
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Le problème a été identifié et résolu, j'ai mis à jour le zip

    J'ai rencontré un problème en basculant en plein écran mais je n'arrive pas à le reproduire
    j'ai effectué plusieurs changements de résolution et de mode consécutifs avec succès

    donc ne pas oublier de réinitialiser tout le contexte opengl lors d'un changement de résolution ou de mode d'affichage

    un grand merci à toi fearyourself pour m'avoir aidé à rendre ce code propre et fonctionnel
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  17. #17
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par shenron666
    Le problème a été identifié et résolu, j'ai mis à jour le zip

    J'ai rencontré un problème en basculant en plein écran mais je n'arrive pas à le reproduire
    j'ai effectué plusieurs changements de résolution et de mode consécutifs avec succès
    Quel problème ?

    donc ne pas oublier de réinitialiser tout le contexte opengl lors d'un changement de résolution ou de mode d'affichage
    En effet !

    un grand merci à toi fearyourself pour m'avoir aidé à rendre ce code propre et fonctionnel
    De rien c'était un plaisir ,

    Très bon boulot et pour cette contribution,
    Jc

    PS: J'ai rajouté encore un fichier joint, le cas default était toujours manquant dans les switch du main et le makefile n'était pas à jour...
    Fichiers attachés Fichiers attachés

  18. #18
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    le problème rencontré était (je crois) en plein écran, l'affichage ne se faisait pas sur la totalité de l'écran
    comme si l'écran était en 1024*768 et que l'affichage était en haut à gauche en 640x480 avec le bureau reste de l'écran et le viewport bien configuré dans le triangle qu'on ne voit qu'en partie dans le coin haut gauche

    je n'ai pas réussi à reproduire le phénomène, c'était peut-etre avant les corrections ou alors en release un problème lié comme tu semblais sous entendre avec le ZBuffer 24 bits
    mon pc ayant planté méchamment juste après j'ai dû rebooter

    j'espère que ma description est assez claire pour que tu te fasses une idée

    ok pour le makefile, faudra que je m'y mette un jour
    pas très motivé surtout qu'au boulot je ne code qu'en MFC

    par contre, pour les cas default des switch, il sont obligatoires (au niveau convention par exemple) ?
    de mon point de vue ce serait comme un else{} qui ne fait donc rien par définition
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  19. #19
    Invité
    Invité(e)
    Par défaut
    Les cas par defaut ne sont pas obligatoire, c'est juste que le compilateur se plaind que tous les cas ne sont pas donnés dans le switch, cela enleve juste un warning, rien de bien méchant.

    un simple
    suffit, c'est pour faire propre à la compilation, et ne ralenti rien du tout dans l'execution.

  20. #20
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    encore un warning que visual mange à la compil

    merci pour l'explication bibi.skuk

    ps: j'aime pas les warning non plus, alors je préfère aussi quand il n'y en a pas du tout
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Questions générales sur SDL / OpenGL / Qt pour la création de Jeux vidéo
    Par Invité dans le forum Développement 2D, 3D et Jeux
    Réponses: 21
    Dernier message: 23/10/2011, 10h24
  2. [Source] [SDL] Textures Textes OpenGL
    Par fearyourself dans le forum Contribuez
    Réponses: 13
    Dernier message: 09/07/2009, 08h44
  3. Demande d'aide pour une formation SDL/OpenGL.
    Par Squalthor dans le forum API graphiques
    Réponses: 14
    Dernier message: 13/07/2006, 20h24
  4. Réponses: 2
    Dernier message: 25/02/2006, 06h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo