mirror of https://github.com/PCSX2/pcsx2.git
GS-ogl: Add clr3 case for blend mix 2.
When Cs*(Alpha + 1) overflows compensate with adjusting Alpha output for Cd*Alpha.
This commit is contained in:
parent
f478b3959c
commit
58cb6ab728
|
@ -777,10 +777,8 @@ float As = As_rgba.a;
|
|||
#endif
|
||||
|
||||
#if PS_CLR_HW == 1
|
||||
// Replace Af with As so we can do proper compensation for Alpha.
|
||||
#if PS_BLEND_C == 2
|
||||
As_rgba = vec4(Af);
|
||||
#endif
|
||||
// As or Af
|
||||
As_rgba.rgb = vec3(C);
|
||||
// Subtract 1 for alpha to compensate for the changed equation,
|
||||
// if c.rgb > 255.0f then we further need to adjust alpha accordingly,
|
||||
// we pick the lowest overflow from all colors because it's the safest,
|
||||
|
@ -796,6 +794,14 @@ float As = As_rgba.a;
|
|||
// blended value it can be.
|
||||
float color_compensate = 1.0f * (C + 1.0f);
|
||||
Color.rgb -= vec3(color_compensate);
|
||||
#elif PS_CLR_HW == 3
|
||||
// As, Ad or Af clamped.
|
||||
As_rgba.rgb = vec3(C_clamped);
|
||||
// Cs*(Alpha + 1) might overflow, if it does then adjust alpha value
|
||||
// that is sent on second output to compensate.
|
||||
vec3 overflow_check = (Color.rgb - vec3(255.0f)) / 255.0f;
|
||||
vec3 alpha_compensate = max(vec3(0.0f), overflow_check);
|
||||
As_rgba.rgb -= alpha_compensate;
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
|
Loading…
Reference in New Issue