2017-09-18 4 views
0

Il peut y avoir un moyen plus facile de le faire, je peux le faire avec un shader j'imagine, mais je me sens comme le réglage de la fonction de mélange est plus simple.Fonction de fusion OpenGL pour copier RBG/ignorer Alpha?

Shader serait peut-être gl_FragColor = vec4(texture.rgb, 0);

Pour une raison, je dois avoir un essarts rempli OIR avec une texture transparente (0). De cette façon, les pixels du FBO sont visuellement transparents, mais contiennent les valeurs RVB de la texture.

Il est difficile d'expliquer, mais il est essentiellement un glClear() mais avec une texture plutôt que d'une couleur unie. Y a-t-il une combinaison de fonctions src/dst combinant cela?

Fondamentalement, il ne devrait pas importer ce que l'OIR ressemble à l'avance. Je veux ensuite lui donner une texture, mais puisque je la restitue avec alpha 0, cela ne remplace pas les pixels FBO existants.

+0

Je pense que je ne comprendre complètement la question, mais peut-être [ 'glColorMask'] (https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glColorMask.xhtml) vous aidera. – Rabbid76

Répondre

3

Si vous voulez vraiment faire via le mélange, vous pouvez le faire via les facteurs de mélange séparés introduits initialement dans GL_EXT_blend_func_separate (promu functionalitiy de base OpenGL dans la version 2.0):

glEnable(GL_BLEND); 
glBlendFuncSeparate(GL_ONE, GL_ZERO, GL_ZERO, GL_ZERO); 
glBlendEquation(GL_ADD); // is the default anyway