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

Auteur Sujet: [OpenGL] Opengl n'affiche rien  (Lu 2057 fois)

0 Membres et 2 Invités sur ce sujet

Lash

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
[OpenGL] Opengl n'affiche rien
« le: Août 31, 2013, 08:09:22 pm »
Bonjour,

Je suis en train d'apprendre OpenGL avec la superbible d'OpenGL. Etant donné que mon but final est de faire un appli, je test les codes d'exemples du bouquin avec SFML, cependant je n'arrive pas à affiché un stupide triangle.

Avec les samples du bouquin c'est sensé donner ça :


Cependant quand je test avec SFML je n'ai que le fond vert.

Voici mon code :

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

using namespace std;

int main(int argc, char* argv[])
{
        sf::VideoMode videoMode(1280,720,32);

        sf::Window window(videoMode, "OpenGL", sf::Style::Default, sf::ContextSettings());
    window.setVerticalSyncEnabled(true);

        cout << window.getSettings().majorVersion << " " << window.getSettings().minorVersion << endl;

        glewExperimental=true;

        GLenum err = glewInit();

        cout << err << endl;

        //============<Sample>==============

        GLuint          program;
    GLuint          vao;

    static const char * vs_source[] =
    {
        "#version 420 core                                                 \n"
        "                                                                  \n"
        "void main(void)                                                   \n"
        "{                                                                 \n"
        "    const vec4 vertices[] = vec4[](vec4( 0.25, -0.25, 0.5, 1.0),  \n"
        "                                   vec4(-0.25, -0.25, 0.5, 1.0),  \n"
        "                                   vec4( 0.25,  0.25, 0.5, 1.0)); \n"
        "                                                                  \n"
        "    gl_Position = vertices[gl_VertexID];                          \n"
        "}                                                                 \n"
    };

    static const char * fs_source[] =
    {
        "#version 420 core                                                 \n"
        "                                                                  \n"
        "out vec4 color;                                                   \n"
        "                                                                  \n"
        "void main(void)                                                   \n"
        "{                                                                 \n"
        "    color = vec4(0.0, 0.8, 1.0, 1.0);                             \n"
        "}                                                                 \n"
    };

    program = glCreateProgram();
    GLuint fs = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fs, 1, fs_source, NULL);
    glCompileShader(fs);

    GLuint vs = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vs, 1, vs_source, NULL);
    glCompileShader(vs);

    glAttachShader(program, vs);
    glAttachShader(program, fs);

    glLinkProgram(program);

    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);

        //============</Sample>==============


    // la boucle principale
    bool running = true;
    while (running)
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
            {
                running = false;
            }
            else if (event.type == sf::Event::Resized)
            {
                glViewport(0, 0, event.size.width, event.size.height);
            }
        }

                //============<Sample>==============

        static const GLfloat green[] = { 0.0f, 0.25f, 0.0f, 1.0f };
        glClearBufferfv(GL_COLOR, 0, green);

        glUseProgram(program);
        glDrawArrays(GL_TRIANGLES, 0, 3);

                //============</Sample>==============


        window.display();
    }


        return 0;
}
 

Ce qui vient des samples du bouquin sont entourés de //============<Sample>==============

Mon glew s'est bien initialisé (err = 0). SFML et glew sont compiler en dynamique (j'ai essayé en statique mais ça ne change rien).
Quand j'affiche la version d'OpenGL j'ai bien la 4.2

Au début j'utilisais une RenderWindow parce que j'affichais un HUD grâce à SFML mais je suis passé avec un code minimaliste pour faire marcher le tout.

J'ai cherché un peu partout mais je n'ai rien trouvé qui m'aide.
Du coup je me demandais si quelqu'un pouvais m'aider, ou a déjà eu ce problème ?

Merci d'avance,

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [OpenGL] Opengl n'affiche rien
« Réponse #1 le: Août 31, 2013, 10:01:10 pm »
Tu devrais commencer par vérifier si tous tes appels à OpenGL fonctionnent, en insérant quelques glGetError() dans ton code. Là si une fonction foire, tu ne le sauras même pas. OpenGL peut te dire si tu fais mal quelque chose, autant utiliser cette fonctionnalité.
Laurent Gomila - SFML developer

Lash

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : [OpenGL] Opengl n'affiche rien
« Réponse #2 le: Août 31, 2013, 11:02:15 pm »
Bonjour,

Merci pour ta réponse,
Du coup j'ai mis des glGetError() après chaque appel de fonction (j'espère que c'est comme ça qu'il faut faire).

program = glCreateProgram();

        err = glGetError();
        cout << "Create program : " << err << endl;

    GLuint fs = glCreateShader(GL_FRAGMENT_SHADER);

        err = glGetError();
        cout << "Create fs : " << err << endl;

    glShaderSource(fs, 1, fs_source, NULL);

        err = glGetError();
        cout << "Shader source : " << err << endl;


 


Et à chaque fois il me retourne 0 :




Du coup je ne suis pas trop avancé. Je vais essayer de continuer à chercher de mon coté.

Lash

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : [OpenGL] Opengl n'affiche rien
« Réponse #3 le: Septembre 01, 2013, 04:14:56 am »
Je penses avoir trouvé l'origine de mon problème en relisant la page du tuto SFML pour utiliser OpenGL.
Etant donnée que SFML créé un contexte en compatibility profile, et vue que je veux faire du core profile ça pose un soucis.

Du coup je vais changer de système de fenêtrage pour le moment (mais je garde sfml pour tout le reste notamment le texte).

Désolée du dérangement.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [OpenGL] Opengl n'affiche rien
« Réponse #4 le: Septembre 01, 2013, 07:46:24 am »
Citer
Etant donnée que SFML créé un contexte en compatibility profile, et vue que je veux faire du core profile ça pose un soucis.
En quoi est-ce que cela poserait problème ? Ca signifie simplement que les fonctions obsolètes sont toujours supportées, mais ça ne change rien pour les nouvelles fonctions.
Laurent Gomila - SFML developer

Lash

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : [OpenGL] Opengl n'affiche rien
« Réponse #5 le: Septembre 01, 2013, 04:20:01 pm »
D'accord, dans ce cas la je ne comprend pas pourquoi mon triangle ne n'affiche pas.
Pourtant j'ai bien changer #version 420 core en #version 420 compatibility.