Beispiel #1
0
        private List <VertexConstantInfo> GetVertexConstants(ShaderBlock shaderBlock,
                                                             ShaderTemplateBlock shaderTemplateBlock,
                                                             ShaderPassBlock shaderPassBlock, TagDatum vrtxDatum, TagDatum spasDatum, TagDatum stemDatum,
                                                             TagDatum shaderDatum, CacheStream cache)
        {
            var vertexConstantInfos = new List <VertexConstantInfo>( );
            var passes =
                shaderTemplateBlock.PostprocessDefinition[0].Passes.Where(u => u.Pass.Ident == spasDatum.Identifier);

            foreach (var pass in passes)
            {
                for (int i = pass.Implementations.Index; i < pass.Implementations.Index + pass.Implementations.Length; i++)
                {
                    var index =
                        shaderTemplateBlock.PostprocessDefinition[0].Implementations[i].VertexConstants.Index;
                    var length =
                        shaderTemplateBlock.PostprocessDefinition[0].Implementations[i].VertexConstants.Length;
                    for (int j = index; j < index + length; j++)
                    {
                        var sourceIndex = shaderTemplateBlock.PostprocessDefinition[0].Remappings[j].SourceIndex;
                        var bytes       = shaderTemplateBlock.PostprocessDefinition[0].Remappings[j].fieldskip;

                        var vertexConstant = shaderBlock.PostprocessDefinition[0].VertexConstants[sourceIndex];

                        var info = new VertexConstantInfo
                        {
                            source   = sourceIndex,
                            bytes    = bytes,
                            value    = new Vector4(vertexConstant.Vector3, vertexConstant.W),
                            stringId = Halo2.Strings[new StringIdent(BitConverter.ToInt16(bytes, 0), 0)]
                        };
                        vertexConstantInfos.Add(info);
                    }
                }
            }
            return(vertexConstantInfos);
        }
Beispiel #2
0
        public MoonfishScreenSpaceShader(TagIdent bitmap)
        {
            TagReference renderPass = new TagReference();
            var          shaderPass = new ShaderPassBlock
            {
                PostprocessDefinition = new[]
                {
                    new ShaderPassPostprocessDefinitionNewBlock
                    {
                        Implementations = new[]
                        {
                            new ShaderPassPostprocessImplementationNewBlock
                            {
                                DefaultRenderStates = new TagBlockIndexStructBlock(0, 2),
                                Textures            = new TagBlockIndexStructBlock(0, 1),
                                TextureStates       = new TagBlockIndexStructBlock(0, 1)
                            }
                        },
                        RenderStates = new[]
                        {
                            new RenderStateBlock
                            {
                                StateIndex = ( byte )(D3DRENDERSTATETYPE.COLORWRITEENABLE),
                                StateValue = 0x01010101 //ALL CHANNELS
                            },
                            new RenderStateBlock
                            {
                                StateIndex = ( byte )D3DRENDERSTATETYPE.ALPHABLENDENABLE,
                                StateValue = 0
                            }
                        },
                        Textures = new[]
                        {
                            new ShaderPassPostprocessTextureNewBlock
                            {
                                BitmapExternIndex    = 0,
                                BitmapParameterIndex = 0,
                                Flags             = 0,
                                TextureStageIndex = 0,
                            }
                        },
                        TextureStates = new[] { ShaderPassPostprocessTextureStateBlock.Default, }
                    }
                }
            };
            var shaderTemplate = new ShaderTemplateBlock( )
            {
                PostprocessDefinition = new[]
                {
                    new ShaderTemplatePostprocessDefinitionNewBlock
                    {
                        LevelsOfDetail = new[]
                        {
                            new ShaderTemplatePostprocessLevelOfDetailNewBlock
                            {
                                AvailableLayers = 1,
                                Layers          = new TagBlockIndexStructBlock(0, 1)
                            }
                        },
                        Layers = CreateLayers(0, 1),
                        Passes = new[]
                        {
                            new ShaderTemplatePostprocessPassNewBlock
                            {
                                Implementations = new TagBlockIndexStructBlock(0, 1),
                                Pass            = ( TagReference )shaderPass
                            }
                        },
                        Implementations = new[]
                        {
                            new ShaderTemplatePostprocessImplementationNewBlock
                            {
                                Bitmaps         = new TagBlockIndexStructBlock(0, 1),
                                PixelConstants  = new TagBlockIndexStructBlock(1, 0),
                                VertexConstants = new TagBlockIndexStructBlock(1, 0)
                            }
                        },
                        Remappings = new[] { (ShaderTemplatePostprocessRemappingNewBlock) new BitmapMapping(0, 0) }
                    }
                }
            };

            Template = ( TagReference )shaderTemplate;
            PostprocessDefinition = new[]
            {
                new ShaderPostprocessDefinitionNewBlock
                {
                    Bitmaps = new[]
                    {
                        new ShaderPostprocessBitmapNewBlock
                        {
                            BitmapGroup = bitmap
                        }
                    },
                    ShaderTemplateIndex = ( int )Template.Ident
                }
            };
        }