Forums Développement Multimédia

Aller au contenu

- - - - -

AGAL // Se servir des vertex/fragment constant

CODE Actionscript

5 réponses à ce sujet

#1 Dermiste

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 176 messages

Posté 17 April 2012 - 20:45 PM

Hello!

Basé sur ces tutos, http://blogs.aerys.i...aders-workshop/, j'essaye de coder mes propres shader un peu complexes.

Je me heurte à un soucis plutôt innatendu, je n'arrive pas à utiliser de données stockée dans des constantes!

Voici mon code agal:
         vertexShaderAssembler.assemble( Context3DProgramType.VERTEX,
                "m44 op, va0, vc0 \n"
            );
            var fragmentShaderAssembler : AGALMiniAssembler= new AGALMiniAssembler();
            fragmentShaderAssembler.assemble( Context3DProgramType.FRAGMENT,
                "mov oc, fc0 \n"
            );


Avec
         context3D.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0, m, true);
                   
            context3D.setProgramConstantsFromVector(Context3DProgramType.FRAGMENT, 0, new Vector.<Number>([1.0,0.0,0.0,1.0]));  

Et mon cube est noir ... et j'ai aucune idée de pourquoi !
Est-ce que il me manque quelque chose?

Ce-joint un zip avec le code au complet.

D'avance merci

Fichier(s) joint(s)



#2 Jean-Marc Le Roux

    Ceinture Noire

  • Minko
  • PipPipPipPipPipPipPip
  • 210 messages

Posté 17 April 2012 - 21:47 PM

Je ne sais pas du tout :) par contre, en AS3 ça serait beaucoup plus simple et là, je pourrais sûrement t'aider plus facilement...

#3 Dermiste

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 176 messages

Posté 18 April 2012 - 10:09 AM

Dommage :( dans ton code je vois que tu fais pareil, tu règles une constante(ambient color) dont tu te sers ensuite dans le shader!
J'ai regardé un peu le code Minko et ya pas traitement particulier pour cette constante là pour qu'on puisse s'en servir via fc pour le fragment ou vc pour le vertex ...

C'est étrange tout ça! :(

Quelqu'un sait?

#4 Jean-Marc Le Roux

    Ceinture Noire

  • Minko
  • PipPipPipPipPipPipPip
  • 210 messages

Posté 18 April 2012 - 18:11 PM

En fait lorsque tu écris le shader en AS3 c'est le compilateur qui s'occupe de l'allocation. Il alloue le minimum de chose dans les bons buffers. Par exemple pour (1, 0, 0, 1) l'allocateur va juste alouer (1, 0) et s'arranger pour le lire correctement dans le shader. L'allocation de mémoire c'est bien plus compliqué que de juste décider d'un offset arbitrairement dans un buffer...

Il y'a pas mal de choses à prendre en compte comme les opérations effectuées (si elles sont component wise ou pas par exemple) ou les registres effectivement utilisés. Au final, l'allocateur fera toujours un meilleur travail que notre pauvre petit cerveau. Et surtout, il pourra faire cette allocation dynamique.

Une fois l'allocation faite, des "tables d'allocations" permettent de changer les valeurs dynamiquement. La encore, ces valeurs qu'on a appelées des "paramètres" sont allouées différemment. Ensuite, l'API de data binding permet d'utiliser ces tables de manières transparentes depuis le scene graph.

Donc quand tu fais de l'AGAL, c'est pas juste "pas pratique". C'est aussi pas du tout performant. Et encore, là on parle juste de l'allocation mémoire... Plus tu avances, pire c'est...

Ensuite pour ton problème, tu devrais remplacer


new Vector.<Number>([...
 

par


new <Number>[...
 

Ton problème doit être là :)

Modifié par Jean-Marc Le Roux, 18 April 2012 - 18:14 PM.


#5 Dermiste

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 176 messages

Posté 18 April 2012 - 19:25 PM

Mais yes !!! ça marche ! :)

Oui je sais je commence par le plus performant, mais c'est juste histoire de comprendre la base de tout ça, pour pas me faire servir une API de fou sur un plateau sans comprendre sur quoi elle se base.

Merci beaucoup en tout cas :)

#6 Jean-Marc Le Roux

    Ceinture Noire

  • Minko
  • PipPipPipPipPipPipPip
  • 210 messages

Posté 19 April 2012 - 16:05 PM

Citation

Oui je sais je commence par le plus performant, mais c'est juste histoire de comprendre la base de tout ça, pour pas me faire servir une API de fou sur un plateau sans comprendre sur quoi elle se base.

C'est pas une API. C'est un compilateur :)

Tu as déjà fait des SWFs avec juste du bytecode à la main ou alors des applications en assembleur x86? Tu dirais que l'as3 et le compilateur Flex c'est une API ? :) Là c'est pareil... Après c'est sûr que c'est toujours mieux de savoir comment ça fonctionne en dessous. Mais je veux surtout essayer de faire comprendre qu'il y'a encore plus à comprendre sur comment ça se passe au dessus. Bien plus...



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP