+ case 0x02:
+ gpuClearImage(packet);
+ break;
+
+ case 0x20:
+ case 0x21:
+ case 0x22:
+ case 0x23: { // Monochrome 3-pt poly
+ PP driver = gpuPolySpanDrivers[
+ (gpu_unai.blit_mask?1024:0) |
+ Blending_Mode |
+ gpu_unai.Masking | Blending | gpu_unai.PixelMSB
+ ];
+ gpuDrawPolyF(packet, driver, false);
+ } break;
+
+ case 0x24:
+ case 0x25:
+ case 0x26:
+ case 0x27: { // Textured 3-pt poly
+ gpuSetCLUT (gpu_unai.PacketBuffer.U4[2] >> 16);
+ gpuSetTexture(gpu_unai.PacketBuffer.U4[4] >> 16);
+
+ u32 driver_idx =
+ (gpu_unai.blit_mask?1024:0) |
+ Dithering |
+ Blending_Mode | gpu_unai.TEXT_MODE |
+ gpu_unai.Masking | Blending | gpu_unai.PixelMSB;
+
+ if (!FastLightingEnabled()) {
+ driver_idx |= Lighting;
+ } else {
+ if (!((gpu_unai.PacketBuffer.U1[0]>0x5F) && (gpu_unai.PacketBuffer.U1[1]>0x5F) && (gpu_unai.PacketBuffer.U1[2]>0x5F)))
+ driver_idx |= Lighting;
+ }
+
+ PP driver = gpuPolySpanDrivers[driver_idx];
+ gpuDrawPolyFT(packet, driver, false);
+ } break;
+
+ case 0x28:
+ case 0x29:
+ case 0x2A:
+ case 0x2B: { // Monochrome 4-pt poly
+ PP driver = gpuPolySpanDrivers[
+ (gpu_unai.blit_mask?1024:0) |
+ Blending_Mode |
+ gpu_unai.Masking | Blending | gpu_unai.PixelMSB
+ ];
+ gpuDrawPolyF(packet, driver, true); // is_quad = true
+ } break;
+
+ case 0x2C:
+ case 0x2D:
+ case 0x2E:
+ case 0x2F: { // Textured 4-pt poly
+ gpuSetCLUT (gpu_unai.PacketBuffer.U4[2] >> 16);
+ gpuSetTexture(gpu_unai.PacketBuffer.U4[4] >> 16);
+
+ u32 driver_idx =
+ (gpu_unai.blit_mask?1024:0) |
+ Dithering |
+ Blending_Mode | gpu_unai.TEXT_MODE |
+ gpu_unai.Masking | Blending | gpu_unai.PixelMSB;
+
+ if (!FastLightingEnabled()) {
+ driver_idx |= Lighting;
+ } else {
+ if (!((gpu_unai.PacketBuffer.U1[0]>0x5F) && (gpu_unai.PacketBuffer.U1[1]>0x5F) && (gpu_unai.PacketBuffer.U1[2]>0x5F)))
+ driver_idx |= Lighting;
+ }
+
+ PP driver = gpuPolySpanDrivers[driver_idx];
+ gpuDrawPolyFT(packet, driver, true); // is_quad = true
+ } break;
+
+ case 0x30:
+ case 0x31:
+ case 0x32:
+ case 0x33: { // Gouraud-shaded 3-pt poly
+ //NOTE: The '129' here is CF_GOURAUD | CF_LIGHT, however
+ // this is an untextured poly, so CF_LIGHT (texture blend)
+ // shouldn't apply. Until the original array of template
+ // instantiation ptrs is fixed, we're stuck with this. (TODO)
+ PP driver = gpuPolySpanDrivers[
+ (gpu_unai.blit_mask?1024:0) |
+ Dithering |
+ Blending_Mode |
+ gpu_unai.Masking | Blending | 129 | gpu_unai.PixelMSB
+ ];
+ gpuDrawPolyG(packet, driver, false);
+ } break;
+
+ case 0x34:
+ case 0x35:
+ case 0x36:
+ case 0x37: { // Gouraud-shaded, textured 3-pt poly
+ gpuSetCLUT (gpu_unai.PacketBuffer.U4[2] >> 16);
+ gpuSetTexture (gpu_unai.PacketBuffer.U4[5] >> 16);
+ PP driver = gpuPolySpanDrivers[
+ (gpu_unai.blit_mask?1024:0) |
+ Dithering |
+ Blending_Mode | gpu_unai.TEXT_MODE |
+ gpu_unai.Masking | Blending | ((Lighting)?129:0) | gpu_unai.PixelMSB
+ ];
+ gpuDrawPolyGT(packet, driver, false);
+ } break;
+
+ case 0x38:
+ case 0x39:
+ case 0x3A:
+ case 0x3B: { // Gouraud-shaded 4-pt poly
+ // See notes regarding '129' for 0x30..0x33 further above -senquack
+ PP driver = gpuPolySpanDrivers[
+ (gpu_unai.blit_mask?1024:0) |
+ Dithering |
+ Blending_Mode |
+ gpu_unai.Masking | Blending | 129 | gpu_unai.PixelMSB
+ ];
+ gpuDrawPolyG(packet, driver, true); // is_quad = true
+ } break;
+
+ case 0x3C:
+ case 0x3D:
+ case 0x3E:
+ case 0x3F: { // Gouraud-shaded, textured 4-pt poly
+ gpuSetCLUT (gpu_unai.PacketBuffer.U4[2] >> 16);
+ gpuSetTexture (gpu_unai.PacketBuffer.U4[5] >> 16);
+ PP driver = gpuPolySpanDrivers[
+ (gpu_unai.blit_mask?1024:0) |
+ Dithering |
+ Blending_Mode | gpu_unai.TEXT_MODE |
+ gpu_unai.Masking | Blending | ((Lighting)?129:0) | gpu_unai.PixelMSB
+ ];
+ gpuDrawPolyGT(packet, driver, true); // is_quad = true
+ } break;
+
+ case 0x40:
+ case 0x41:
+ case 0x42:
+ case 0x43: { // Monochrome line
+ // Shift index right by one, as untextured prims don't use lighting
+ u32 driver_idx = (Blending_Mode | gpu_unai.Masking | Blending | (gpu_unai.PixelMSB>>3)) >> 1;
+ PSD driver = gpuPixelSpanDrivers[driver_idx];
+ gpuDrawLineF(packet, driver);
+ } break;
+
+ case 0x48 ... 0x4F: { // Monochrome line strip