/// <inheritdoc/> protected override void InitializeCore() { renderModelObjectInfoKey = RootRenderFeature.RenderData.CreateObjectKey <RenderModelFrameInfo>(); renderEffectKey = ((RootEffectRenderFeature)RootRenderFeature).RenderEffectKey; blendMatrices = ((RootEffectRenderFeature)RootRenderFeature).CreateDrawCBufferOffsetSlot(TransformationSkinningKeys.BlendMatrixArray.Name); }
public VisibilityGroup(RenderSystem renderSystem) { RenderSystem = renderSystem; RenderObjects = new RenderObjectCollection(this); RenderData.Initialize(ComputeDataArrayExpectedSize); // Create RenderStageMask key, and keep track of number of RenderStages.Count for future resizing RenderStageMaskKey = RenderData.CreateStaticObjectKey <uint>(null, stageMaskMultiplier = (RenderSystem.RenderStages.Count + RenderStageMaskSizePerEntry - 1) / RenderStageMaskSizePerEntry); Array.Resize(ref viewRenderStageMask, stageMaskMultiplier); RenderSystem.RenderStages.CollectionChanged += RenderStages_CollectionChanged; RenderSystem.RenderStageSelectorsChanged += RenderSystem_RenderStageSelectorsChanged; RenderSystem.RenderFeatures.CollectionChanged += RenderFeatures_CollectionChanged; }
/// <inheritdoc/> protected override void InitializeCore() { base.InitializeCore(); MutablePipeline = new MutablePipelineState(Context.GraphicsDevice); // Create RenderEffectKey RenderEffectKey = RenderData.CreateStaticObjectKey <RenderEffect>(null, EffectPermutationSlotCount); // TODO: Assign weights so that PerDraw is always last? (we usually most custom user ones to be between PerView and PerDraw) perFrameDescriptorSetSlot = GetOrCreateEffectDescriptorSetSlot("PerFrame"); perViewDescriptorSetSlot = GetOrCreateEffectDescriptorSetSlot("PerView"); perDrawDescriptorSetSlot = GetOrCreateEffectDescriptorSetSlot("PerDraw"); RenderSystem.RenderStages.CollectionChanged += RenderStages_CollectionChanged; // Create effect slots Array.Resize(ref effectSlots, RenderSystem.RenderStages.Count); for (int index = 0; index < RenderSystem.RenderStages.Count; index++) { var renderStage = RenderSystem.RenderStages[index]; effectSlots[index] = CreateEffectPermutationSlot(renderStage.EffectSlotName); } }