コード例 #1
0
        public void ChangeOptions(ViewportPolicy viewportPolicy, RenderOptions renderOptions)
        {
            this.Policy = viewportPolicy;

            this.Options = renderOptions;
            bool wantCanvas = (renderOptions & RenderOptions.Canvas) == RenderOptions.Canvas;

            if (this.canvas == null && wantCanvas)
            {
                this.canvas = new Canvas(PhantomGame.Game.GraphicsDevice);
            }
            else if (this.canvas != null && !wantCanvas)
            {
                this.canvas = null;
            }

            if (!renderOptions.HasFlag(RenderOptions.ApplyEffect))
            {
                this.fx = null;
            }

            this.sortMode   = Renderer.ToSortMode(renderOptions);
            this.blendState = Renderer.ToBlendState(renderOptions);

            if (this.sortMode == SpriteSortMode.Immediate)
            {
                this.activeRenderPass = this.RenderPassFullLock;
            }
            else
            {
                this.activeRenderPass = this.RenderPassEndLock;
            }
        }
コード例 #2
0
ファイル: Renderer.cs プロジェクト: HuntiXz/phantom
        public void ChangeOptions(ViewportPolicy viewportPolicy, RenderOptions renderOptions)
        {
            this.Policy = viewportPolicy;

            this.Options = renderOptions;
            bool wantCanvas = (renderOptions & RenderOptions.Canvas) == RenderOptions.Canvas;
            if (this.canvas == null && wantCanvas)
                this.canvas = new Canvas(PhantomGame.Game.GraphicsDevice);
            else if (this.canvas != null && !wantCanvas)
                this.canvas = null;

            if (!renderOptions.HasFlag(RenderOptions.ApplyEffect))
                this.fx = null;

            this.sortMode = Renderer.ToSortMode(renderOptions);
            this.blendState = Renderer.ToBlendState(renderOptions);

            if (this.sortMode == SpriteSortMode.Immediate)
                this.activeRenderPass = this.RenderPassFullLock;
            else
                this.activeRenderPass = this.RenderPassEndLock;
        }
