*/}}
Parcourir la source

multiply fix?

YimingWu il y a 5 jours
Parent
commit
0dbe5fc4f9
1 fichiers modifiés avec 16 ajouts et 1 suppressions
  1. 16 1
      ourshader.cpp

+ 16 - 1
ourshader.cpp

@@ -536,10 +536,25 @@ vec4 add_over(vec4 colora, vec4 colorb){
 #endif
     return result;
 }
+vec4 multiply_over(vec4 colora, vec4 colorb){
+#ifndef OUR_STRAIGHT_ALPHA
+    colora=(colora.a>0.)?vec4(colora.rgb/colora.a,colora.a):vec4(0.,0.,0.,0.);
+    colorb=(colorb.a>0.)?vec4(colorb.rgb/colorb.a,colorb.a):vec4(0.,0.,0.,0.);
+#endif
+    float afac=colora.a*uAlphaTop/uAlphaBottom;
+    vec4 result=vec4(mix(colorb.rgb,colora.rgb*colorb.rgb,afac),colorb.a);
+#ifndef OUR_STRAIGHT_ALPHA
+    result=vec4(result.rgb*result.a,result.a);
+#endif
+    return result;
+}
 void main() {
     ivec2 px=ivec2(gl_GlobalInvocationID.xy);
     vec4 c1=OurImageLoad(top,px); vec4 c2=OurImageLoad(bottom,px);
-    vec4 c=(uBlendMode==0)?mix_over(c1,c2):add_over(c1,c2);
+    vec4 c=vec4(0.,0.,0.,0.);
+         if(uBlendMode==0) c=mix_over(c1,c2);
+    else if(uBlendMode==1) c=add_over(c1,c2);
+    else if(uBlendMode==2) c=multiply_over(c1,c2);
     OurImageStore(bottom,px,c);
     //OurImageStore(top,px,vec4(1.));
 }