Ejemplo n.º 1
0
        }                                     //number of shaders in the section

        public void Read(BinaryReader br)
        {
            Name     = FxcFile.ReadString(br); //usually "NULL"
            Unk1Byte = br.ReadByte();
            Unk2Byte = br.ReadByte();
            Unk3Uint = br.ReadUInt32();
        }
Ejemplo n.º 2
0
 public void Read(BinaryReader br)
 {
     u003  = br.ReadUInt32();        //176, 16        //256
     us001 = br.ReadUInt16();        //6, 5
     us002 = br.ReadUInt16();        //6, 12
     us003 = br.ReadUInt16();        //6, 5
     us004 = br.ReadUInt16();        //6, 5
     us005 = br.ReadUInt16();        //6, 5
     us006 = br.ReadUInt16();        //6, 5
     Name  = FxcFile.ReadString(br); // <fxc name> _locals   //"rage_matrices", "misc_globals", "lighting_globals", "more_stuff"
     JenkIndex.Ensure(Name);         //why not :P
 }
Ejemplo n.º 3
0
        public void Read(BinaryReader br)
        {
            Name = FxcFile.ReadString(br); //"draw", "deferred_draw", etc..

            PassCount = br.ReadByte();     //
            if (PassCount > 0)
            {
                Passes = new FxcPass[PassCount];
                for (int i = 0; i < PassCount; i++)
                {
                    FxcPass p = new FxcPass();
                    p.Read(br);
                    Passes[i] = p;
                }
            }
        }
Ejemplo n.º 4
0
        public void Read(BinaryReader br)
        {
            Name = FxcFile.ReadString(br);
            Type = br.ReadByte();
            switch (Type)
            {
            case 0:
                Value = br.ReadUInt32();
                break;

            case 1:
                Value = br.ReadSingle();
                break;

            case 2:
                Value = FxcFile.ReadString(br);
                break;

            default:
                break;
            }
        }
Ejemplo n.º 5
0
        public void Read(BinaryReader br)
        {
            b0          = br.ReadByte(); //5
            b1          = br.ReadByte(); //0,1
            b2          = br.ReadByte(); //19    //17
            b3          = br.ReadByte(); //2     //27
            Name1       = FxcFile.ReadString(br);
            Name2       = FxcFile.ReadString(br);
            b4          = br.ReadByte();   //32
            b5          = br.ReadByte();   //
            b6          = br.ReadByte();   //
            b7          = br.ReadByte();   //
            CBufferName = br.ReadUInt32(); //hash


            ParamCount = br.ReadByte(); //1
            if (ParamCount > 0)
            {
                List <FxcVariableParam> parms = new List <FxcVariableParam>();
                for (int i = 0; i < ParamCount; i++)
                {
                    FxcVariableParam parm = new FxcVariableParam();
                    parm.Read(br);
                    parms.Add(parm);
                }
                Params = parms.ToArray();
            }

            ValueCount = br.ReadByte();
            if (ValueCount > 0)
            {
                Values = new float[ValueCount];
                for (int i = 0; i < ValueCount; i++)
                {
                    Values[i] = br.ReadSingle(); //TODO: how to know what types to use?
                }
            }


            #region debug validation

            switch (b0)
            {
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
            case 11:
            case 14:
            case 17:
            case 20:
                break;

            case 15:
            case 18:
            case 19:
            case 21:
            case 22:
                break;

            default:
                break;
            }

            switch (b1)
            {
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 8:
            case 12:
            case 254:
            case 255:
                break;

            case 14:
            case 16:
            case 24:
            case 40:
            case 117:
                break;

            default:
                break;
            }

            switch (CBufferName)
            {
            case 2165770756:
            case 3458315595:
            case 1059338858:
            case 3779850771:
            case 2988188919:
            case 713939274:
            case 3369176576:
            case 1927486087:
            case 4135739982:
            case 1032736383:
            case 3084860475:
            case 3844532749:
            case 3635751376:
            case 2172777116:
            case 4255900365:
            case 2725372071:
            case 3661207622:
            case 4213364555:
            case 1519748817:
            case 118958736:
            case 2397841684:
            case 1340365912:
            case 2531859994:
            case 0:
                break;

            case 482774302:
            case 2300268537:
            case 2714887816:
            case 2049538169:
            case 1316881611:
            case 3367312321:
            case 4017086211:
            case 3743503190:
            case 938670440:
            case 2782027784:
            case 2865440919:
            case 2384984532:
            case 486482914:
            case 3162602184:
            case 1834530379:
            case 1554708878:
            case 1142002603:
            case 3049310097:
            case 764124013:
            case 2526104914:
            case 1561144077:
            case 970248680:
            case 3899781660:
            case 1853474951:
            case 2224880237:
            case 3766848419:
            case 2718810031:
            case 115655537:
            case 4224116138:
            case 3572088685:
            case 1438660507:
            case 4092686193:
            case 871214106:
            case 2121263542:
            case 3502503908:
            case 586499600:
            case 4046148196:
            case 2999112456:
            case 2355014976:
            case 579364910:
            case 2193272593:
            case 1641847936:
            case 1286180849:
            case 3291504934:
            case 278397346:
            case 3346871633:
            case 4091106477:
            case 832855465:
            case 3616072140:
            case 3977262900:
            case 2062541604:
            case 950211059:
            case 2380663322:
            case 2783177544:
            case 1100625170:
            case 1279142172:
            case 1004646027:
            case 2092585241:
            case 4165560568:
            case 2651790209:
            case 3453406875:
            case 488789527:
            case 3375019131:
            case 519785780:
            case 729415208:
            case 556501613:
            case 2829744882:
            case 1778702372:
            case 2564407213:
            case 3291498326:
            case 1275817784:
            case 962813362:
            case 2020034807:
            case 2017746823:
            case 1237102223:
            case 4029270406:
            case 673228990:
            case 201854132:
            case 1866965008:
            case 957783816:
            case 2522030664:
            case 1910375705:
            case 2656344872:
                break;

            default:
                break;
            }

            switch (b3)
            {
            case 0:
            case 1:
            case 2:
            case 3:
            case 10:
            case 11:
            case 17:
            case 19:
            case 27:
            case 34:
                break;

            case 6:
            case 16:
            case 26:
            case 32:
            case 33:
            case 35:
            case 39:
            case 49:
            case 51:
                break;

            default:
                break;
            }


            #endregion
        }
