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); } }
protected override void InitializeCore() { base.InitializeCore(); if (effectName != null) { dynamicEffectCompiler = new DynamicEffectCompiler(Services, effectName); } }
protected override async Task LoadContent() { await base.LoadContent(); dynamicEffectCompiler = new DynamicEffectCompiler(Services, "CustomEffect.CustomSubEffect"); effectParameters = new ParameterCollection(); effectInstance = new DefaultEffectInstance(effectParameters); }
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); } } }
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); } }