Dans mon moteur, je charge des shaders Cg à partir de paires de fichiers vertex/pixel shader. J'aimerais pouvoir empiler des shaders pour les combiner (éclairage + matériel, etc.). A part de briser les shaders en fonctions séparées et ensuite en créant une seule chaîne de script shader, connaissez-vous de bonnes manières d'empiler différents shaders dans Cg?Empilage des shaders Cg
Répondre
Cela ressemble un peu à ce que vous voulez est similaire à la fonctionnalité de liaison de shader dynamique dans DirectX 11? La fonction d'interface de Cg vous permet d'accomplir des choses simples. Il vous permet de reconfigurer les shaders afin de pouvoir facilement et proprement faire des choses comme changer la façon dont l'éclairage est calculé ou changer le type de matériau. Par exemple, supposons que vous souhaitiez écrire un shader, mais que vous deviez pouvoir modifier la façon dont l'éclairage est calculé. Vous pouvez définir une interface Light qui a une fonction qui calcule la lumière d'une manière ou d'une autre. Ailleurs, vous implémentez l'interface Light comme, par exemple, CoolLight et UberLight. Lors de l'exécution, vous pouvez spécifier quelle implémentation de l'interface Light doit être utilisée, à peu près de la même manière que vous spécifiez d'autres paramètres.
Pour voir si c'est ce que vous voulez, je vous recommande de consulter le manuel utilisateur Cg (http://developer.download.nvidia.com/cg/Cg_2.2/CgUsersManual.pdf). Si vous recherchez "Shared Parameters and Interfaces", il y a un petit exemple.
- 1. Direct3D 10 et la gestion des shaders
- 2. GLSL: activer/désactiver texturing + shaders
- 3. Comment créer une image CG avec des données RVB?
- 4. Accès aux variables d'état OpenGL dans Cg
- 5. Et Ou empilage des conditions en Javascript (si $ 1 && ($ 2 || $ 3))
- 6. Photoshop mode de mélange à OpenGL ES sans shaders
- 7. Pourquoi ne puis-je pas connaître l'état des voyants OpenGL dans GLSL?
- 8. Comment obtenir la version de pixel shaders à partir de .NET?
- 9. CUDA, OpenCL, PGI, etc .... mais qu'est-il arrivé à GLSL et Cg?
- 10. Est-ce que les pixel shaders peuvent être utilisés lors du rendu sur une surface hors écran?
- 11. Détection de collision avec des primitives générées matériellement
- 12. Lerp entre deux points CGP pour obtenir des valeurs de tous les pixels entre?
- 13. Est-il possible d'utiliser des coordonnées de texture/matrice avec des sprites point OpenGL?
- 14. Y a-t-il une traduction ftransform() de GLSL en HLSL?
- 15. Langages de programmation SIMD
- 16. Programmation Jogl Shader
- 17. Effet d'ombrage d'occlusion ambiante dans WPF?
- 18. Où effectuer la validation des arguments en JavaScript?
- 19. Authentification des rôles, des membres, des profils, des principaux et des formulaires
- 20. Solution de création de modèles d'e-mail pour le C#
- 21. Édition basée sur un nœud
- 22. Applets Java avec des graphiques 3D accélérés par le matériel? OpenGL et/ou DirectX
- 23. Que se passe lorsque vous effectuez des tâches à des champs ou des propriétés des propriétés
- 24. Dois-je stocker des objets entiers ou des pointeurs sur des objets dans des conteneurs?
- 25. iPhone OS 3.0 + OpenGL ES 2.0. Est-ce que quelqu'un voit mieux anti-aliasing?
- 26. Verbose GLSL Shader compiler sur Intel
- 27. Pourquoi mon script Perl s'arrête-t-il si le module CGI est utilisé après la lecture de stdin sur Windows?
- 28. Configuration des répertoires et des chemins Smarty
- 29. Insérer des caractères dans des cellules existantes
- 30. jQuery suppression des colonnes et des lignes