/// <summary> /// Called when [attach]. /// </summary> /// <param name="technique">The technique.</param> /// <returns></returns> protected override bool OnAttach(IRenderTechnique technique) { if (base.OnAttach(technique)) { VertexLayout = technique.Layout; updatePass = technique[DefaultParticlePassNames.Update]; insertPass = technique[DefaultParticlePassNames.Insert]; renderPass = technique[DefaultParticlePassNames.Default]; #region Get binding slots currentStateSlot = updatePass.GetShader(ShaderStage.Compute).UnorderedAccessViewMapping.TryGetBindSlot(CurrentSimStateUAVBufferName); newStateSlot = updatePass.GetShader(ShaderStage.Compute).UnorderedAccessViewMapping.TryGetBindSlot(NewSimStateUAVBufferName); renderStateSlot = renderPass.GetShader(ShaderStage.Vertex).ShaderResourceViewMapping.TryGetBindSlot(SimStateBufferName); textureSlot = renderPass.GetShader(ShaderStage.Pixel).ShaderResourceViewMapping.TryGetBindSlot(ShaderTextureBufferName); samplerSlot = renderPass.GetShader(ShaderStage.Pixel).SamplerMapping.TryGetBindSlot(ShaderTextureSamplerName); #endregion perFrameCB = technique.ConstantBufferPool.Register(DefaultBufferNames.ParticleFrameCB, ParticlePerFrame.SizeInBytes); insertCB = technique.ConstantBufferPool.Register(DefaultBufferNames.ParticleCreateParameters, ParticleInsertParameters.SizeInBytes); isBlendChanged = true; if (isInitialParticleChanged) { OnInitialParticleChanged(ParticleCount); } textureSampler = Collect(technique.EffectsManager.StateManager.Register(SamplerDescription)); return(true); } else { return(false); } }
/// <summary> /// Initializes a new instance of the <see cref="RenderContext"/> class. /// </summary> /// <param name="renderHost">The render host.</param> /// <param name="renderContext">The render context.</param> public RenderContext(IRenderHost renderHost, DeviceContext renderContext) { this.RenderHost = renderHost; this.IsShadowPass = false; this.IsDeferredPass = false; cbuffer = renderHost.EffectsManager.ConstantBufferPool.Register(DefaultBufferNames.GlobalTransformCB, GlobalTransformStruct.SizeInBytes); DeviceContext = renderContext; LightScene = Collect(new Light3DSceneShared(renderHost.EffectsManager.ConstantBufferPool)); SharedResource = Collect(new ContextSharedResource()); }
protected override bool OnAttach(IRenderTechnique technique) { if (base.OnAttach(technique)) { boneCB = technique.ConstantBufferPool.Register(new ConstantBufferDescription(DefaultBufferNames.BoneCB, BoneMatricesStruct.SizeInBytes)); return(true); } else { return(false); } }
/// <summary> /// Called when [attach]. /// </summary> /// <param name="technique">The technique.</param> /// <returns></returns> protected override bool OnAttach(IRenderTechnique technique) { if (base.OnAttach(technique)) { globalTransformCB = technique.EffectsManager.ConstantBufferPool.Register(DefaultBufferNames.GlobalTransformCB, GlobalTransformStruct.SizeInBytes); CreateRasterState(rasterDescription, true); return(true); } else { return(false); } }
protected override bool OnAttach(IRenderTechnique technique) { if (base.OnAttach(technique)) { clipParamCB = technique.ConstantBufferPool.Register(GetClipParamsCBDescription()); drawBackfacePass = technique[DefaultPassNames.Backface]; drawScreenQuadPass = technique[DefaultPassNames.ScreenQuad]; return(true); } else { return(false); } }
/// <summary> /// During attatching render core. Create all local resources. Use Collect(resource) to let object be released automatically during Detach(). /// </summary> /// <param name="technique"></param> /// <returns></returns> protected override bool OnAttach(IRenderTechnique technique) { ModelConstBuffer = technique.ConstantBufferPool.Register(GetModelConstantBufferDescription()); return(true); }