2016-07-24 2 views
2

Hey J'ai actuellement un système OpenGL qui utilise glBlendFunc pour mélangeant le shader diffrent, mais je voudrais faire quelque chose comme çaObtenez la couleur actuelle fragment

fragColor = currentColor * lightAmount; 

J'ai essayé d'utiliser gl_Color mais son PÉRIMÉ et mon moteur sera ne me laisse pas l'utiliser.

+0

pas besoin d'assigner à fragColor puisque j'utilise GLSL 330 si j'assigne juste fragColor à l'éclairage tout monte dans ma scène devient blanc – Swiftprog

+0

Vous ne pouvez pas. Il existe des extensions pour OpenGL ES qui permettent cela sur certaines plates-formes. Voir la question similaire précédente: http://stackoverflow.com/questions/16531185/reading-current-framebuffer. Ou bien, même s'il traite des valeurs de profondeur, est fondamentalement le même: http://stackoverflow.com/questions/23362076/opengl-how-to-access-depth-buffer-values-or-gl-fragcoord-z- vs-rendu-d. –

+0

Quels sont 'currentColor' et' lightAmount' exactement? – peppe

Répondre

4

Selon this document, il n'y a pas d'accès intégré pour la couleur du fragment dans le fragment shader. Ce que vous pouvez faire est de rendre vos passes précédentes dans d'autres textures, d'envoyer ces textures au GPU (en uniformes) et de faire le mélange dans votre dernière passe.

+0

Même solution que j'avais :) – Swiftprog

+0

Comment devrais-je le chargement de la sampler2D? J'ai rendu ma lumière passante et "diffuse" passe en textures séparées puis j'envoie celles-ci à un shader de combinepasses mais je ne suis pas sûr de ce que les texcoords devraient être pour les samplers – Swiftprog

+1

Vous pouvez avoir des texcoords associés au quad que vous rendez, utilisez leurs coordonnées de vertex, ou utilisez gl_FragCoord et la taille de la fenêtre – Zouch