IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

[GLSL] les bases


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de lXT95l
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 106
    Par défaut [GLSL] les bases
    Bonjour a tous,
    j'ai eu le livre OpenGL 2.0 guide officiel pour noel !
    Je suis donc au chapitre de GLSL (opengl shading language).
    Le probleme c'est que j'arrive meme pas a compilé l'exemple de base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
     
    #include <SDL/SDL.h>
    #include <GL/glew.h>
     
     
    int tempsActuel,tempsPrecedent,nbImg;
    char infoFPS[100];
     
    void Draw(),Quit();
     
    GLuint shader,program;
    GLint compiled, linked;
    const GLchar* shaderSrc[] = {
    	"void main()"
    	"{"
    	"	gl_position = glModelViewProjectionMatrix * gl_vertex;"
    	"}"
    };
     
    int main ( int argc, char** argv )
    {
    	//SDL
        putenv("SDL_VIDEO_WINDOW_POS=center");
     
        SDL_Init(SDL_INIT_VIDEO);
     
        atexit(SDL_Quit);
     
        SDL_WM_SetCaption("OGL Test", NULL);
        SDL_SetVideoMode(800, 600, 32, SDL_GL_DOUBLEBUFFER
    										|SDL_GL_ACCELERATED_VISUAL);
    	SDL_Event event;
     
        /* OpenGL */
     
        glMatrixMode( GL_PROJECTION );
     
        glLoadIdentity();
     
        gluPerspective(70,(double)800/600,1,1000000);                         
     
        glEnable(GL_DEPTH_TEST);
     
        glEnable(GL_TEXTURE_2D);
     
        glShadeModel(GL_SMOOTH);
     
        glEnable(GL_POLYGON_SMOOTH);
     
        glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
     
        glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
     
     
        /* GLEW */
        glewInit();
     
    	//Shader
    	shader = glCreateShaderObject(GL_VERTEX_SHADER);
     
     
    	//Boucle principal
    	while(1)
     
    	{
     
            SDL_PollEvent(&event);
     
            switch(event.type)
     
            {
     
                case SDL_QUIT:
     
                Quit();
     
                break;
     
                case SDL_KEYDOWN:
     
                switch (event.key.keysym.sym)
     
                {
     
                    case SDLK_ESCAPE:
     
                        Quit();
                        break;
     
                }
     
                break;
     
            }
     
     
     
            /*TEMPS*/
     
            tempsActuel = SDL_GetTicks();
     
            nbImg++;
     
            if (tempsActuel - tempsPrecedent > 1000)
     
            {
     
               sprintf(infoFPS,"FPS : %ld",nbImg);
    		   SDL_WM_SetCaption(infoFPS, NULL);
     
               nbImg=0;
     
               tempsPrecedent = tempsActuel;
     
            }
     
     
     
     
     
            //DRAW
     
            Draw();
     
            glFlush();
     
            SDL_GL_SwapBuffers();
     
        }
     
     
     
        return 0;
     
    }
     
     
     
    void Draw()
     
    {
     
         glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
     
         glMatrixMode( GL_MODELVIEW );
     
         glLoadIdentity( );
     
     
     
     
    }
     
     
     
    void Quit()
     
    {
     
    	SDL_Quit();
    	exit(0);
     
    }
    La compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [XT95@localhost tmp]$ make
    g++ -o main.o -c main.cpp
    main.cpp: In function ‘int main(int, char**)’:
    main.cpp:46: erreur: ‘glCreateShaderObject’ was not declared in this scope
    main.cpp:51: erreur: ‘glAttach’ was not declared in this scope
    make: *** [main.o] Erreur 1
    Voila. Il y a un truc spécial a inclure pour les shaders ?
    Merci d'avance !

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Les version "extension" de ces fonctions se finissent par "ARB" (glCreateShaderObjectARB, ...). Là tu tentes d'utiliser les fonctions intégrées au core, or à ma connaissance aucun système ne livre les des en-têtes suffisamment récents pour ça (OpenGL 1.5 ?).

  3. #3
    Membre confirmé Avatar de lXT95l
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 106
    Par défaut
    Ce code vient pourtant d'un livre ...
    J'ai regardé des sources sur internet, et ces parfois l'un et parfois l'autre !
    Bref j'ai ouvert mon fichier glew.h et j'ai cherché la bonne syntax !
    Résolu

  4. #4
    Yno
    Yno est déconnecté
    Membre éprouvé Avatar de Yno
    Inscrit en
    Novembre 2005
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 138
    Par défaut
    Le livre en question traite d'OpenGL 2.0, c'est donc normal

    Pourtant il me semble que GLEW nomme les fonctions des extensions sans leur donner le "ARB" à la fin...

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ce code vient pourtant d'un livre ...
    J'ai regardé des sources sur internet, et ces parfois l'un et parfois l'autre
    Aucun livre ni forum ne peut supposer quelle version des en-têtes OpenGL tu as.
    La règle est simple : compare ta version d'OpenGL à celle qui introduit la fonction que tu veux utiliser, si la tienne est inférieure alors il faudra aller chercher l'extension correspondante, suffixée par ARB, EXT, ou que sais-je (voir FAQ pour la signification des suffixes).

    Citation Envoyé par Yno
    Pourtant il me semble que GLEW nomme les fonctions des extensions sans leur donner le "ARB" à la fin...
    S'il utilisait les mêmes noms de fonctions cela provoquerait des conflits.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. connaitre les bases qui existes
    Par nycagi dans le forum Administration
    Réponses: 13
    Dernier message: 08/06/2004, 12h29
  2. Les Bases de Données! tout un monde!!
    Par kikimnet dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/04/2004, 18h26
  3. Lister les bases
    Par Neuromancien2 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 26/01/2004, 09h12
  4. Réponses: 1
    Dernier message: 01/08/2002, 21h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo