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] Faire passer un tableau en variable uniform


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de robinsondesbois
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2012
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 171
    Par défaut [GLSL] Faire passer un tableau en variable uniform
    Bonjour,

    Je voudrais faire passer un tableau en variable uniform. J'ai un tableau de Vec3 que je voudrais récupérer dans mes shaders.

    Mais je ne peut pas faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    uniform float nbVertex
    uniform vec3[nbVertex]
    car nbVertex n'est pas en const mais je connais sa valeur à la compilation du shader.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 098
    Par défaut
    Si tu connais la valeur avant la compilation du shader, tu pourrais faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uniform vec3[TRUC_A_REMPLACER]
    et faire un replace de TRUC_A_REMPLACER par ton chiffres juste avant de le compiler.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 145
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    En fait, je n'ai pas mémoire qu'il soit possible d'utiliser une taille dynamique. Toutefois, la solution sera de passe la taille maximale possible et de lui passer 'nbVertex' le nombre d'éléments vraiment utilisé dans le tableau.
    'nbVertex' ne pourra et ne devra jamais être plus grand que la taille du tableau, bien sur.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre confirmé Avatar de robinsondesbois
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2012
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 171
    Par défaut
    Cette methode n'est pas très optimisé mais si on ne peut pas allouer des tableaux, je n'est pas le choix.

    Merci.

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 618
    Par défaut
    Salut,

    Et passer par une texture1D RGB32F ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    uniform int nbVertex;
    sampler1D vertices;
     
    int idVertex;
    // très important le +0.5 pour bien tomber au milieu du pixel.
    vec3 vertex = texture(vertices, (idVertex+0.5) / nbVertex).xyz;

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    d'après l'orange book, tu devrais peut-être pouvoir faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    uniform vec3 vectors[] // taille dynamique non connue
     
    ...
    vectors[nbVec] // maintenant la taille est connue
    Bien sûr tu ne peux le faire qu'une seule fois, une fois la taille fixée, il est impossible de la refixer ou de la supprimer.

    edit: en fait non, c'est fait à la compilation du shader
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    uniform vec3 vectors[];
    // uniform vec3 vectors[10]; // vectors est maintenant de taille 10
    vectors[2] = vec3(0,0,0); // vectors est maintenant de taille 3
    vectors[7] = vec3(1, 1, 1); // vectors est maintenant de taille 8
    Est-il possible de remplacer nbVertex à la compilation ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/06/2013, 12h26
  2. Réponses: 4
    Dernier message: 21/09/2008, 01h24
  3. Réponses: 2
    Dernier message: 03/12/2006, 12h37
  4. Faire une recherche de texte dans un tableau de variable
    Par alexxx69 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/02/2006, 13h12
  5. faire passer une variable d'une fct js à une page php
    Par harlock59 dans le forum Langage
    Réponses: 1
    Dernier message: 25/11/2005, 14h41

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