Exemplo n.º 1
0
        public override SubRenderState CreateInstance(Scripting.Compiler.ScriptCompiler compiler,
                                                      Scripting.Compiler.AST.PropertyAbstractNode prop, Graphics.Pass pass,
                                                      SGScriptTranslator stranslator)
        {
            SubRenderState subRenderState = CreateInstance();

            return(subRenderState);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        public override SubRenderState CreateInstance(Scripting.Compiler.ScriptCompiler compiler,
                                                      Scripting.Compiler.AST.PropertyAbstractNode prop,
                                                      Graphics.Pass pass, SGScriptTranslator stranslator)
        {
            if (prop.Name == "lighting_stage")
            {
                if (prop.Values.Count == 1)
                {
                    string modelType;
                    if (SGScriptTranslator.GetString(prop.Values[0], out modelType) == false)
                    {
                        //compiler.AddError(...)
                        return(null);
                    }
                    if (modelType == "per_pixel")
                    {
                        return(CreateOrRetrieveInstance(stranslator));
                    }
                }
            }

            return(null);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        public override SubRenderState CreateInstance(Scripting.Compiler.ScriptCompiler compiler,
                                                      Scripting.Compiler.AST.PropertyAbstractNode prop,
                                                      Graphics.TextureUnitState texState, ScriptTranslator translator)
        {
            if (prop.Name == "layered_blend")
            {
                string blendType;
                if (!SGScriptTranslator.GetString(prop.Values[0], out blendType))
                {
                    // compiler.AddError(...);
                    return(null);
                }

                LayeredBlending.BlendMode blendMode = StringToBlendMode(blendType);
                if (blendMode == LayeredBlending.BlendMode.Invalid)
                {
                    //  compiler.AddError(...);
                    return(null);
                }

                //get the layer blend sub-render state to work on
                var layeredBlendState = (LayeredBlending)CreateOrRetrieveInstance(translator);

                int texIndex = -1;
                //TODO: check impl. Ogre use: texIndex = texState.Parent.GetTextureUnitStateIndex(texState);
                for (int i = 0; i < texState.Parent.TextureUnitStatesCount; i++)
                {
                    if (texState.Parent.GetTextureUnitState(i) == texState)
                    {
                        texIndex = i;
                        break;
                    }
                }
                layeredBlendState.SetBlendMode(texIndex, blendMode);

                return(layeredBlendState);
            }
            if (prop.Name == "source_modifier")
            {
                if (prop.Values.Count < 3)
                {
                    //compiler.AddError(..);
                    return(null);
                }

                //Read light model type
                bool   isParseSuccess;
                string modifierString;
                string paramType;
                int    customNum;

                int itValue = 0;
                isParseSuccess = SGScriptTranslator.GetString(prop.Values[itValue], out modifierString);
                LayeredBlending.SourceModifier modType = StringToSourceModifier(modifierString);
                isParseSuccess &= modType != LayeredBlending.SourceModifier.Invalid;
                if (isParseSuccess == false)
                {
                    //compiler.AddError(...);
                    return(null);
                }
                itValue++;
                isParseSuccess  = SGScriptTranslator.GetString(prop.Values[itValue], out paramType);
                isParseSuccess &= (paramType == "custom");
                if (isParseSuccess == false)
                {
                    // compiler.AddError(...);

                    return(null);
                }

                itValue++;
                isParseSuccess = SGScriptTranslator.GetString(prop.Values[itValue], out paramType);
                if (isParseSuccess == false)
                {
                    //compiler.AddError(...);
                    return(null);
                }
                itValue++;
                isParseSuccess = SGScriptTranslator.GetInt(prop.Values[itValue], out customNum);
                if (isParseSuccess == false)
                {
                    //compiler.AddError(...);
                    return(null);
                }

                //get the layer blend sub render state to work on
                var layeredBlendState = (LayeredBlending)CreateOrRetrieveInstance(translator);

                int texIndex = 0;
                //update the layer sub render state
                for (int i = 0; i < texState.Parent.TextureUnitStatesCount; i++)
                {
                    if (texState.Parent.GetTextureUnitState(i) == texState)
                    {
                        texIndex = i;
                        break;
                    }
                }
                layeredBlendState.SetSourceModifier(texIndex, modType, customNum);

                return(layeredBlendState);
            }
            return(null);
        }
Exemplo n.º 7
0
        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);
        }