/// <summary> /// 描画 /// </summary> public void Draw() { var context = GraphicsCore.ImmediateContext; UpdateDraw(); { // シャドウマップ using (new MyGpuProfilePoint(context, "Create ShadowMap")) { shadowMap_.BeginRender(context); { SceneDraw(context); } shadowMap_.EndRender(context); } // キューブマップ if (cubeMapRenderEnable_ && !cubeMapRendered_) { RenderCubeMap(); cubeMapRendered_ = true; } // ディファードパス using (new MyGpuProfilePoint(context, "Deferred Path")) { // GBuffer using (new MyGpuProfilePoint(context, "Render GBuffer")) { GraphicsCore.CurrentDrawCamera = GraphicsCore.Camera3D; RenderGBuffer(); } context.SetRenderTargets(new Texture[4], null); // unbind // ライティングCS using (new MyGpuProfilePoint(context, "Lighting")) { csMgr_.Bind(); int x = Lib.ComputeShader.CalcThreadGroups(gbuffers_[0].Width, 32); int y = Lib.ComputeShader.CalcThreadGroups(gbuffers_[0].Height, 32); csMgr_.Dispatch(gbuffers_[0].Width, gbuffers_[0].Height); csMgr_.UnBind(); } } // フォワードパス using (new MyGpuProfilePoint(context, "Forward Path")) { context.SetRenderTargets(forwardBuffer_.color_buffer_, forwardBuffer_.depth_stencil_); { // キューブマップデバッグ if (cubeMapRenderEnable_) { //globalCapture_.DebugDraw(); //foreach (var c in localCapture_) { // c.DebugDraw(); //} } //// ライトのデバッグ描画 //if (ViewModel.IsDrawLights // && ViewModel.ViewIndex == (int)ViewItems.Type.Result // && ViewModel.TiledRenderView != (int)TiledRenderItems.Type.LightCount // ) { // lightMgr_.DebugDraw(); //} } } // トーンマップ using (new MyGpuProfilePoint(context, "HDR Resolve")) { if (viewModel_.IsEnableToneMap) { toneMap_.CalcLuminance(context, uav_); context.SetRenderTargets(hdrResultBuffer_.color_buffer_, null); toneMap_.KeyValue = viewModel_.ToneMapKeyValue; toneMap_.ResolveHDR(context, uav_); } else { context.SetRenderTargets(hdrResultBuffer_.color_buffer_, null); toneMap_.ResolveGamma(context, uav_); } } // 最終レンダリング GraphicsCore.BeginRender(); { context.ClearDepthStencil(GraphicsCore.DefaultDepthBuffer, 1.0f); // ライティング結果 if (ViewModel.IsEnableFXAA && ViewModel.ViewIndex == (int)ViewItems.Type.Result) { using (new MyGpuProfilePoint(context, "FXAA")) { fxaaPrim_.Draw(context); } } else { prim_.Draw(context); } } } }
/// <summary> /// 描画 /// </summary> public void Draw() { var context = GraphicsCore.ImmediateContext; UpdateDraw(); { // GBuffer using (new ksGpuProfilePoint(context, "Render GBuffer")) { MyRenderer.CurrentDrawCamera = MyRenderer.Camera3D; RenderGBuffer(); } var framebuffer = new MyRenderer.FrameBuffer(); var edgeBuffer = hdrResolveBuffer_; // アウトライン検出 using (new ksGpuProfilePoint(context, "Outline")) { framebuffer.color_buffer_ = new Texture[] { hdrResolveBuffer_ }; context.SetRenderTargets(framebuffer.color_buffer_, framebuffer.depth_stencil_); prim_.GetMaterial().SetShader("Outline"); prim_.GetMaterial().SetShaderViewPS(0, gbuffers_[0]); prim_.GetMaterial().SetShaderViewPS(1, gbuffers_[1]); prim_.GetMaterial().BlendState = RenderState.BlendState.None; prim_.Draw(context); //framebuffer.color_buffer_ = new Texture[] { gbuffers_[1] }; //ksRenderer.BeginRender(framebuffer); //fxaaPrim_.GetMaterial().SetShaderViewPS(0, hdrResolveBuffer_); //fxaaPrim_.Draw(); //ksRenderer.EndRender(); //edgeBuffer = gbuffers_[1]; } // vertexIDによるスプライト描画 using (new ksGpuProfilePoint(context, "LineSprite")) { framebuffer.color_buffer_ = new Texture[] { gbuffers_[0] }; context.SetRenderTargets(framebuffer.color_buffer_, framebuffer.depth_stencil_); if (test) { MyRenderer.D3D11ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding()); lineSpriteMaterial_.SetShaderViewVS(0, edgeBuffer); lineSpriteMaterial_.SetShaderViewPS(0, lineTexture_); lineSpriteMaterial_.DepthState = RenderState.DepthState.None; lineSpriteMaterial_.BlendState = RenderState.BlendState.Normal; lineSpriteMaterial_.Setup(context); Matrix ident = Matrix.Identity; ShaderManager.SetUniformParams(ref ident); MyRenderer.SetRasterizerState(RenderState.RasterizerState.CullNone); int instance = hdrResolveBuffer_.Width * hdrResolveBuffer_.Height; MyRenderer.D3D11ImmediateContext.DrawInstanced(6, instance, 0, 0); } else { prim_.GetMaterial().SetShader("Direct"); prim_.GetMaterial().SetShaderViewPS(0, hdrResolveBuffer_); prim_.GetMaterial().BlendState = RenderState.BlendState.Normal; prim_.Draw(context); } } // 最終レンダリング MyRenderer.BeginRender(); { // ライティング結果 using (new ksGpuProfilePoint(context, "FXAA")) { fxaaPrim_.GetMaterial().SetShaderViewPS(0, gbuffers_[0]); fxaaPrim_.GetMaterial().BlendState = RenderState.BlendState.None; fxaaPrim_.Draw(context); } } } }
public void DebugDraw(GraphicsContext context) { debugPrim_.Draw(context, (int)count_); }