mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
softgpu: Implement logic ops.
This commit is contained in:
parent
c957574f90
commit
4e1d2f0cb2
1 changed files with 70 additions and 0 deletions
|
@ -647,6 +647,76 @@ void DrawTriangle(const VertexData& v0, const VertexData& v1, const VertexData&
|
|||
|
||||
u32 new_color = Vec4<int>(prim_color_rgb.r(), prim_color_rgb.g(), prim_color_rgb.b(), prim_color_a).ToRGBA();
|
||||
u32 old_color = GetPixelColor(p.x, p.y);
|
||||
|
||||
// TODO: Is alpha blending still performed if logic ops are enabled?
|
||||
if (gstate.isLogicOpEnabled()) {
|
||||
switch (gstate.getLogicOp()) {
|
||||
case GE_LOGIC_CLEAR:
|
||||
new_color = 0;
|
||||
break;
|
||||
|
||||
case GE_LOGIC_AND:
|
||||
new_color = new_color & old_color;
|
||||
break;
|
||||
|
||||
case GE_LOGIC_AND_REVERSE:
|
||||
new_color = new_color & ~old_color;
|
||||
break;
|
||||
|
||||
case GE_LOGIC_COPY:
|
||||
//new_color = new_color;
|
||||
break;
|
||||
|
||||
case GE_LOGIC_AND_INVERTED:
|
||||
new_color = ~new_color & old_color;
|
||||
break;
|
||||
|
||||
case GE_LOGIC_NOOP:
|
||||
new_color = old_color;
|
||||
break;
|
||||
|
||||
case GE_LOGIC_XOR:
|
||||
new_color = new_color ^ old_color;
|
||||
break;
|
||||
|
||||
case GE_LOGIC_OR:
|
||||
new_color = new_color | old_color;
|
||||
break;
|
||||
|
||||
case GE_LOGIC_NOR:
|
||||
new_color = ~(new_color | old_color);
|
||||
break;
|
||||
|
||||
case GE_LOGIC_EQUIV:
|
||||
new_color = ~(new_color ^ old_color);
|
||||
break;
|
||||
|
||||
case GE_LOGIC_INVERTED:
|
||||
new_color = ~old_color;
|
||||
break;
|
||||
|
||||
case GE_LOGIC_OR_REVERSE:
|
||||
new_color = new_color | ~old_color;
|
||||
break;
|
||||
|
||||
case GE_LOGIC_COPY_INVERTED:
|
||||
new_color = ~new_color;
|
||||
break;
|
||||
|
||||
case GE_LOGIC_OR_INVERTED:
|
||||
new_color = ~new_color | old_color;
|
||||
break;
|
||||
|
||||
case GE_LOGIC_NAND:
|
||||
new_color = ~(new_color & old_color);
|
||||
break;
|
||||
|
||||
case GE_LOGIC_SET:
|
||||
new_color = 0xFFFFFFFF;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
new_color = (new_color & ~gstate.getColorMask()) | (old_color & gstate.getColorMask());
|
||||
|
||||
SetPixelColor(p.x, p.y, new_color);
|
||||
|
|
Loading…
Add table
Reference in a new issue