コード例 #1
0
 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();
     }
 }
コード例 #2
0
ファイル: PSXGPU.cs プロジェクト: ArtReeX/memoria
    public unsafe static PSXGPU.FF9DebugPrimType ff9debugGetPrimType(PSX_LIBGPU.P_TAG *ObjPtr, Boolean CheckLength)
    {
        UInt32 len = ObjPtr->getLen();

        if (ObjPtr != null)
        {
            if (CheckLength && len == 0u)
            {
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_OTENTRY);
            }
            if (ObjPtr->code == 128 && len == 4u)
            {
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_OTEND);
            }
            if ((ObjPtr->code & 252) == 32)
            {
                if (CheckLength && len != 4u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_POLY_F3);
            }
            else if ((ObjPtr->code & 252) == 36)
            {
                if (CheckLength && len != 7u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_POLY_FT3);
            }
            else if ((ObjPtr->code & 252) == 48)
            {
                if (CheckLength && len != 6u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_POLY_G3);
            }
            else if ((ObjPtr->code & 252) == 52)
            {
                if (CheckLength && len != 9u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_POLY_GT3);
            }
            else if ((ObjPtr->code & 252) == 40)
            {
                if (CheckLength && len != 5u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_POLY_F4);
            }
            else if ((ObjPtr->code & 252) == 44)
            {
                if (CheckLength && len != 9u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_POLY_FT4);
            }
            else if ((ObjPtr->code & 252) == 56)
            {
                if (CheckLength && len != 8u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_POLY_G4);
            }
            else if ((ObjPtr->code & 252) == 60)
            {
                if (CheckLength && len != 12u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_POLY_GT4);
            }
            else if ((ObjPtr->code & 252) == 116)
            {
                if (CheckLength && len != 3u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_SPRT_8);
            }
            else if ((ObjPtr->code & 252) == 124)
            {
                if (CheckLength && len != 3u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_SPRT_16);
            }
            else if ((ObjPtr->code & 252) == 100)
            {
                if (CheckLength && len != 4u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_SPRT);
            }
            else if ((ObjPtr->code & 252) == 104)
            {
                if (CheckLength && len != 2u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_TILE_1);
            }
            else if ((ObjPtr->code & 252) == 112)
            {
                if (CheckLength && len != 2u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_TILE_8);
            }
            else if ((ObjPtr->code & 252) == 120)
            {
                if (CheckLength && len != 2u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_TILE_16);
            }
            else if ((ObjPtr->code & 252) == 96)
            {
                if (CheckLength && len != 3u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_TILE);
            }
            else if ((ObjPtr->code & 252) == 64)
            {
                if (CheckLength && len != 3u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_LINE_F2);
            }
            else if ((ObjPtr->code & 252) == 80)
            {
                if (CheckLength && len != 4u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_LINE_G2);
            }
            else if ((ObjPtr->code & 252) == 72)
            {
                if (CheckLength && len != 5u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_LINE_F3);
            }
            else if ((ObjPtr->code & 252) == 88)
            {
                if (CheckLength && len != 7u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_LINE_G3);
            }
            else if ((ObjPtr->code & 252) == 76)
            {
                if (CheckLength && len != 6u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_LINE_F4);
            }
            else if ((ObjPtr->code & 252) == 92)
            {
                if (CheckLength && len != 9u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                }
                return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_LINE_G4);
            }
            else
            {
                if (ObjPtr->code == 226)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_DR_TWIN);
                }
                if (ObjPtr->code == 228 && len == 2u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_DR_AREA);
                }
                if (ObjPtr->code == 229)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_DR_OFFSET);
                }
                if (ObjPtr->code == 225 && len == 2u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_DR_MODE);
                }
                if (ObjPtr->code == 227 && len == 9u)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_DR_ENV);
                }
                if (ObjPtr->code == 231)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_DR_MOVE);
                }
                if (ObjPtr->code == 160)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_DR_LOAD);
                }
                if (ObjPtr->code == 225)
                {
                    if (CheckLength && len != 1u)
                    {
                        return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_MARGE);
                    }
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_DR_TPAGE);
                }
                else if (ObjPtr->code == 230)
                {
                    return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_DR_STP);
                }
            }
        }
        return(PSXGPU.FF9DebugPrimType.FF9DEBUG_PRIMTYPE_UNKNOWN);
    }
コード例 #3
0
    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);
    }