예제 #1
0
            }                                                   // Raw PICA200 GPU commands

            public static TexEnv Load(Utility utility)
            {
                var te = new TexEnv();

                CGFXDebug.LoadStart(te, utility);

                te.Constant    = (GfxTexEnvConstant)utility.ReadU32();
                te.RawCommands = utility.ReadUInts(6);

                return(te);
            }
예제 #2
0
        private void CalcTextureEnvironmentHash()
        {
            using (MemoryStream MS = new MemoryStream())
            {
                BinaryWriter Writer = new BinaryWriter(MS);

                Writer.Write(FragmentShader.TexEnvBufferColor.ToVector4());

                foreach (GfxTexEnv TexEnv in FragmentShader.TextureEnvironments)
                {
                    Writer.Write(TexEnv.GetBytes());
                }

                TextureEnvironmentHash = HashBuffer(MS.ToArray());
            }
        }
예제 #3
0
        public static FragmentShader Load(Utility utility)
        {
            var fs = new FragmentShader();

            CGFXDebug.LoadStart(fs, utility);

            fs.TexEnvBufferColorF = ColorFloat.Read(utility);

            // Fragment Shader
            fs.FragmentFlags     = utility.ReadU32();
            fs.TranslucencyKind  = (TranslucencyKind)utility.ReadU32();
            fs.FresnelSelector   = (GfxFresnelSelector)utility.ReadU32();
            fs.BumpTexture       = utility.ReadI32();
            fs.BumpMode          = (GfxBumpMode)utility.ReadU32();
            fs.IsBumpRenormalize = utility.ReadU32() == 1;

            // Fragment Lighting
            CGFXDebug.LoadStart($"HEADER of list of FragLightLUTs", utility);
            utility.LoadIndirect(() =>
            {
                CGFXDebug.LoadStart($"List of FragLightLUTs", utility);
                fs.ReflectanceRSampler  = GetFragLightLUT(utility);
                fs.ReflectanceGSampler  = GetFragLightLUT(utility);
                fs.ReflectanceBSampler  = GetFragLightLUT(utility);
                fs.Distribution0Sampler = GetFragLightLUT(utility);
                fs.Distribution1Sampler = GetFragLightLUT(utility);
                fs.FresnelSampler       = GetFragLightLUT(utility);
            });

            fs.TextureEnvironments = new TexEnv[6];
            for (var i = 0; i < fs.TextureEnvironments.Length; i++)
            {
                fs.TextureEnvironments[i] = TexEnv.Load(utility);
            }

            fs.AlphaTestRawCommands = utility.ReadUInts(2);

            fs.FragmentShaderRawCommands = utility.ReadUInts(6);

            return(fs);
        }