Ejemplo n.º 6
0
        public bool Read(BinaryReader br, bool exbyteflag, bool vsgsps)
        {
            Offset = br.BaseStream.Position;

            Name = FxcFile.ReadString(br);

            if (Name.Length == 0)
            {
                Name       = FxcFile.ReadString(br); //why  (seems to be GS only)
                exbyteflag = true;
            }


            Params = FxcFile.ReadStringArray(br);

            byte bufferCount = br.ReadByte();
            var  buffers     = new List <FxcShaderBufferRef>();

            for (int e = 0; e < bufferCount; e++)
            {
                FxcShaderBufferRef ext = new FxcShaderBufferRef();
                ext.Name       = FxcFile.ReadString(br);
                ext.Unk0Ushort = br.ReadUInt16();
                buffers.Add(ext);
            }
            Buffers = buffers.ToArray();

            byte exbyte = 0;

            if (exbyteflag)
            {
                exbyte = br.ReadByte(); //not sure what this is used for...
                if ((exbyte != 0))
                {
                }
            }


            uint datalength = br.ReadUInt32();

            if (datalength > 0)
            {
                uint magic_dxbc = br.ReadUInt32();
                if (magic_dxbc != 1128421444) //"DXBC" - directx bytecode header
                {
                    LastError += "Unexpected data found at DXBC header...\r\n";
                    return(false);           //didn't find the DXBC header... abort!
                }
                br.BaseStream.Position -= 4; //wind back because dx needs that header

                ByteCode = br.ReadBytes((int)datalength);

                if (vsgsps)
                {
                    VersionMajor = br.ReadByte(); //4,5 //appears to be shader model version
                    VersionMinor = br.ReadByte(); //perhaps shader minor version
                }

                //try
                //{
                //    ByteCodeObj = new ShaderBytecode(ByteCode);
                //    ShaderProfile = ByteCodeObj.GetVersion();
                //    switch (ShaderProfile.Version)
                //    {
                //        case ShaderVersion.VertexShader:
                //        case ShaderVersion.PixelShader:
                //        case ShaderVersion.GeometryShader:
                //            VersionMajor = br.ReadByte();//4,5 //appears to be shader model version
                //            VersionMinor = br.ReadByte(); //perhaps shader minor version
                //            break;
                //        default:
                //            VersionMajor = (byte)ShaderProfile.Major;
                //            VersionMinor = (byte)ShaderProfile.Minor;
                //            break;
                //    }
                //    //do disassembly last, so any errors won't cause the file read to break
                //    Disassembly = ByteCodeObj.Disassemble();
                //}
                //catch (Exception ex)
                //{
                //    LastError += ex.ToString() + "\r\n";
                //    return false;
                //}
            }
            else
            {
            }
            return(true);
        }