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

Auteur Sujet: OpenGL: Created version = 0.0  (Lu 2039 fois)

0 Membres et 1 Invité sur ce sujet

herotom99

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
OpenGL: Created version = 0.0
« le: Mars 22, 2016, 09:03:58 pm »
Bonsoir,

Je cherche actuellement à réussir un simple rendu 3D avec OpenGL.

J'ai fais un code très simple sans erreur et qui fonctionne parfaitement.
J'ai donc voulu tester ce code sur un autre pc et je rencontre une erreur (après avoir recompilé le projet):

https://gyazo.com/7aae9d9c6f14e3dcac6b9f4899f212cc

Rien de bien choquant mise à part la version qui est en 0.0 (donc j'imagine que OpenGL ne fonctionne pas).
J'ai vérifié sur pas mal de forum mais rien.
Mes drivers sont à jour (GTX 770) et voici le code:

#include <iostream>
#include <string>

#include "GL\glew.h"

#include "SFML\OpenGL.hpp"
#include "SFML\System.hpp"
#include "SFML\Graphics.hpp"
#include "SFML\Window.hpp"
#include "SFML\Main.hpp"

#include "glm\gtx\transform.hpp"

#include "Camera.h"

using namespace std;

int main(int argc, char *args[])
{
        sf::Context context;
        sf::ContextSettings settings;
        settings.depthBits = 24;
        settings.stencilBits = 8;
        settings.majorVersion = 4;
        settings.minorVersion = 0;
        settings.antialiasingLevel = 8;

        sf::RenderWindow window(sf::VideoMode(1280, 800), "OpenGL",sf::Style::Close, settings);

        glewExperimental = GL_TRUE;
        glewInit();

        sf::Event event;

        Camera camera(glm::vec3(4,4,3),1280.f / 800.f, glm::radians(90.f), 0.0001f, 1000.0f);

        bool IsRunning = true;

        //OPENGL//

        float points[] = {
                0.0f, 0.5f, 0.0f,
                0.5f, -0.5f, 0.0f,
                -0.5f, -0.5f, 0.0f
        };

        GLuint vbo = 0;
        glGenBuffers(1, &vbo);
        glBindBuffer(GL_ARRAY_BUFFER, vbo);
        glBufferData(GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW);

        GLuint vao = 0;
        glGenVertexArrays(1, &vao);
        glBindVertexArray(vao);
        glEnableVertexAttribArray(0);
        glBindBuffer(GL_ARRAY_BUFFER, vbo);
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);

        const char* vertex_shader =
                "#version 400\n"
                "in vec3 vp;"
                "uniform mat4 MVP;"
                "void main () {"
                "  gl_Position = MVP * vec4 (vp, 1.0);"
                "}";

        const char* fragment_shader =
                "#version 400\n"
                "out vec4 frag_colour;"
                "void main () {"
                "  frag_colour = vec4 (1.0, 0.0, 0.0, 1.0);"
                "}";

        GLuint vs = glCreateShader(GL_VERTEX_SHADER);
        glShaderSource(vs, 1, &vertex_shader, NULL);
        glCompileShader(vs);
        GLuint fs = glCreateShader(GL_FRAGMENT_SHADER);
        glShaderSource(fs, 1, &fragment_shader, NULL);
        glCompileShader(fs);

        GLuint shader_programme = glCreateProgram();
        glAttachShader(shader_programme, fs);
        glAttachShader(shader_programme, vs);
        glLinkProgram(shader_programme);



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

                glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

                glUseProgram(shader_programme);

                GLuint MVPID = glGetUniformLocation(shader_programme, "MVP");
                glUniformMatrix4fv(MVPID, 1, GL_FALSE, &camera.MVPMatrix()[0][0]);

                glBindVertexArray(vao);
                glDrawArrays(GL_TRIANGLES, 0, 3);

                window.display();
        }

        window.close();

        return 0;
}

Lors que je debug, ça bloque à glGenBuffers (logique).
Merci  :)
 

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re : OpenGL: Created version = 0.0
« Réponse #1 le: Mars 23, 2016, 01:10:15 am »
Au hasard, tu links comment glew? as tu essayer glewinit() avant de créer la renderwindow?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : OpenGL: Created version = 0.0
« Réponse #2 le: Mars 23, 2016, 07:45:19 am »
glewInit échouera s'il n'y a aucun contexte OpenGL actif (ie. avant la création de la fenêtre). Quant à savoir comment il lie GLEW... en fait tout cela n'aucun rapport avec GLEW, c'est entre SFML et son driver graphique.

Malheureusement je ne pourrai pas t'aider pour ce genre de problème, il faudrait que tu postes sur le forum anglais si possible.
Laurent Gomila - SFML developer

herotom99

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
Re : OpenGL: Created version = 0.0
« Réponse #3 le: Mars 25, 2016, 10:44:06 am »
Bonjour,
Je me permet de répondre au problème au cas où ça pourrait aider quelqu'un.

Alors la solution était que je n'utilisais pas un opengl32.dll suffisamment récent (pour mon pc du moins).
Ce .dll était celui que j'utilisais sur mon pc portable. J'ai donc pris le dll directement de windows.

C:/Windows/system32/opengl32.dll

Je tiens à préciser également que le .dll récent fonctionne sur mon pc portable.

Merci pour votre aide !