internal virtual SubRenderState CreateOrRetrieveInstance(SGScriptTranslator translator) { //check if we already creaet a srs SubRenderState subRenderState = translator.GetGeneratedSubRenderState(Type); if (subRenderState == null) { //create a new sub render state subRenderState = CreateInstance(); } return(subRenderState); }
public override SubRenderState CreateInstance( Scripting.Compiler.ScriptCompiler compiler, Scripting.Compiler.AST.PropertyAbstractNode prop, Graphics.Pass pass, SGScriptTranslator stranslator ) { if ( prop.Name == "fog_stage" ) { if ( prop.Values.Count >= 1 ) { string strValue; if ( !SGScriptTranslator.GetString( prop.Values[ 0 ], out strValue ) ) { //compiler.AddError(...); return null; } if ( strValue == "ffp" ) { SubRenderState subRenderState = CreateOrRetrieveInstance( stranslator ); var fogSubRenderState = (FFPFog)subRenderState; int it = 0; if ( prop.Values.Count >= 2 ) { it++; if ( !SGScriptTranslator.GetString( prop.Values[ it ], out strValue ) ) { //compiler.AddError(...); return null; } if ( strValue == "per_vertex" ) { fogSubRenderState.CalculationMode = FFPFog.CalcMode.PerVertex; } else if ( strValue == "per_pixel" ) { fogSubRenderState.CalculationMode = FFPFog.CalcMode.PerPixel; } } return subRenderState; } } } return null; }
public override SubRenderState CreateInstance(Scripting.Compiler.ScriptCompiler compiler, Scripting.Compiler.AST.PropertyAbstractNode prop, Graphics.Pass pass, SGScriptTranslator stranslator) { if (prop.Name == "fog_stage") { if (prop.Values.Count >= 1) { string strValue; if (!SGScriptTranslator.GetString(prop.Values[0], out strValue)) { //compiler.AddError(...); return(null); } if (strValue == "ffp") { SubRenderState subRenderState = CreateOrRetrieveInstance(stranslator); var fogSubRenderState = (FFPFog)subRenderState; int it = 0; if (prop.Values.Count >= 2) { it++; if (!SGScriptTranslator.GetString(prop.Values[it], out strValue)) { //compiler.AddError(...); return(null); } if (strValue == "per_vertex") { fogSubRenderState.CalculationMode = FFPFog.CalcMode.PerVertex; } else if (strValue == "per_pixel") { fogSubRenderState.CalculationMode = FFPFog.CalcMode.PerPixel; } } return(subRenderState); } } } return(null); }
public override SubRenderState CreateInstance( Scripting.Compiler.ScriptCompiler compiler, Scripting.Compiler.AST.PropertyAbstractNode prop, Graphics.Pass pass, SGScriptTranslator stranslator ) { if ( prop.Name == "integrated_pssm4" ) { if ( prop.Values.Count != 4 ) { //TODO // compiler.AddError(...); } else { var splitPointList = new List<Real>(); foreach ( var it in prop.Values ) { Real curSplitValue; if ( !SGScriptTranslator.GetReal( it, out curSplitValue ) ) { //TODO //compiler.AddError(...); break; } splitPointList.Add( curSplitValue ); } if ( splitPointList.Count == 4 ) { SubRenderState subRenderState = CreateOrRetrieveInstance( stranslator ); var pssmSubRenderState = (IntegratedPSSM3)subRenderState; pssmSubRenderState.SetSplitPoints( splitPointList ); return pssmSubRenderState; } } } return null; }
public override SubRenderState CreateInstance(Scripting.Compiler.ScriptCompiler compiler, Scripting.Compiler.AST.PropertyAbstractNode prop, Graphics.Pass pass, SGScriptTranslator stranslator) { if (prop.Name == "integrated_pssm4") { if (prop.Values.Count != 4) { //TODO // compiler.AddError(...); } else { var splitPointList = new List <Real>(); foreach (var it in prop.Values) { Real curSplitValue; if (!SGScriptTranslator.GetReal(it, out curSplitValue)) { //TODO //compiler.AddError(...); break; } splitPointList.Add(curSplitValue); } if (splitPointList.Count == 4) { SubRenderState subRenderState = CreateOrRetrieveInstance(stranslator); var pssmSubRenderState = (IntegratedPSSM3)subRenderState; pssmSubRenderState.SetSplitPoints(splitPointList); return(pssmSubRenderState); } } } return(null); }
public virtual SubRenderState CreateInstance(ScriptCompiler compiler, PropertyAbstractNode prop, Pass pass, SGScriptTranslator stranslator) { return(null); }
public override SubRenderState CreateInstance(Scripting.Compiler.ScriptCompiler compiler, PropertyAbstractNode prop, Graphics.Pass pass, SGScriptTranslator stranslator) { if (prop.Name == "lighting_stage") { if (prop.Values.Count >= 2) { string strValue; int it = 0; //Read light model type. if (!SGScriptTranslator.GetString(prop.Values[it], out strValue)) { //compiler.AddError(...) return(null); } //Case light model type is normal map if (strValue == "normal_map") { it++; if (!SGScriptTranslator.GetString(prop.Values[it], out strValue)) { //compiler.AddError(...) return(null); } SubRenderState subRenderState = CreateOrRetrieveInstance(stranslator); var normalMapSubRenderState = subRenderState as NormalMapLighting; normalMapSubRenderState.NormalMapTextureName = strValue; //Read normal map space type. if (prop.Values.Count >= 3) { it++; if (!SGScriptTranslator.GetString(prop.Values[it], out strValue)) { //compiler.AddError(...) return(null); } //Normal map defines normals in tangent space. if (strValue == "tangent_space") { normalMapSubRenderState.NormalMapSpace = NormalMapSpace.Tangent; } //Normal map defines normals in object space if (strValue == "object_space") { normalMapSubRenderState.NormalMapSpace = NormalMapSpace.Object; } } //Read texture coordinate index. if (prop.Values.Count >= 4) { int textureCoordinatesIndex = 0; it++; if (!SGScriptTranslator.GetInt(prop.Values[it], out textureCoordinatesIndex)) { normalMapSubRenderState.TexCoordIndex = textureCoordinatesIndex; } } //Read texture filtering format if (prop.Values.Count >= 5) { it++; if (!SGScriptTranslator.GetString(prop.Values[it], out strValue)) { //compiler.AddError(...) return(null); } if (strValue == "none") { normalMapSubRenderState.SetNormalMapFiltering(Graphics.FilterOptions.Point, Graphics.FilterOptions.Point, Graphics.FilterOptions.None); } else if (strValue == "bilinear") { normalMapSubRenderState.SetNormalMapFiltering(Graphics.FilterOptions.Linear, Graphics.FilterOptions.Linear, Graphics.FilterOptions.Point); } else if (strValue == "trilinear") { normalMapSubRenderState.SetNormalMapFiltering(Graphics.FilterOptions.Linear, Graphics.FilterOptions.Linear, Graphics.FilterOptions.Linear); } else if (strValue == "anisotropic") { normalMapSubRenderState.SetNormalMapFiltering(Graphics.FilterOptions.Anisotropic, Graphics.FilterOptions.Anisotropic, Graphics.FilterOptions.Linear); } } //Read max anisotropy value if (prop.Values.Count >= 6) { int maxAnisotropy = 0; it++; if (SGScriptTranslator.GetInt(prop.Values[it], out maxAnisotropy)) { normalMapSubRenderState.NormalMapAnisotropy = maxAnisotropy; } } //Read mip bias value. if (prop.Values.Count >= 7) { Real mipBias = 0; it++; if (SGScriptTranslator.GetReal(prop.Values[it], out mipBias)) { normalMapSubRenderState.NormalMapMipBias = mipBias; } } return(subRenderState); } } } return(null); }
public override SubRenderState CreateInstance( Scripting.Compiler.ScriptCompiler compiler, PropertyAbstractNode prop, Graphics.Pass pass, SGScriptTranslator stranslator ) { if ( prop.Name == "lighting_stage" ) { if ( prop.Values.Count >= 2 ) { string strValue; int it = 0; //Read light model type. if ( !SGScriptTranslator.GetString( prop.Values[ it ], out strValue ) ) { //compiler.AddError(...) return null; } //Case light model type is normal map if ( strValue == "normal_map" ) { it++; if ( !SGScriptTranslator.GetString( prop.Values[ it ], out strValue ) ) { //compiler.AddError(...) return null; } SubRenderState subRenderState = CreateOrRetrieveInstance( stranslator ); var normalMapSubRenderState = subRenderState as NormalMapLighting; normalMapSubRenderState.NormalMapTextureName = strValue; //Read normal map space type. if ( prop.Values.Count >= 3 ) { it++; if ( !SGScriptTranslator.GetString( prop.Values[ it ], out strValue ) ) { //compiler.AddError(...) return null; } //Normal map defines normals in tangent space. if ( strValue == "tangent_space" ) { normalMapSubRenderState.NormalMapSpace = NormalMapSpace.Tangent; } //Normal map defines normals in object space if ( strValue == "object_space" ) { normalMapSubRenderState.NormalMapSpace = NormalMapSpace.Object; } } //Read texture coordinate index. if ( prop.Values.Count >= 4 ) { int textureCoordinatesIndex = 0; it++; if ( !SGScriptTranslator.GetInt( prop.Values[ it ], out textureCoordinatesIndex ) ) { normalMapSubRenderState.TexCoordIndex = textureCoordinatesIndex; } } //Read texture filtering format if ( prop.Values.Count >= 5 ) { it++; if ( !SGScriptTranslator.GetString( prop.Values[ it ], out strValue ) ) { //compiler.AddError(...) return null; } if ( strValue == "none" ) { normalMapSubRenderState.SetNormalMapFiltering( Graphics.FilterOptions.Point, Graphics.FilterOptions.Point, Graphics.FilterOptions.None ); } else if ( strValue == "bilinear" ) { normalMapSubRenderState.SetNormalMapFiltering( Graphics.FilterOptions.Linear, Graphics.FilterOptions.Linear, Graphics.FilterOptions.Point ); } else if ( strValue == "trilinear" ) { normalMapSubRenderState.SetNormalMapFiltering( Graphics.FilterOptions.Linear, Graphics.FilterOptions.Linear, Graphics.FilterOptions.Linear ); } else if ( strValue == "anisotropic" ) { normalMapSubRenderState.SetNormalMapFiltering( Graphics.FilterOptions.Anisotropic, Graphics.FilterOptions.Anisotropic, Graphics.FilterOptions.Linear ); } } //Read max anisotropy value if ( prop.Values.Count >= 6 ) { int maxAnisotropy = 0; it++; if ( SGScriptTranslator.GetInt( prop.Values[ it ], out maxAnisotropy ) ) { normalMapSubRenderState.NormalMapAnisotropy = maxAnisotropy; } } //Read mip bias value. if ( prop.Values.Count >= 7 ) { Real mipBias = 0; it++; if ( SGScriptTranslator.GetReal( prop.Values[ it ], out mipBias ) ) { normalMapSubRenderState.NormalMapMipBias = mipBias; } } return subRenderState; } } } return null; }
public override SubRenderState CreateInstance( Scripting.Compiler.ScriptCompiler compiler, Scripting.Compiler.AST.PropertyAbstractNode prop, Pass pass, SGScriptTranslator stranslator ) { if ( prop.Name == "hardware_skinning" ) { bool hasError = false; int boneCount = 0; int weightCount = 0; string skinningType = string.Empty; SkinningType skinType = SkinningType.Linear; bool correctAntipodalityHandling = false; bool scalingShearingSupport = false; if ( prop.Values.Count >= 2 ) { int it = 0; if ( SGScriptTranslator.GetInt( prop.Values[ it ], out boneCount ) == false ) { hasError = true; } it++; if ( SGScriptTranslator.GetInt( prop.Values[ it ], out weightCount ) == false ) { hasError = true; } if ( prop.Values.Count >= 5 ) { it++; SGScriptTranslator.GetString( prop.Values[ it ], out skinningType ); it++; SGScriptTranslator.GetBoolean( prop.Values[ it ], out correctAntipodalityHandling ); it++; SGScriptTranslator.GetBoolean( prop.Values[ it ], out scalingShearingSupport ); } //If the skinningType is not specified or is specified incorretly, default to linear if ( skinningType == "dual_quaternion" ) { skinType = SkinningType.DualQuaternion; } else { skinType = SkinningType.Linear; } } if ( hasError ) { //TODO //compiler.AddError(...); return null; } else { //create and update the hardware skinning sub render state SubRenderState subRenderState = CreateOrRetrieveInstance( stranslator ); var hardSkinSrs = (HardwareSkinning)subRenderState; hardSkinSrs.SetHardwareSkinningParam( boneCount, weightCount, skinType, correctAntipodalityHandling, scalingShearingSupport ); return subRenderState; } } return null; }
public override SubRenderState CreateInstance( Scripting.Compiler.ScriptCompiler compiler, Scripting.Compiler.AST.PropertyAbstractNode prop, Graphics.Pass pass, SGScriptTranslator stranslator ) { return null; }
public override SubRenderState CreateInstance(Scripting.Compiler.ScriptCompiler compiler, Scripting.Compiler.AST.PropertyAbstractNode prop, Graphics.Pass pass, SGScriptTranslator stranslator) { return(null); }
public override SubRenderState CreateInstance(Scripting.Compiler.ScriptCompiler compiler, Scripting.Compiler.AST.PropertyAbstractNode prop, Pass pass, SGScriptTranslator stranslator) { if (prop.Name == "hardware_skinning") { bool hasError = false; int boneCount = 0; int weightCount = 0; string skinningType = string.Empty; SkinningType skinType = SkinningType.Linear; bool correctAntipodalityHandling = false; bool scalingShearingSupport = false; if (prop.Values.Count >= 2) { int it = 0; if (SGScriptTranslator.GetInt(prop.Values[it], out boneCount) == false) { hasError = true; } it++; if (SGScriptTranslator.GetInt(prop.Values[it], out weightCount) == false) { hasError = true; } if (prop.Values.Count >= 5) { it++; SGScriptTranslator.GetString(prop.Values[it], out skinningType); it++; SGScriptTranslator.GetBoolean(prop.Values[it], out correctAntipodalityHandling); it++; SGScriptTranslator.GetBoolean(prop.Values[it], out scalingShearingSupport); } //If the skinningType is not specified or is specified incorretly, default to linear if (skinningType == "dual_quaternion") { skinType = SkinningType.DualQuaternion; } else { skinType = SkinningType.Linear; } } if (hasError) { //TODO //compiler.AddError(...); return(null); } else { //create and update the hardware skinning sub render state SubRenderState subRenderState = CreateOrRetrieveInstance(stranslator); var hardSkinSrs = (HardwareSkinning)subRenderState; hardSkinSrs.SetHardwareSkinningParam(boneCount, weightCount, skinType, correctAntipodalityHandling, scalingShearingSupport); return(subRenderState); } } return(null); }
public override SubRenderState CreateInstance( Scripting.Compiler.ScriptCompiler compiler, Scripting.Compiler.AST.PropertyAbstractNode prop, Pass pass, SGScriptTranslator stranslator ) { if ( prop.Name == "rtss_ext_reflection_map" ) { if ( prop.Values.Count >= 2 ) { string strValue; int it = 0; //Read reflection map type if ( !SGScriptTranslator.GetString( prop.Values[ it ], out strValue ) ) { //compiler.AddError(...) return null; } it++; SubRenderState subRenderState = CreateInstance(); var reflectionMapSubRenderState = subRenderState as ReflectionMap; //Reflection map is cubic texture. if ( strValue == "cube_map" ) { reflectionMapSubRenderState.ReflectionMapType = TextureType.CubeMap; } else if ( strValue == "2d_map" ) { reflectionMapSubRenderState.ReflectionMapType = TextureType.TwoD; } if ( !SGScriptTranslator.GetString( prop.Values[ it ], out strValue ) ) { //compiler.AddError(...) return null; } reflectionMapSubRenderState.MaskMapTextureName = strValue; it++; //read reflection texture if ( !SGScriptTranslator.GetString( prop.Values[ it ], out strValue ) ) { //compiler.AddError(...); return null; } reflectionMapSubRenderState.ReflectionMapTextureName = strValue; it++; //Read reflection power value Real reflectionPower = 0.5; if ( !SGScriptTranslator.GetReal( prop.Values[ it ], out reflectionPower ) ) { //compiler.AddError(...) return null; } reflectionMapSubRenderState.ReflectionPower = reflectionPower; return subRenderState; } } return null; }
public virtual SubRenderState CreateInstance(ScriptCompiler compiler, PropertyAbstractNode prop, TextureUnitState texState, SGScriptTranslator translator) { return(null); }
public virtual SubRenderState CreateInstance( ScriptCompiler compiler, PropertyAbstractNode prop, TextureUnitState texState, SGScriptTranslator translator ) { return null; }
public virtual SubRenderState CreateInstance( ScriptCompiler compiler, PropertyAbstractNode prop, Pass pass, SGScriptTranslator stranslator ) { return null; }
internal virtual SubRenderState CreateOrRetrieveInstance( SGScriptTranslator translator ) { //check if we already creaet a srs SubRenderState subRenderState = translator.GetGeneratedSubRenderState( Type ); if ( subRenderState == null ) { //create a new sub render state subRenderState = CreateInstance(); } return subRenderState; }