Partage
  • Partager sur Facebook
  • Partager sur Twitter

OpenGL glShaderSource

    12 décembre 2019 à 16:48:53

    Bonjour,

    je n'arrive pas à comprendre ce que demande la fonction glShaderSource, voilà le code :

    #include "glew.h"
    #include "glut.h"
    
    #include <fstream>
    #include <iostream>
    using namespace std;
    
    GLfloat vertices[] = {
        -1.0, -1.0, 0.0,
        1.0, -1.0, 0.0,
        0.0, 1.0, 0.0};
    
    GLuint VBO;
    
    void renderScene()
    {
        glClearColor(0, 0, 255, 255);
        glClear(GL_COLOR_BUFFER_BIT);
    
        glBindBuffer(GL_ARRAY_BUFFER, VBO);
        glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
        glEnableVertexAttribArray(0);
        glBindBuffer(GL_ARRAY_BUFFER, VBO);
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
        glDrawArrays(GL_TRIANGLES, 0, 3);
        glDisableVertexAttribArray(0);
    
        glutSwapBuffers();
    }
    
    int main(int argc, char **argv)
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
    
        glutInitWindowSize(1024, 768);
        glutInitWindowPosition(100, 100);
        glutCreateWindow("NICE ENGINE");
    
        glewInit();
        glGenBuffers(1, &VBO);
    
        GLuint ShaderProgram = glCreateProgram();
        GLuint shader1 = glCreateShader(GL_VERTEX_SHADER);
    
        GLchar pShaderText[] = "#version 330";
    
        //first compile VERTEX_SHADER
        const GLchar* p[1];
        p[0] = pShaderText;
        GLint Lengths[1];
        Lengths[0]= strlen(pShaderText);
        glShaderSource(shader1, 1, p, Lengths);
    
        glCompileShader(shader1);
    
        GLint success;
    
        glGetShaderiv(shader1, GL_COMPILE_STATUS, &success);
        if (!success) {
            GLchar InfoLog[1024];
            glGetShaderInfoLog(shader1, sizeof(InfoLog), NULL, InfoLog);
            cout << "Error compiling shader type : " << GL_VERTEX_SHADER << " " << InfoLog;
        }
    
        glAttachShader(ShaderProgram, shader1);
    
        glGetProgramiv(ShaderProgram, GL_LINK_STATUS, &success);
        if (success == 0) {
            GLchar ErrorLog[1024];
            glGetProgramInfoLog(ShaderProgram, sizeof(ErrorLog), NULL, ErrorLog);
            cout << "Error linking shader program : " << " " << ErrorLog;
        }
    
        glValidateProgram(ShaderProgram);
        glUseProgram(ShaderProgram);
    
    
        glutDisplayFunc(renderScene);
        glutMainLoop();
    
        return 0;
    }
    

    Voilà ce que retourne le terminal :

    Error compiling shader type : 35633 Vertex shader failed to compile with the following errors:                          
    ERROR: 0:? : error(#76) Syntax error: unexpected tokens following #version                                              
    ERROR: 0:? : error(#364) Invalid: unexpected token in symbol.                                                           
    ERROR: error(#273) 2 compilation errors.  No code generated                                                                                                                                                                                     
    Error linking shader program :

    J'ai essayé de changer un peu le code mais toujours les même erreurs...




    • Partager sur Facebook
    • Partager sur Twitter
      12 décembre 2019 à 19:00:15

      Glut c'est tout vieux, utilise glfw ou SDL2.

      Je dirais que tu n'as pas initialisé un contexte OpenGL 3.3 (mais un contexte OpenGL par défaut de Glut, peut être du 2 quelque chose), donc forcément il n'apprécie pas ton glsl en version 330.

      Ton post aurait plus sa place dans le forum C++.

      (une fois ce pb résolu, bien entendu il faudra étoffer ton vertex shader, et ajouter un fragment shader, pour espérer avoir quelque chose à l'écran à la fin)

      • Partager sur Facebook
      • Partager sur Twitter
        12 décembre 2019 à 22:56:13

        Bonjour,

        Mauvais forum

        Le sujet est déplacé de la section Discussions développement vers la section Langage C++

        • Partager sur Facebook
        • Partager sur Twitter
        Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
          13 décembre 2019 à 1:11:28

          Je doute que ce soit ça, j'ai suivi un tuto proposé sur le site d'OpenGL même. Puis je trouve pas de fonction Glut pour fixer la version d'OpenGL, elle ne semble pas exister fonctions Glut...

          • Partager sur Facebook
          • Partager sur Twitter
            13 décembre 2019 à 9:37:33

            Ce n'est pas "le site d'OpenGL" ;)

            Si tu regardes les commentaires sur le site, tu verras que tu n'es pas le seul à avoir des pb avec les premiers tuto (certains à cause du contexte opengl, d'autres à cause de la non utilisation d'un vao).

            Es tu sur Mac OS?

            Essaie déjà d'utiliser glfw à la place de freeglut.

            • Partager sur Facebook
            • Partager sur Twitter

            OpenGL glShaderSource

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown