Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Une belle fenêtre toute blanche...  (Lu 2642 fois)

0 Membres et 1 Invité sur ce sujet

Gwindor

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Une belle fenêtre toute blanche...
« le: Juillet 17, 2012, 10:27:37 am »
Bonjour! Je suis (encore) de retour...
J'essaie d'utiliser OpenGl dans une fenêtre SFML, mais quoi que j'essaie de dessiner, l'écran restera blanc...
Voici mon code source:

#include <GL/glew.h>
#include <SFML/Window.hpp>
#include <iostream>
#include <String>
#include "Shader.h"

using namespace std;


int main ()
{

    //Mise en place du contexte de la fenetre
    sf::ContextSettings settings;
    settings.majorVersion = 3;
    settings.minorVersion = 1;

    //Création de la fenetre
    cout << "Creation de la fenetre" << endl;
    sf::Window window(sf::VideoMode(1000, 800), "OpenGL", sf::Style::Default, settings);

     //Test de Glew
    GLenum comp;
    comp = glewInit ();
    if (comp != GLEW_OK)
    {
        cout << "L'initialistation de Glew n'a pas fonctionné: " << glewGetErrorString(comp) << endl;
        return -1;
    }
    //Dans le cas ou GLEW a été initialisé corectement: l'application peut fonctionner;
    else
    {
        cout << "Mise en route de Glew réussie" << endl;
    }

    //Préparation du loop de rendering
    bool opened = true;
    int loopId = 0;
    glClearColor (0.0f, 1.0f, 0.0f, 1.0f);

    //Loop de rendering
    while (opened)
    {
        loopId ++;
        //Gestion des évènements de la fenêtre
        sf::Event event;
        while (window.pollEvent (event))
        {
            cout << "Numero de loop: " << loopId << endl;

            if (event.type == sf::Event::Closed)
            {
                opened = false;
                cout << "Fermeture de la fenetre" << endl;
            }
        }

        glClear (GL_COLOR_BUFFER_BIT);

    }

    cout << "Fin de l'application" << endl;

}

Le code est aussi simple que possible. Initialement, il incluait des shaders, mais pour simplifier, j'ai supprimé toute fonctions de dessin.
Ma configuration: Windows 7-64bits, Code::Blocks 10.05, SFML 2.0. Et, bien que je ne pense pas que cela soit important, j'utilise la version release, liée statiquement.

En théorie, je devrais obtenir une fenêtre verte. Mais elle reste désespérement blanche... C'est indéniablement plus beau que ce que saurais jamais faire, mais ce n'est pas le but... ;D

 L'application ne bloque pas; en effet, une fois que je bouge la souris/tape une touche, j'obtiens dans une console l'id du loop (voire le code). De même, l'intégralité du loop principal est réalisé, puisque entre deux clic de souris, les id de loop ne se suivent pas (ils passent de 800 à 900, etc...). Enfin, lorsque je place la commande glClear avant le loop de l'application et après avoir définis glClearColor, rien ne change...

Il s'agirait donc d'une erreur que j'ai faite avec opengl? Il est possible que dans la version antérieure de mon code source, j'avais fais une erreur au niveau de leur utilisation (même si le compilateur n'a pas hurlé à mort...), et que dans cette version, je ne les utilise pas... Ce qui causerait cette fenêtre blanche?

Aussi, je précise bien dans mon ContextSetting que je veux obtenir une fenêtre de rendu utilisant opengl version 3.1 (c'est pour cela que j'utilise SFML 2.0) Or, en incluant les lignes de codes:

    settings = window.getSettings();
    cout << "version:" << settings.majorVersion << "." << settings.minorVersion << std::endl;
 

[...] je me rends compte que SFML utilise la version 4.1, qui est la plus haute que mon ordinateur peut supporter??? Là, je bug plus que mon ordinateur. SFML utilise donc toujours la version de Opengl la plus récente qu'elle trouve?

Enfin, dernier point que je vais souligner, lorsque j'ai compilé un codes  sous SFML 1.6 utilisant des fonctions "dépréciées" de opengl, cela tournait sans problème.

Je pense n'avoir rien oublié... sinon que je suis doué pour les bévues. >:( Je n'ai pas trouvé de cas similaire! Pour l'originalité... Quelqu'un aurait une idée de l'erreur que j'ai perpétré?  Merci pour toute réponse!

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Une belle fenêtre toute blanche...
« Réponse #1 le: Juillet 17, 2012, 10:51:23 am »
Citer
Je pense n'avoir rien oublié...
Si : lire le tutoriel OpenGL, qui explique tout en détail et contient même un code complet minimal qui fonctionne :D

Citer
SFML utilise donc toujours la version de Opengl la plus récente qu'elle trouve?
Ce n'est pas SFML, c'est ton driver. La spéc d'OpenGL permet au driver de créer un contexte ayant une version plus haute, si celle-ci est 100% compatible avec la version demandée.
Laurent Gomila - SFML developer

Gwindor

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Une belle fenêtre toute blanche...
« Réponse #2 le: Juillet 17, 2012, 11:26:22 am »
Merci pour cette réponse rapide!
Comme la dernière fois, c'est une erreur stupide... Très stupide.
Je n'ai jamais pu utiliser le double buffering jusqu'aujourd'hui, et j'ai oublié jusqu'à son existence.
Dans mon code, je dessinais toujours dans le même buffer, ignorant que celui-là était en mode "écriture"... Il suffit juste d'utiliser la commande window.display () pour échanger les buffers. Maintenant, tout fonctionne parfaitement!
Encore merci pour ton aide! :D