public HighLevelGpuProgramPtr(HighLevelGpuProgramPtr r) : this(OgrePINVOKE.new_HighLevelGpuProgramPtr__SWIG_2(HighLevelGpuProgramPtr.getCPtr(r)), true)
 {
     if (OgrePINVOKE.SWIGPendingException.Pending)
     {
         throw OgrePINVOKE.SWIGPendingException.Retrieve();
     }
 }
Beispiel #2
0
        public HighLevelGpuProgramPtr getByName(string name)
        {
            HighLevelGpuProgramPtr ret = new HighLevelGpuProgramPtr(OgrePINVOKE.HighLevelGpuProgramManager_getByName__SWIG_1(swigCPtr, name), true);

            if (OgrePINVOKE.SWIGPendingException.Pending)
            {
                throw OgrePINVOKE.SWIGPendingException.Retrieve();
            }
            return(ret);
        }
Beispiel #3
0
        public HighLevelGpuProgramPtr createProgram(string name, string groupName, string language, GpuProgramType gptype)
        {
            HighLevelGpuProgramPtr ret = new HighLevelGpuProgramPtr(OgrePINVOKE.HighLevelGpuProgramManager_createProgram(swigCPtr, name, groupName, language, (int)gptype), true);

            if (OgrePINVOKE.SWIGPendingException.Pending)
            {
                throw OgrePINVOKE.SWIGPendingException.Retrieve();
            }
            return(ret);
        }
Beispiel #4
0
        public HighLevelGpuProgramPtr _getDelegate()
        {
            HighLevelGpuProgramPtr ret = new HighLevelGpuProgramPtr(OgrePINVOKE.UnifiedHighLevelGpuProgramPtr__getDelegate(swigCPtr), false);

            if (OgrePINVOKE.SWIGPendingException.Pending)
            {
                throw OgrePINVOKE.SWIGPendingException.Retrieve();
            }
            return(ret);
        }
Beispiel #5
0
        public Program(string name, HighLevelGpuProgramPtr vs, HighLevelGpuProgramPtr ps,
                       IEnumerable <VariableDescription> samplers)
        {
            VertexShader = vs;
            PixelShader  = ps;

            Debug.WriteLine("VS:");
            Debug.WriteLine("================================================================================");
            Debug.WriteLine(vs.Source);
            Debug.WriteLine("PS:");
            Debug.WriteLine("================================================================================");
            Debug.WriteLine(ps.Source);

            var mm = MaterialManager.Singleton;

            Material = mm.Create(name, "SLSharp");
            _mat     = Material.Target;
            _mat.RemoveAllTechniques();
            _tech            = _mat.CreateTechnique();
            _tech.SchemeName = "SLSharp";
            _tech.RemoveAllPasses();
            Pass = _tech.CreatePass();
            if (vs != null)
            {
                Pass.SetVertexProgram(vs.Name);
            }
            if (ps != null)
            {
                Pass.SetFragmentProgram(ps.Name);
            }

            foreach (var s in samplers)
            {
                var tu = Pass.CreateTextureUnitState();
                tu.Name = s.Name;
                _textureUnits.Add(s.Name, tu);
            }

            Pass.LightingEnabled = false;
            _mat.Load();

            MatToProg.Add(_mat, this);
        }
Beispiel #6
0
        public override void CreateGpuProgram(Miyagi.Common.Resources.GpuProgram gpuProg)
        {
            if (!HighLevelGpuProgramManager.Singleton.ResourceExists(gpuProg.Name))
            {
                using (HighLevelGpuProgramPtr hlgp = HighLevelGpuProgramManager.Singleton.CreateProgram(
                           gpuProg.Name,
                           this.ResourceGroupName,
                           gpuProg.Language,
                           gpuProg.Type == Miyagi.Common.GpuProgramType.Fragment
                                                ? GpuProgramType.GPT_FRAGMENT_PROGRAM
                                                : GpuProgramType.GPT_VERTEX_PROGRAM))
                {
                    foreach (KeyValuePair <string, string> kvp in gpuProg.Parameters)
                    {
                        hlgp.SetParameter(kvp.Key, kvp.Value);
                    }

                    hlgp.SourceFile = gpuProg.SourceFile;
                    hlgp.Load();
                }
            }
        }
 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(HighLevelGpuProgramPtr obj)
 {
     return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr);
 }
Beispiel #8
0
        public IProgram Link(Shader shader, IEnumerable <object> u)
        {
            var units = u.Cast <Tuple <ShaderType, SourceDescription> >();

            var name  = "SLSharp_" + _shaderCounter++;
            var group = ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME;


            var frags = units.Where(x => x.Item1 == ShaderType.FragmentShader).Select(x => x.Item2);
            var verts = units.Where(x => x.Item1 == ShaderType.VertexShader).Select(x => x.Item2);

            var combinedFrags = frags.Aggregate(SourceDescription.Empty, (x, y) => x.Merge(y));
            var combinedVerts = verts.Aggregate(SourceDescription.Empty, (x, y) => x.Merge(y));

            var samplerRegs = 0;
            var samplers    = new List <VariableDescription>();

            HighLevelGpuProgramPtr ps = null;

            if (combinedFrags.Functions.Count > 0)
            {
                // init default regs
                foreach (var x in combinedFrags.Uniforms)
                {
                    if (!x.IsSampler() || x.DefaultRegister.HasValue)
                    {
                        continue;
                    }
                    x.DefaultRegister = samplerRegs++;
                    samplers.Add(x);
                }

                switch (SLSharp.Language)
                {
                case ShaderLanguage.GLSL:
                    ps        = HighLevelGpuProgramManager.Singleton.CreateProgram(name + "_ps", group, "glsl", GpuProgramType.GPT_FRAGMENT_PROGRAM);
                    ps.Source = combinedFrags.ToGlsl(ShaderType.FragmentShader);
                    break;

                case ShaderLanguage.HLSL:
                    ps = HighLevelGpuProgramManager.Singleton.CreateProgram(name + "_ps", group, "hlsl", GpuProgramType.GPT_FRAGMENT_PROGRAM);
                    ps.SetParameter("entry_point", "SLSharp_FragmentMain");
                    ps.SetParameter("target", "ps_3_0");
                    ps.Source = combinedFrags.ToHlsl();
                    break;

                case ShaderLanguage.CG:
                    ps = HighLevelGpuProgramManager.Singleton.CreateProgram(name + "_ps", group, "cg", GpuProgramType.GPT_FRAGMENT_PROGRAM);
                    ps.SetParameter("entry_point", "SLSharp_FragmentMain");
                    ps.SetParameter("target", "ps_3_0");
                    ps.Source = combinedFrags.ToHlsl();
                    break;
                }
            }

            HighLevelGpuProgramPtr vs = null;

            if (combinedVerts.Functions.Count > 0)
            {
                // init default regs
                foreach (var x in combinedVerts.Uniforms)
                {
                    if (!x.IsSampler() || x.DefaultRegister.HasValue)
                    {
                        continue;
                    }
                    x.DefaultRegister = samplerRegs++;
                    samplers.Add(x);
                }

                switch (SLSharp.Language)
                {
                case ShaderLanguage.GLSL:
                    vs = HighLevelGpuProgramManager.Singleton.CreateProgram(name + "_vs", group, "glsl", GpuProgramType.GPT_VERTEX_PROGRAM);
                    var vsSource = combinedVerts.ToGlsl(ShaderType.VertexShader);

                    foreach (var vin in combinedVerts.VertexIns)
                    {
                        var sem = SemanticToMogre(vin.Semantic);
                        vsSource = vsSource.Replace(vin.Name, sem);
                    }
                    vs.Source = vsSource;
                    break;

                case ShaderLanguage.HLSL:
                    vs = HighLevelGpuProgramManager.Singleton.CreateProgram(name + "_vs", group, "hlsl", GpuProgramType.GPT_VERTEX_PROGRAM);
                    vs.SetParameter("entry_point", "SLSharp_VertexMain");
                    vs.SetParameter("target", "vs_3_0");
                    vs.Source = combinedVerts.ToHlsl();
                    break;

                case ShaderLanguage.CG:
                    vs = HighLevelGpuProgramManager.Singleton.CreateProgram(name + "_vs", group, "cg", GpuProgramType.GPT_VERTEX_PROGRAM);
                    vs.SetParameter("entry_point", "SLSharp_VertexMain");
                    vs.SetParameter("target", "vs_3_0");
                    vs.Source = combinedVerts.ToHlsl();
                    break;
                }
            }

            var prog = new Program(name, vs, ps, samplers);

            if (SLSharp.Language == ShaderLanguage.GLSL)
            {
                if (vs != null)
                {
                    var pars = prog.Pass.GetVertexProgramParameters();
                    foreach (var x in combinedVerts.Uniforms)
                    {
                        if (!x.IsSampler())
                        {
                            continue;
                        }
                        pars.SetNamedConstant(x.Name, x.DefaultRegister.GetValueOrDefault());
                    }
                }

                if (ps != null)
                {
                    var pars = prog.Pass.GetFragmentProgramParameters();
                    foreach (var x in combinedFrags.Uniforms)
                    {
                        if (!x.IsSampler())
                        {
                            continue;
                        }
                        pars.SetNamedConstant(x.Name, x.DefaultRegister.GetValueOrDefault());
                    }
                }
            }

            return(prog);
        }