コード例 #1
0
        public static EffectHeader Parse(BytecodeReader chunkReader)
        {
            var result = new EffectHeader();

            result.Version                = ShaderVersion.ParseFX(chunkReader);
            result.ConstantBuffers        = chunkReader.ReadUInt32();
            result.GlobalVariables        = chunkReader.ReadUInt32();
            result.ObjectCount            = chunkReader.ReadUInt32();
            result.SharedConstantBuffers  = chunkReader.ReadUInt32();
            result.SharedGlobalVariables  = chunkReader.ReadUInt32();
            result.SharedObjectCount      = chunkReader.ReadUInt32();
            result.Techniques             = chunkReader.ReadUInt32();
            result.FooterOffset           = chunkReader.ReadUInt32();
            result.StringCount            = chunkReader.ReadUInt32();
            result.LocalTextureCount      = chunkReader.ReadUInt32();
            result.DepthStencilStateCount = chunkReader.ReadUInt32();
            result.BlendStateCount        = chunkReader.ReadUInt32();
            result.RasterizerStateCount   = chunkReader.ReadUInt32();
            result.LocalSamplerCount      = chunkReader.ReadUInt32();
            result.RenderTargetViewCount  = chunkReader.ReadUInt32();
            result.DepthStencilViewCount  = chunkReader.ReadUInt32();
            result.ShaderCount            = chunkReader.ReadUInt32();
            result.InlineShaderCount      = chunkReader.ReadUInt32();
            if (result.Version.MajorVersion >= 5)
            {
                result.GroupCount                    = chunkReader.ReadUInt32();
                result.UAVCount                      = chunkReader.ReadUInt32();
                result.InterfaceVariableCount        = chunkReader.ReadUInt32();
                result.InterfaceVariableElementCount = chunkReader.ReadUInt32();
                result.ClassInstanceElementCount     = chunkReader.ReadUInt32();
            }
            return(result);
        }
コード例 #2
0
        public static EffectChunk Parse(BytecodeReader reader, uint size)
        {
            var headerReader = reader.CopyAtCurrentPosition();
            var result       = new EffectChunk();
            var header       = result.Header = EffectHeader.Parse(headerReader);
            var bodyOffset   = header.Version.MajorVersion < 5 ?
                               0x4C : 0x60;
            var footerOffset = (int)(result.Header.FooterOffset + bodyOffset);
            var bodyReader   = reader.CopyAtOffset((int)bodyOffset);
            var footerReader = reader.CopyAtOffset(footerOffset);
            var version      = header.Version;

            for (int i = 0; i < header.ConstantBuffers; i++)
            {
                result.LocalBuffers.Add(EffectBuffer.Parse(bodyReader, footerReader, version, false));
            }
            for (int i = 0; i < header.ObjectCount; i++)
            {
                result.LocalVariables.Add(EffectObjectVariable.Parse(bodyReader, footerReader, version, false));
            }
            for (int i = 0; i < header.SharedConstantBuffers; i++)
            {
                result.SharedBuffers.Add(EffectBuffer.Parse(bodyReader, footerReader, version, true));
            }
            for (int i = 0; i < header.SharedObjectCount; i++)
            {
                result.SharedVariables.Add(EffectObjectVariable.Parse(bodyReader, footerReader, version, true));
            }
            if (header.Version.MajorVersion >= 5)
            {
                for (int i = 0; i < header.InterfaceVariableCount; i++)
                {
                    result.InterfaceVariables.Add(EffectInterfaceVariable.Parse(bodyReader, footerReader, version));
                }
                for (int i = 0; i < header.GroupCount; i++)
                {
                    result.Groups.Add(EffectGroup.Parse(bodyReader, footerReader, header.Version));
                }
            }
            else
            {
                for (int i = 0; i < header.Techniques; i++)
                {
                    result.Techniques.Add(EffectTechnique.Parse(bodyReader, footerReader, header.Version));
                }
            }
            return(result);
        }