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

Auteur Sujet: [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?  (Lu 10007 fois)

0 Membres et 2 Invités sur ce sujet

lanquemar

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
    • E-mail
Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« Réponse #15 le: Octobre 04, 2012, 10:32:48 pm »
Oui oui je me doute, et je te remercie !  :)

En fait, j'ai fait mieux, j'ai fait un nouveau projet, j'ai minimaliser mon code pour ne garder que ceci (j'ai essayé de garder les mêmes libs) :
#include <GL/glew.h>

#include <SFML/Graphics.hpp>
#include <SFML/OpenGL.hpp>

#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(1024, 768), "SFML works!");
    window.setVerticalSyncEnabled(false);
    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);

         // Declare and load a font
     sf::Font font;
     font.loadFromFile("arial.ttf");

     // Create a text
     sf::Text text("Hello");
     text.setFont(font);
     text.setCharacterSize(30);
     text.setStyle(sf::Text::Bold);
     text.setColor(sf::Color::Red);
     text.setPosition(100,100);

    GLenum code;

    /* initialisation de GLEW */
    code = glewInit();
    if(code != GLEW_OK)
    {
        fprintf(stderr, "impossible d'initialiser GLEW : %s\n",
                        glewGetErrorString(code));
    }

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();

        window.pushGLStates();
        window.draw(shape);
        window.draw(text);
        window.popGLStates();
        window.display();
    }

    return 0;
}

 

Et là tout fonctionne correctement, alors que sur mon projet principal, non...  :(
Ça commence à m'énerver xD !

Je vais continuer de chercher, merci encore :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« Réponse #16 le: Octobre 04, 2012, 10:36:59 pm »
Voilà qui me fait gagner encore plus de temps :P

Et qui t'en fera gagner à toi aussi, vu que maintenant tu as une version qui marche et que tu peux comparer au code qui foire.
Laurent Gomila - SFML developer

lanquemar

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
    • E-mail
Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« Réponse #17 le: Octobre 04, 2012, 10:55:44 pm »
Apparemment, si je fais de la 2D avec l'OpenGL, ça fonctionne...
Dès que je passe à la 3D, plus de texte ni de rond vert...
C'est bizarre, je regarderai ça plus tard :)

Merci encore :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« Réponse #18 le: Octobre 05, 2012, 07:41:55 am »
Qu'est-ce que "3D" inclue exactement ? C'est quand tu ajoutes quelle(s) fonction(s) que ça foire ?
Laurent Gomila - SFML developer

lanquemar

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
    • E-mail
Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« Réponse #19 le: Octobre 05, 2012, 07:31:21 pm »
En fait, ça foire quand cette fonction est exécutée :
int init_resources()
{
  GLfloat cube_vertices[] = {
    // front
    -1.0, -1.0,  1.0,
     1.0, -1.0,  1.0,
     1.0,  1.0,  1.0,
    -1.0,  1.0,  1.0,
    // back
    -1.0, -1.0, -1.0,
     1.0, -1.0, -1.0,
     1.0,  1.0, -1.0,
    -1.0,  1.0, -1.0,
  };

  glGenBuffers(1, &vbo_cube_vertices);
  glBindBuffer(GL_ARRAY_BUFFER, vbo_cube_vertices);
  glBufferData(GL_ARRAY_BUFFER, sizeof(cube_vertices), cube_vertices, GL_STATIC_DRAW);

  GLfloat cube_colors[] = {
    // front colors
    1.0, 0.0, 0.0,
    0.0, 1.0, 0.0,
    0.0, 0.0, 1.0,
    1.0, 1.0, 1.0,
    // back colors
    1.0, 0.0, 0.0,
    0.0, 1.0, 0.0,
    0.0, 0.0, 1.0,
    1.0, 1.0, 1.0,
  };

  glGenBuffers(1, &vbo_cube_colors);
  glBindBuffer(GL_ARRAY_BUFFER, vbo_cube_colors);
  glBufferData(GL_ARRAY_BUFFER, sizeof(cube_colors), cube_colors, GL_STATIC_DRAW);

  GLushort cube_elements[] = {
    // front
    0, 1, 2,
    2, 3, 0,
    // top
    1, 5, 6,
    6, 2, 1,
    // back
    7, 6, 5,
    5, 4, 7,
    // bottom
    4, 0, 3,
    3, 7, 4,
    // left
    4, 5, 1,
    1, 0, 4,
    // right
    3, 2, 6,
    6, 7, 3,
  };

  glGenBuffers(1, &ibo_cube_elements);

  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo_cube_elements);
  glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(cube_elements), cube_elements, GL_STATIC_DRAW);

  GLint link_ok = GL_FALSE;
  GLuint vs, fs;

  if ((vs = create_shader("cube.v.glsl", GL_VERTEX_SHADER))   == 0) return 0;
  if ((fs = create_shader("cube.f.glsl", GL_FRAGMENT_SHADER)) == 0) return 0;

  program = glCreateProgram();
  glAttachShader(program, vs);
  glAttachShader(program, fs);
  glLinkProgram(program);
  glGetProgramiv(program, GL_LINK_STATUS, &link_ok);

  if (!link_ok) {
    fprintf(stderr, "glLinkProgram:");
    print_log(program);
    return 0;
  }

  const char* attribute_name;
  attribute_name = "coord3d";
  attribute_coord3d = glGetAttribLocation(program, attribute_name);

  if (attribute_coord3d == -1) {
    fprintf(stderr, "Could not bind attribute %s\n", attribute_name);
    return 0;
  }

  attribute_name = "v_color";
  attribute_v_color = glGetAttribLocation(program, attribute_name);

  if (attribute_v_color == -1) {
    fprintf(stderr, "Could not bind attribute %s\n", attribute_name);
    return 0;
  }

  const char* uniform_name;
  uniform_name = "mvp";
  uniform_mvp = glGetUniformLocation(program, uniform_name);

  if (uniform_mvp == -1) {
    fprintf(stderr, "Could not bind uniform %s\n", uniform_name);
    return 0;
  }
  return 1;
}
 