コード例 #3
0
        public static void Add(Effect fx, RenderOptions options)
        {
            if (Params.ContainsKey(fx))
            {
                return;
            }

            Dictionary <string, EffectParameter> extractedParams = new Dictionary <string, EffectParameter>();

            if (!(options.HasFlag(RenderOptions.NoStandardParams)))
            {
                for (int i = 0; i < sStandardParamNames.Length; i++)
                {
                    extractedParams.Add(sStandardParamNames[i], fx.Parameters[sStandardParamNames[i]]);
                }

                foreach (KeyValuePair <string, string[]> kvp in sStandardStructParamNames)
                {
                    // Dirlight is special because it's an array.
                    if (kvp.Key == DIRLIGHT_STRUCT_NAME)
                    {
                        for (int i = 0; i < NUM_LIGHTS_PER_EFFECT; i++)
                        {
                            for (int j = 0; j < kvp.Value.Length; j++)
                            {
                                // Stick a digit on the end of the param name to keep it unique when we flatten it.
                                string lightParamName = DIRLIGHT_STRUCT_NAME + kvp.Value[j] + i.ToString();
                                extractedParams.Add(lightParamName, fx.Parameters[kvp.Key].Elements[i].StructureMembers[kvp.Value[j]]);
                            }
                        }
                    }
                    else
                    {
                        for (int j = 0; j < kvp.Value.Length; j++)
                        {
                            extractedParams.Add(kvp.Value[j], fx.Parameters[kvp.Value[j]]);
                        }
                    }
                }
            }

            if ((options & RenderOptions.RequiresSkeletalPose) > 0)
            {
                extractedParams.Add(POSEDBONES_PARAM_NAME, fx.Parameters[POSEDBONES_PARAM_NAME]);
                extractedParams.Add(WEIGHTS_PER_VERT_PARAM_NAME, fx.Parameters[WEIGHTS_PER_VERT_PARAM_NAME]);
            }

            if ((options & RenderOptions.RequiresShadowMap) > 0)
            {
                fx.Parameters[INVSHADOWMAPSIZE_PARAM_NAME].SetValue(1.0f / (float)(SceneResources.SMAP_SIZE));
                extractedParams.Add(SHADOWTRANSFORM_PARAM_NAME, fx.Parameters[SHADOWTRANSFORM_PARAM_NAME]);
                extractedParams.Add(SHADOWMAP_PARAM_NAME, fx.Parameters[SHADOWMAP_PARAM_NAME]);
            }

            if ((options & RenderOptions.RequiresEnviroMap) > 0)
            {
                extractedParams.Add(ENVIROMAP_PARAM_NAME, fx.Parameters[ENVIROMAP_PARAM_NAME]);
            }

            if ((options & RenderOptions.RequiresHDRLighting) > 0)
            {
                extractedParams.Add(IRRADIANCEMAP_PARAM_NAME, fx.Parameters[IRRADIANCEMAP_PARAM_NAME]);
                extractedParams.Add(SPECPREFILTER_PARAM_NAME, fx.Parameters[SPECPREFILTER_PARAM_NAME]);
                extractedParams.Add(NUMSPECLEVELS_PARAM_NAME, fx.Parameters[NUMSPECLEVELS_PARAM_NAME]);
                extractedParams.Add(SPECEXPFACTOR_PARAM_NAME, fx.Parameters[SPECEXPFACTOR_PARAM_NAME]);
                extractedParams.Add(AMBIENTLIGHT_PARAM_NAME, fx.Parameters[AMBIENTLIGHT_PARAM_NAME]);
            }

            if (options.HasFlag(RenderOptions.RequiresFringeMap))
            {
                extractedParams.Add(FRINGEMAP_PARAM_NAME, fx.Parameters[FRINGEMAP_PARAM_NAME]);
            }

            if (options.HasFlag(RenderOptions.ParticleParams))
            {
                extractedParams.Add(VIEWPROJ_PARAM_NAME, fx.Parameters[VIEWPROJ_PARAM_NAME]);
                extractedParams.Add(PROJ_XSCALE_PARAM_NAME, fx.Parameters[PROJ_XSCALE_PARAM_NAME]);
                extractedParams.Add(VIEWPORT_SCALE_PARAM_NAME, fx.Parameters[VIEWPORT_SCALE_PARAM_NAME]);
                extractedParams.Add(SECONDS_TIMER_VALUE_PARAM_NAME, fx.Parameters[SECONDS_TIMER_VALUE_PARAM_NAME]);
            }

            if (options.HasFlag(RenderOptions.BillboardParams))
            {
                extractedParams.Add(IRRADIANCEMAP_PARAM_NAME, fx.Parameters[IRRADIANCEMAP_PARAM_NAME]);
                extractedParams.Add(ALPHA_TEST_DIRECTION_PARAM_NAME, fx.Parameters[ALPHA_TEST_DIRECTION_PARAM_NAME]);
                extractedParams.Add(SECONDS_TIMER_VALUE_PARAM_NAME, fx.Parameters[SECONDS_TIMER_VALUE_PARAM_NAME]);
            }

            Params.Add(fx, extractedParams);
        }
コード例 #4
0
ファイル: EffectRegistry.cs プロジェクト: Tengato/Mechadrone1
        public static void Add(Effect fx, RenderOptions options)
        {
            if (Params.ContainsKey(fx))
                return;

            Dictionary<string, EffectParameter> extractedParams = new Dictionary<string, EffectParameter>();

            if (!(options.HasFlag(RenderOptions.NoStandardParams)))
            {
                for (int i = 0; i < sStandardParamNames.Length; i++)
                {
                    extractedParams.Add(sStandardParamNames[i], fx.Parameters[sStandardParamNames[i]]);
                }

                foreach (KeyValuePair<string, string[]> kvp in sStandardStructParamNames)
                {
                    // Dirlight is special because it's an array.
                    if (kvp.Key == DIRLIGHT_STRUCT_NAME)
                    {
                        for (int i = 0; i < NUM_LIGHTS_PER_EFFECT; i++)
                        {
                            for (int j = 0; j < kvp.Value.Length; j++)
                            {
                                // Stick a digit on the end of the param name to keep it unique when we flatten it.
                                string lightParamName = DIRLIGHT_STRUCT_NAME + kvp.Value[j] + i.ToString();
                                extractedParams.Add(lightParamName, fx.Parameters[kvp.Key].Elements[i].StructureMembers[kvp.Value[j]]);
                            }
                        }
                    }
                    else
                    {
                        for (int j = 0; j < kvp.Value.Length; j++)
                        {
                            extractedParams.Add(kvp.Value[j], fx.Parameters[kvp.Value[j]]);
                        }
                    }
                }
            }

            if ((options & RenderOptions.RequiresSkeletalPose) > 0)
            {
                extractedParams.Add(POSEDBONES_PARAM_NAME, fx.Parameters[POSEDBONES_PARAM_NAME]);
                extractedParams.Add(WEIGHTS_PER_VERT_PARAM_NAME, fx.Parameters[WEIGHTS_PER_VERT_PARAM_NAME]);
            }

            if ((options & RenderOptions.RequiresShadowMap) > 0)
            {
                fx.Parameters[INVSHADOWMAPSIZE_PARAM_NAME].SetValue(1.0f / (float)(SceneResources.SMAP_SIZE));
                extractedParams.Add(SHADOWTRANSFORM_PARAM_NAME, fx.Parameters[SHADOWTRANSFORM_PARAM_NAME]);
                extractedParams.Add(SHADOWMAP_PARAM_NAME, fx.Parameters[SHADOWMAP_PARAM_NAME]);
            }

            if ((options & RenderOptions.RequiresEnviroMap) > 0)
            {
                extractedParams.Add(ENVIROMAP_PARAM_NAME, fx.Parameters[ENVIROMAP_PARAM_NAME]);
            }

            if ((options & RenderOptions.RequiresHDRLighting) > 0)
            {
                extractedParams.Add(IRRADIANCEMAP_PARAM_NAME, fx.Parameters[IRRADIANCEMAP_PARAM_NAME]);
                extractedParams.Add(SPECPREFILTER_PARAM_NAME, fx.Parameters[SPECPREFILTER_PARAM_NAME]);
                extractedParams.Add(NUMSPECLEVELS_PARAM_NAME, fx.Parameters[NUMSPECLEVELS_PARAM_NAME]);
                extractedParams.Add(SPECEXPFACTOR_PARAM_NAME, fx.Parameters[SPECEXPFACTOR_PARAM_NAME]);
                extractedParams.Add(AMBIENTLIGHT_PARAM_NAME, fx.Parameters[AMBIENTLIGHT_PARAM_NAME]);
            }

            if (options.HasFlag(RenderOptions.RequiresFringeMap))
            {
                extractedParams.Add(FRINGEMAP_PARAM_NAME, fx.Parameters[FRINGEMAP_PARAM_NAME]);
            }

            if (options.HasFlag(RenderOptions.ParticleParams))
            {
                extractedParams.Add(VIEWPROJ_PARAM_NAME, fx.Parameters[VIEWPROJ_PARAM_NAME]);
                extractedParams.Add(PROJ_XSCALE_PARAM_NAME, fx.Parameters[PROJ_XSCALE_PARAM_NAME]);
                extractedParams.Add(VIEWPORT_SCALE_PARAM_NAME, fx.Parameters[VIEWPORT_SCALE_PARAM_NAME]);
                extractedParams.Add(SECONDS_TIMER_VALUE_PARAM_NAME, fx.Parameters[SECONDS_TIMER_VALUE_PARAM_NAME]);
            }

            if (options.HasFlag(RenderOptions.BillboardParams))
            {
                extractedParams.Add(IRRADIANCEMAP_PARAM_NAME, fx.Parameters[IRRADIANCEMAP_PARAM_NAME]);
                extractedParams.Add(ALPHA_TEST_DIRECTION_PARAM_NAME, fx.Parameters[ALPHA_TEST_DIRECTION_PARAM_NAME]);
                extractedParams.Add(SECONDS_TIMER_VALUE_PARAM_NAME, fx.Parameters[SECONDS_TIMER_VALUE_PARAM_NAME]);
            }

            Params.Add(fx, extractedParams);
        }