Пример #1
0
        ///////////////////////////////////////////////////////////////////////
        //  CParser::ParseAndCopyRenderState

        bool ParseAndCopyRenderState(ERenderPass blockid, BinaryReader br)
        {
            bool bSuccess = false;
            var  startpos = m_stream.Position;

            if (GetRemainingLength() >= /*Marshal.SizeOf<SRenderState>()*/ 720)
            {
                switch (blockid)
                {
                case ERenderPass.RENDER_PASS_MAIN:
                    var temp_renderstatem = new SRenderState();
                    temp_renderstatem.Read(br, StringTable.ToList());
                    Geometry.ABillboardRenderStateMain = temp_renderstatem;
                    break;

                case ERenderPass.RENDER_PASS_DEPTH_PREPASS:
                    var temp_renderstated = new SRenderState();
                    temp_renderstated.Read(br, StringTable.ToList());
                    Geometry.ABillboardRenderStateDepth = temp_renderstated;
                    break;

                case ERenderPass.RENDER_PASS_SHADOW_CAST:
                    var temp_renderstates = new SRenderState();
                    temp_renderstates.Read(br, StringTable.ToList());
                    Geometry.ABillboardRenderStateShadow = temp_renderstates;
                    break;

                default:
                    break;
                }

                if (m_stream.Position - startpos != /*Marshal.SizeOf<SRenderState>()*/ 720)
                {
                    throw new NotImplementedException();
                }
                bSuccess = true;
            }
            //else
            //    CCore::SetError("CParser::ParseAndCopyRenderState, premature end-of-file\n");

            return(bSuccess);
        }
Пример #2
0
        ///////////////////////////////////////////////////////////////////////
        //  CParser::ParseRenderStateBlock

        bool ParseRenderStateBlock(ERenderPass blockid, int nNumStates, BinaryReader br)
        {
            bool bSuccess = false;
            var  startpos = m_stream.Position;
            var  t        = Marshal.SizeOf <SRenderState>();

            if (GetRemainingLength() >= 720 * nNumStates)
            {
                for (int i = 0; i < nNumStates; i++)
                {
                    switch (blockid)
                    {
                    case ERenderPass.RENDER_PASS_MAIN:
                        Geometry.P3dRenderStateMain[i].Read(br, StringTable.ToList());
                        break;

                    case ERenderPass.RENDER_PASS_DEPTH_PREPASS:
                        Geometry.P3dRenderStateDepth[i].Read(br, StringTable.ToList());
                        break;

                    case ERenderPass.RENDER_PASS_SHADOW_CAST:
                        Geometry.P3dRenderStateShadow[i].Read(br, StringTable.ToList());
                        break;

                    default:
                        break;
                    }
                }

                if (m_stream.Position - startpos != 720 * nNumStates)
                {
                    throw new NotImplementedException();
                }
                bSuccess = true;
            }
            //else
            //    CCore::SetError("CParser::ParseRenderStateBlock, premature end-of-file\n");

            return(bSuccess);
        }