Пример #1
0
        protected override void InitializeCore()
        {
            base.InitializeCore();

            // Create a slot manager
            var sceneInstance = SceneInstance.GetCurrent(Context);

            if (sceneInstance == null)
            {
                // If we don't have a scene instance (unlikely, but possible)
                slotManager = new RenderModelEffectSlotManager();
            }
            else
            {
                // If we have a scene instance, we can store our state there, as we expect to share render models
                slotManager = sceneInstance.Tags.Get(RenderModelManagerKey);
                if (slotManager == null)
                {
                    slotManager = new RenderModelEffectSlotManager();
                    sceneInstance.Tags.Set(RenderModelManagerKey, slotManager);
                }
            }

            if (dynamicEffectCompiler == null)
            {
                dynamicEffectCompiler = new DynamicEffectCompiler(Services, effectName);

                // Allocate (or reuse) a slot for the pass of this processor
                // Note: The slot is passed as out, so that when ModelRendererState.ModelSlotAdded callback is fired,
                // ModelRenderer.modelRenderSlot is valid (it might call PrepareRenderMeshes recursively).
                modelRenderSlot = slotManager.AllocateSlot(EffectName);
            }
        }
Пример #2
0
        protected override void InitializeCore()
        {
            base.InitializeCore();

            if (effectName != null)
            {
                dynamicEffectCompiler = new DynamicEffectCompiler(Services, effectName);
            }
        }
Пример #3
0
        protected override async Task LoadContent()
        {
            await base.LoadContent();


            dynamicEffectCompiler = new DynamicEffectCompiler(Services, "CustomEffect.CustomSubEffect");
            effectParameters = new ParameterCollection();
            effectInstance = new DefaultEffectInstance(effectParameters);
        }
Пример #4
0
        protected override void PrepareCore(RenderContext context, RenderItemCollection opaqueList, RenderItemCollection transparentList)
        {
            // If EffectName is not setup, exit
            if (effectName == null)
            {
                return;
            }

            if (dynamicEffectCompiler == null)
            {
                dynamicEffectCompiler = new DynamicEffectCompiler(Services, effectName);
            }

            // If we don't have yet a render slot, create a new one
            if (modelRenderSlot < 0)
            {
                var pipelineModelState = GetOrCreateModelRendererState(context);

                // Allocate (or reuse) a slot for the pass of this processor
                // Note: The slot is passed as out, so that when ModelRendererState.ModelSlotAdded callback is fired,
                // ModelRenderer.modelRenderSlot is valid (it might call PrepareModelForRendering recursively).
                modelRenderSlot = pipelineModelState.AllocateModelSlot(EffectName);
            }

            if (UseCustomRenderModelList)
            {
                PrepareModels(context, CustomRenderModelList, opaqueList, transparentList);
            }
            else
            {
                // Get all meshes from the render model processor
                var modelProcessor = SceneInstance.GetProcessor <ModelProcessor>();
                foreach (var renderModelGroup in modelProcessor.ModelGroups)
                {
                    // Perform culling on group and accept
                    if (!CurrentCullingMask.Contains(renderModelGroup.Group))
                    {
                        continue;
                    }

                    PrepareModels(context, renderModelGroup, opaqueList, transparentList);
                }
            }
        }
Пример #5
0
        protected override void InitializeCore()
        {
            base.InitializeCore();

            // Create a slot manager
            var sceneInstance = SceneInstance.GetCurrent(Context);
            if (sceneInstance == null)
            {
                // If we don't have a scene instance (unlikely, but possible)
                slotManager = new RenderModelEffectSlotManager();
            }
            else
            {
                // If we have a scene instance, we can store our state there, as we expect to share render models 
                slotManager = sceneInstance.Tags.Get(RenderModelManagerKey);
                if (slotManager == null)
                {
                    slotManager = new RenderModelEffectSlotManager();
                    sceneInstance.Tags.Set(RenderModelManagerKey, slotManager);
                }
            }

            if (dynamicEffectCompiler == null)
            {
                dynamicEffectCompiler = new DynamicEffectCompiler(Services, effectName);

                // Allocate (or reuse) a slot for the pass of this processor
                // Note: The slot is passed as out, so that when ModelRendererState.ModelSlotAdded callback is fired,
                // ModelRenderer.modelRenderSlot is valid (it might call PrepareRenderMeshes recursively).
                modelRenderSlot = slotManager.AllocateSlot(EffectName);
            }
        }