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 :

[JOGL+GLSL] Fragment shader et sample2D


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 32
    Points : 19
    Points
    19
    Par défaut [JOGL+GLSL] Fragment shader et sample2D
    Bonjour à tous, de nouveau.

    Ce post prolonge une idée (pas la principale) de ce post : http://www.developpez.net/forums/d74...ecran-texture/

    Je veux appliquer une convolution à diverses textures 2D (en fait, des lettres du TextRenderer de Jogl).
    J'ai ainsi repris un fragment shader glsl utilisant un noyau ainsi qu'un tableau d'offsets pour appliquer la convolution.

    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
    // le noyau
    uniform float kernel[9];
    // les décalages
    uniform vec2 offset[9];
     
    uniform sampler2D colorMap;
    uniform float width;
    uniform float height;
     
    void main(void)
    {
       int i = 0;
       vec4 sum = vec4(0.0);
     
       for( i=0; i<kernel.length(); i++ ){
            vec2 shift = vec2(offset[i].s / width, offset[i].t / height);
            vec4 tmp = texture2D(colorMap, gl_TexCoord[0].st + shift);
            sum += tmp * kernel[i];
       }
     
       gl_FragColor = sum;
    }
    Mon problème est que les uniforms width et height n'existent pas par défaut.
    Je ne peux passer au shader que le kernel et les offsets. Je ne veux pas (car ne le peux pas) passer la largeur de la texture, ni sa hauteur.

    J'ai ainsi deux questions :
    1. Y a-t-il un moyen pour savoir la taille du fragment complet en cours de traitement ? J'ai besoin de savoir quels sont les valeurs des pixels à côté du pixel en cours de traitement.
    S'il n'y a pas moyen de savoir la taille (vu que les primitives rendent ça compliqué), comment faire pour récupérer les données des pixels voisins ?

    2. J'ai la variable uniform sampler2D qui contient bien les données de la texture actuellement en traitement. Cependant, je ne l'ai définie nulle part.
    Puis-je récupérer les données de taille de la texture dans sampler2D ?
    Comment se fait-il que l'objet sampler2D contienne la texture en cours de traitement alors que je n'ai pas envoyé de données uniforme autre que kernel et offset ?

    Dans http://www.opengl.org/sdk/libs/OpenS...l_quickref.pdf, il n'y a pas de telle variable build-in de ce type. A quoi dois-je m'attendre si il y a des variables inconnues ?

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Points : 1 630
    Points
    1 630
    Par défaut
    Utilise les textures de type rectangle, au lieu d'avoir les coordonnées de 0 à 1, tu as les coordonnées de 0 à la taille de la texture donc tu peux accéder aux voisins classiquement comme en C en faisant : colorMap.r + 1.
    Je ne réponds à aucune question par MP, posez vos questions sur le forum adéquat.
    Profils : G+ - LinkedIn

  3. #3
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Points : 1 630
    Points
    1 630
    Par défaut
    Je viens de voir que tu peux acceder a la taille d'une texture depuis GLSL 1.40. De plus dans cette version les textures de types rectangle semblent depreciees... A voir...

    http://www.opengl.org/registry/doc/G...ll.1.40.05.pdf
    Je ne réponds à aucune question par MP, posez vos questions sur le forum adéquat.
    Profils : G+ - LinkedIn

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Ah, merci bien pour l'information. C'est exactement ce dont je pourrais avoir besoin. Mais que faut-il de spécifique pour pouvoir utiliser GLSL 1.40 ?

    Y a-t-il une extension spécifique nécessaire ?
    De plus, le choix de supprimer tous les built-ins ... cela veut-il dire que ça va améliorer les performances car on sera obligé d'envoyer ce dont on a besoin, tout le reste ne sera pas envoyé au shader ?

  5. #5
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Points : 1 630
    Points
    1 630
    Par défaut
    C'est le driver de ta carte graphique qui te dit s'il supporte GLSL 1.4. Je sais plus aussi dans quelle version d'OpenGL il est integre... peut-etre le 3.0.

    Sinon regarde aussi de textFetch, ca a l'air de pouvoir acceder a une texture de type non rectangle de facon classique en C, ca serait peutetre plus interessant pour toi.

    Ensuite pour les built-ins je ne vois pas de quoi tu parles (je connais pas trop les dernieres nouveautes de GLSL j'apprends en meme temps que toi ).
    Je ne réponds à aucune question par MP, posez vos questions sur le forum adéquat.
    Profils : G+ - LinkedIn

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/12/2014, 09h48
  2. glsl pixel précédent dans le fragment shader
    Par coupecoupe dans le forum OpenGL
    Réponses: 8
    Dernier message: 07/12/2011, 09h43
  3. Réponses: 2
    Dernier message: 12/09/2011, 20h19
  4. Réponses: 3
    Dernier message: 14/12/2010, 19h35
  5. [GLSL] Texture2D dans un fragment shader
    Par GloW_on_dub dans le forum OpenGL
    Réponses: 7
    Dernier message: 12/04/2010, 15h50

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