private static void PushCommandBuffer() { if (SFX.subOrder == 0) { SFXRender.PushCommandBufferSub(); } if (SFX.addOrder == 0) { SFXRender.PushCommandBufferOpa(); } else { SFXRender.PushCommandBufferAdd(); } if (SFX.subOrder == 1) { SFXRender.PushCommandBufferSub(); } if (SFX.addOrder == 0) { SFXRender.PushCommandBufferAdd(); } else { SFXRender.PushCommandBufferOpa(); } if (SFX.subOrder == 2) { SFXRender.PushCommandBufferSub(); } }
private unsafe static void TILE(PSX_LIBGPU.TILE *tag, Int32 w, Int32 h) { UInt32 currentABR = SFXKey.GetCurrentABR(tag->code); SFXMesh mesh = SFXRender.GetMesh(currentABR, tag->code); mesh.TILE(tag, w, h); }
private unsafe static void SPRT(PSX_LIBGPU.SPRT *tag, Int32 w, Int32 h) { UInt32 meshKey = SFXKey.GetCurrentABRTex(tag->code, tag->clut) | 67108864u; SFXMesh mesh = SFXRender.GetMesh(meshKey, tag->code); mesh.SPRT(tag, w, h); }
private unsafe static void PolyBGT4(PSX_LIBGPU.POLY_GT4 *tag) { UInt32 meshKey = SFXKey.GetABRTex(tag->code, tag->clut, tag->tpage) | 67108864u | 536870912u; SFXMesh mesh = SFXRender.GetMesh(meshKey, tag->code); mesh.PolyBGT4(tag); }
private unsafe static void PolyFT4(PSX_LIBGPU.POLY_FT4 *tag, UInt32 fillter = 0u) { UInt32 meshKey = SFXKey.GetABRTex(tag->code, tag->clut, tag->tpage) | fillter; SFXMesh mesh = SFXRender.GetMesh(meshKey, tag->code); mesh.PolyFT4(tag); }
private unsafe static void PolyGT4(PSX_LIBGPU.POLY_GT4 *tag) { UInt32 abrtex = SFXKey.GetABRTex(tag->code, tag->clut, tag->tpage); SFXMesh mesh = SFXRender.GetMesh(abrtex, tag->code); mesh.PolyGT4(tag); }
private unsafe static void DR_AREA(PSX_LIBGPU.DR_AREA *obj) { SFXRender.PushCommandBuffer(); Int32 num = (Int32)(obj->code[1] >> 16); if (num != 0) { SFXMeshBase.drOffsetX -= PSXTextureMgr.GEN_TEXTURE_X; SFXMeshBase.drOffsetY -= PSXTextureMgr.GEN_TEXTURE_Y; SFXRender.commandBuffer.Add(new SFXRenderTextureBegin()); } else { SFXRender.commandBuffer.Add(new SFXRenderTextureEnd()); } }
public unsafe static void Update() { SFXRender.commandBuffer.Clear(); if (SFX.SFX_BeginRender()) { SFXRender.primCount = 0; SFXMeshBase.drOffsetX = 0; SFXMeshBase.drOffsetY = 0; SFXRender.meshEmpty = new List <SFXMesh>(SFXRender.meshOrigin); for (Int32 i = 0; i < SFXRender.MESH_MAX; i++) { SFXRender.meshEmpty[i].Begin(); } SFXRender.meshOpa = new List <SFXMesh>(); SFXRender.meshAdd = new List <SFXMesh>(); SFXRender.meshSub = new List <SFXMesh>(); SFXRender.meshTexOpa = new List <SFXMesh>(); SFXRender.meshTexAddPS = new List <SFXMesh>(); SFXRender.meshTexAddBL = new List <SFXMesh>(); SFXRender.meshTexSub = new List <SFXMesh>(); SFXRender.meshLineOpa = new List <SFXMesh>(); SFXRender.meshLineAdd = new List <SFXMesh>(); SFXRender.meshLineSub = new List <SFXMesh>(); SFXMesh.gPosIndex = 0; SFXMesh.gTexIndex = 0; SFXMesh.gColIndex = 0; for (;;) { Int32 num = 0; PSX_LIBGPU.P_TAG *ptr = (PSX_LIBGPU.P_TAG *)((void *)SFX.SFX_GetPrim(ref num)); if (ptr == null) { break; } SFXMesh.zDepth = (Single)(-(Single)num); SFXRender.Add(ptr); SFXRender.primCount++; } SFXRender.PushCommandBuffer(); } }
private unsafe static void DR_MOVE(PSX_LIBGPU.DR_MOVE *obj) { Int32 num = (Int32)(obj->code[1] >> 16); Int32 num2 = (Int32)((Int16)(obj->code[1] & 65535u)); Int32 rw = (Int32)(obj->code[2] >> 16); Int32 rh = (Int32)(obj->code[2] & 65535u); Int32 x = (Int32)(obj->code[3] >> 16); Int32 y = (Int32)(obj->code[3] & 65535u); SFXRender.PushCommandBuffer(); if (num < 320 && num2 < 240) { if (SFX.currentEffectID == 126) { num2 -= 128; } SFXRender.commandBuffer.Add(new SFXScreenShot(num, num2, x, y)); } else { SFXRender.commandBuffer.Add(new SFXMoveImage(num, num2, rw, rh, x, y)); } }
public unsafe static void Add(PSX_LIBGPU.P_TAG *tag) { Int32 num = (Int32)(tag->code & 252); if (num == 32) { UInt32 meshKey = SFXKey.GetCurrentABR(tag->code); SFXMesh mesh = SFXRender.GetMesh(meshKey, tag->code); mesh.PolyF3((PSX_LIBGPU.POLY_F3 *)tag); return; } if (num == 36) { if (SFX.currentEffectID != 149) { SFXRender.PolyFT3((PSX_LIBGPU.POLY_FT3 *)tag); } return; } if (num == 40) { UInt32 meshKey = SFXKey.GetCurrentABR(tag->code); SFXMesh mesh = SFXRender.GetMesh(meshKey, tag->code); mesh.PolyF4((PSX_LIBGPU.POLY_F4 *)tag); return; } if (num == 44) { SFXRender.PolyFT4((PSX_LIBGPU.POLY_FT4 *)tag, 0u); return; } if (num == 48) { UInt32 meshKey = SFXKey.GetCurrentABR(tag->code); SFXMesh mesh = SFXRender.GetMesh(meshKey, tag->code); mesh.PolyG3((PSX_LIBGPU.POLY_G3 *)tag); return; } if (num == 52) { SFXRender.PolyGT3((PSX_LIBGPU.POLY_GT3 *)tag); return; } if (num == 56) { UInt32 meshKey = SFXKey.GetCurrentABR(tag->code); SFXMesh mesh = SFXRender.GetMesh(meshKey, tag->code); mesh.PolyG4((PSX_LIBGPU.POLY_G4 *)tag); return; } if (num == 60) { if (SFX.currentEffectID != 126 && SFX.currentEffectID != 149 && SFX.currentEffectID != 395) { SFXRender.PolyGT4((PSX_LIBGPU.POLY_GT4 *)tag); } return; } if (num == 64) { UInt32 meshKey = SFXKey.GetCurrentABR(tag->code) | 134217728u; SFXMesh mesh = SFXRender.GetMesh(meshKey, tag->code); mesh.LineF2((PSX_LIBGPU.LINE_F2 *)tag); return; } if (num == 68) { SFXRender.PolyBFT4((PSX_LIBGPU.POLY_FT4 *)tag); return; } if (num == 72) { SFXRender.PolyBGT4((PSX_LIBGPU.POLY_GT4 *)tag); return; } if (num == 76) { SFXRender.PolyFT4((PSX_LIBGPU.POLY_FT4 *)tag, 33554432u); return; } if (num == 80) { UInt32 meshKey = SFXKey.GetCurrentABR(tag->code) | 134217728u; SFXMesh mesh = SFXRender.GetMesh(meshKey, tag->code); mesh.LineG2((PSX_LIBGPU.LINE_G2 *)tag); return; } if (num == 96) { SFXRender.TILE((PSX_LIBGPU.TILE *)tag, (Int32)((PSX_LIBGPU.TILE *)tag)->w, (Int32)((PSX_LIBGPU.TILE *)tag)->h); return; } if (num == 100) { SFXRender.SPRT((PSX_LIBGPU.SPRT *)tag, (Int32)((PSX_LIBGPU.SPRT *)tag)->w, (Int32)((PSX_LIBGPU.SPRT *)tag)->h); return; } if (num == 104) { SFXRender.TILE((PSX_LIBGPU.TILE *)tag, 1, 1); return; } if (num == 112) { SFXRender.TILE((PSX_LIBGPU.TILE *)tag, 8, 8); return; } if (num == 116) { SFXRender.SPRT((PSX_LIBGPU.SPRT *)tag, 8, 8); return; } if (num == 120) { SFXRender.TILE((PSX_LIBGPU.TILE *)tag, 16, 16); return; } if (num != 124) { switch (tag->code) { case 225: if (tag->getLen() == 1u) { SFXRender.DR_TPAGE((PSX_LIBGPU.DR_TPAGE *)tag); } else { SFXRender.DR_TPAGE((PSX_LIBGPU.DR_TPAGE *)tag); } break; case 228: SFXRender.DR_AREA((PSX_LIBGPU.DR_AREA *)tag); break; case 229: SFXRender.DR_OFFSET((PSX_LIBGPU.DR_OFFSET *)tag); break; case 231: if (SFX.currentEffectID != 395 && SFX.currentEffectID != 126) { SFXRender.DR_MOVE((PSX_LIBGPU.DR_MOVE *)tag); } break; } return; } SFXRender.SPRT((PSX_LIBGPU.SPRT *)tag, 16, 16); }