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); }
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 } }; }