Donc si je résume ;
 - sans cette fonction, j'ai mon texte ;
 - avec cette fonction, j'ai une fenêtre avec mes dessins OpenGL ;
 - pas d'erreur de compilation ;
 - pas de message particulier dans la console ;

En fait, quand je disais que quand je fais de la 2D ça fonctionne, c'est simplement qu'en fait, je n'utilisais pas les Shaders pour la 2D. Par contre, j'utilise les Shaders pour la 3D, et là ça foire...
Donc ça serait les Shaders ?  :-\

EDIT : En fait, je me trompe totalement : quand je faisais de la 2D (et que ça foirait pas), j'utilisais aussi deux shaders, mais que je rentrais moi même dans un tableau de char (sans passer par une ouverture de fichier), donc ça ne peut pas être ça non plus... :( Grr
« Modifié: Octobre 05, 2012, 07:37:46 pm par lanquemar »

lanquemar

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
    • E-mail
Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« Réponse #20 le: Octobre 05, 2012, 08:03:29 pm »
J'ai continué d'affiner ma recherche dans la fonction d'init, et voilà ce que j'ai trouvé :
glBindBuffer(GL_ARRAY_BUFFER, vbo_cube_vertices);

Avec cette ligne (sans la suite de la fonction), pas de texte.
Sans cette ligne (ni la suite de la fonction), texte.

Je comprends de moins en moins bien le problème... xD  :o

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« Réponse #21 le: Octobre 05, 2012, 08:45:26 pm »
Tu utilises la 2.0 RC ou bien les dernières sources ?

Sinon, un petit
glBindBuffer(GL_ARRAY_BUFFER, 0);
avant les fonctions SFML devrait faire l'affaire.
Laurent Gomila - SFML developer

lanquemar

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
    • E-mail
Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« Réponse #22 le: Octobre 05, 2012, 08:50:52 pm »
J'utilise la version RC  :)

Mais par contre, le bind à 0 fonctionne parfaitement !  :D  :D

Merci beaucoup !!!!

Et désolé pour le dérangement  :-\

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« Réponse #23 le: Octobre 05, 2012, 11:16:42 pm »
Y a pas de mal, tu pouvais pas savoir ;)
Laurent Gomila - SFML developer

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« Réponse #24 le: Octobre 06, 2012, 02:02:34 am »
Merci ! J'avais le même problème avec le texte.  :)