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 :

Envoi d'une texture à un uniform du fragment shader (GLSL 140)


Sujet :

OpenGL

  1. #1
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut Envoi d'une texture à un uniform du fragment shader (GLSL 140)
    Bonjour,

    Je souhaiterais envoyer un ensemble de donnée à un fragment shader, sous la forme d'une texture. À ce que j'ai compris, je suis sensé demander un index de texture, l'activer, y lier mes données, et finalement lier l'index à l'uniform. En pratique je ne récupère que des valeurs nuls du coté de mon shader.

    J'ai sans nul doute zappé quelque chose, et je viens donc solliciter votre aide

    Donc, le code du fragment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #version 140
     
    in vec3 color; //Object color
    in vec3 light; //Light (works, not very well but it works)
    in vec4 texCoord; //Texture coordinates
    uniform sampler1D tex;
     
    void main()
    {
        vec3 Color = vec3(texture(tex, 0));
        gl_FragColor = vec4(Color * light * 1.9, 1.0);
    }
    Voici un exemple de ce que j'ai tenté coté OpenGL :
    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
        GLint location = glGetUniformLocation(programID, "tex");
     
        //Ask a new texture id
        GLuint texID;
        glGenTextures(1, &texID);
     
        //Activate texture
        glActiveTexture(GL_TEXTURE0 + texID);
     
        //Load texture
        //As you can see, it is != 0 :)
        ((char*)tex->pixels)[0] = 255;
        ((char*)tex->pixels)[1] = 255;
        glTexImage1D(GL_TEXTURE_1D, 0, GL_R8, 4/*tex->w*/ /*tex->h*/, 0, GL_RED, GL_UNSIGNED_BYTE, tex->pixels);
     
        //Bind texture
        glBindTexture(GL_TEXTURE_1D, texID);
        //Send the ID to the uniform
        glUniform1i(location, texID);
    sans le moindre succès
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  2. #2
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glUniform1i(location, texID);
    Bind le program avant de faire un appel à glUniform.

  3. #3
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Citation Envoyé par oxyde356 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glUniform1i(location, texID);
    Bind le program avant de faire un appel à glUniform.
    Exacte. J'ai rajouté glUseProgram(programID) pour corriger ce point, et je reçoit bien les uniforms d'autres types (par exemple int) dans le fragment shader.

    Mais c'est toujours le noir complet pour ma texture. (Je ne sais pas si ça sert toujours pour les dernières versions d'openGL, mais j'ai aussi testé en ajoutant glEnable(GL_TEXTURE_1D))
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/12/2014, 09h48
  2. Réponses: 3
    Dernier message: 14/12/2010, 19h35
  3. Réponses: 0
    Dernier message: 24/02/2009, 04h36
  4. Réponses: 4
    Dernier message: 19/07/2007, 09h05
  5. Changer l'image d'une texture
    Par alltech dans le forum DirectX
    Réponses: 5
    Dernier message: 21/08/2002, 01h31

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