private void TranslateTextureUnit(Scripting.Compiler.ScriptCompiler compiler, AbstractNode node) { var obj = (ObjectAbstractNode)node; var texState = (TextureUnitState)obj.Parent.Context; Pass pass = texState.Parent; Technique technique = pass.Parent; Material material = technique.Parent; ShaderGenerator shaderGenerator = ShaderGenerator.Instance; string dstTechniqueSchemeName = obj.Name; bool techniqueCreated; //Make sure teh scheme is valid - use default if none exists if (dstTechniqueSchemeName == string.Empty) { dstTechniqueSchemeName = ShaderGenerator.DefaultSchemeName; } //check if technique already created techniqueCreated = shaderGenerator.HasShaderBasedTechnique(material.Name, material.Group, technique.SchemeName, dstTechniqueSchemeName); if (techniqueCreated == false) { //Create the shader based techniqe techniqueCreated = shaderGenerator.CreateShaderBasedTechnique(material.Name, material.Group, technique.SchemeName, dstTechniqueSchemeName, shaderGenerator. CreateShaderOverProgrammablePass); } if (techniqueCreated) { //Attempt to get the render state which might have been created by the pass parsing this.generatedRenderState = shaderGenerator.GetRenderState(dstTechniqueSchemeName, material.Name, material.Group, (ushort)pass.Index); //Go over all the render state properties for (int i = 0; i < obj.Children.Count; i++) { if (obj.Children[i] is PropertyAbstractNode) { var prop = obj.Children[i] as PropertyAbstractNode; SubRenderState subRenderState = ShaderGenerator.Instance.createSubRenderState(compiler, prop, texState, this); if (subRenderState != null) { AddSubRenderState(subRenderState, dstTechniqueSchemeName, material.Name, material.Group, pass.Index); } } else { processNode(compiler, obj.Children[i]); } } } }
private void TranslatePass(Scripting.Compiler.ScriptCompiler compiler, AbstractNode node) { var obj = (ObjectAbstractNode)node; var pass = (Pass)obj.Parent.Context; Technique technique = pass.Parent; Material material = technique.Parent; ShaderGenerator shaderGenerator = ShaderGenerator.Instance; string dstTechniqueSchemeName = obj.Name; bool techniqueCreated; //Make sure scheme name is valid - use default if none exists if (dstTechniqueSchemeName == string.Empty) { dstTechniqueSchemeName = ShaderGenerator.DefaultSchemeName; } //Create the shader based tedchnique techniqueCreated = shaderGenerator.CreateShaderBasedTechnique(material.Name, material.Group, technique.SchemeName, dstTechniqueSchemeName, shaderGenerator. CreateShaderOverProgrammablePass); if (techniqueCreated) { //Go over all render state properties for (int i = 0; i < obj.Children.Count; i++) { if (obj.Children[i] is PropertyAbstractNode) { var prop = obj.Children[i] as PropertyAbstractNode; SubRenderState subRenderState; //Handle light count property. if (prop != null && prop.Name == "light_count") { if (prop.Values.Count != 3) { //compiler.AddError(...); } else { var lightCount = new int[3]; if (!getInts(prop.Values, 0, out lightCount, 3)) { //compiler.addError(...); } else { shaderGenerator.CreateScheme(dstTechniqueSchemeName); RenderState renderState = shaderGenerator.GetRenderState(dstTechniqueSchemeName, material.Name, material.Group, (ushort)pass.Index); renderState.SetLightCount(lightCount); renderState.LightCountAutoUpdate = false; } } } else { subRenderState = ShaderGenerator.Instance.createSubRenderState(compiler, prop, pass, this); if (subRenderState != null) { AddSubRenderState(subRenderState, dstTechniqueSchemeName, material.Name, material.Group, pass.Index); } } } else { processNode(compiler, obj.Children[i]); } } } }