move more rendering responsibilities to application
							parent
							
								
									d896707506
								
							
						
					
					
						commit
						8f570e04f0
					
				
							
								
								
									
										2
									
								
								Kav
								
								
								
								
							
							
								
								
								
								
								
								
							
						
						
									
										2
									
								
								Kav
								
								
								
								
							|  | @ -1 +1 @@ | ||||||
| Subproject commit c9a4e3581699ce3c1a03837be0a9c9492560a706 | Subproject commit 8b43e8f45ee6fa35f5c4d4924a62a3fcafe61301 | ||||||
|  | @ -15,6 +15,14 @@ namespace KavTest.Renderers | ||||||
|         private SpriteBatch SpriteBatch { get; } |         private SpriteBatch SpriteBatch { get; } | ||||||
| 
 | 
 | ||||||
|         private Kav.Renderer Renderer { get; } |         private Kav.Renderer Renderer { get; } | ||||||
|  | 
 | ||||||
|  |         private RenderTargetBinding[] GBuffer { get; } | ||||||
|  | 
 | ||||||
|  |         private RenderTarget2D GPosition { get; } | ||||||
|  |         private RenderTarget2D GNormal { get; } | ||||||
|  |         private RenderTarget2D GAlbedo { get; } | ||||||
|  |         private RenderTarget2D GMetallicRoughness { get; } | ||||||
|  | 
 | ||||||
|         private RenderTarget2D DeferredTarget { get; } |         private RenderTarget2D DeferredTarget { get; } | ||||||
|         private RenderTarget2D BillboardTarget { get; } |         private RenderTarget2D BillboardTarget { get; } | ||||||
| 
 | 
 | ||||||
|  | @ -111,18 +119,23 @@ namespace KavTest.Renderers | ||||||
| 
 | 
 | ||||||
|         public SceneRenderer(GraphicsDevice graphicsDevice) |         public SceneRenderer(GraphicsDevice graphicsDevice) | ||||||
|         { |         { | ||||||
|  |             GraphicsDevice = graphicsDevice; | ||||||
|  | 
 | ||||||
|  |             var renderDimensionsX = GraphicsDevice.PresentationParameters.BackBufferWidth; | ||||||
|  |             var renderDimensionsY = GraphicsDevice.PresentationParameters.BackBufferHeight; | ||||||
|  | 
 | ||||||
|             Renderer = new Kav.Renderer( |             Renderer = new Kav.Renderer( | ||||||
|                 graphicsDevice, |                 GraphicsDevice, | ||||||
|                 graphicsDevice.PresentationParameters.BackBufferWidth, |                 renderDimensionsX, | ||||||
|                 graphicsDevice.PresentationParameters.BackBufferHeight, |                 renderDimensionsY, | ||||||
|                 4, |                 4, | ||||||
|                 4096 |                 4096 | ||||||
|             ); |             ); | ||||||
| 
 | 
 | ||||||
|             DeferredTarget = new RenderTarget2D( |             DeferredTarget = new RenderTarget2D( | ||||||
|                 graphicsDevice, |                 GraphicsDevice, | ||||||
|                 graphicsDevice.PresentationParameters.BackBufferWidth, |                 renderDimensionsX, | ||||||
|                 graphicsDevice.PresentationParameters.BackBufferHeight, |                 renderDimensionsY, | ||||||
|                 false, |                 false, | ||||||
|                 SurfaceFormat.Color, |                 SurfaceFormat.Color, | ||||||
|                 DepthFormat.Depth24Stencil8, |                 DepthFormat.Depth24Stencil8, | ||||||
|  | @ -131,9 +144,9 @@ namespace KavTest.Renderers | ||||||
|             ); |             ); | ||||||
| 
 | 
 | ||||||
|             BillboardTarget = new RenderTarget2D( |             BillboardTarget = new RenderTarget2D( | ||||||
|                 graphicsDevice, |                 GraphicsDevice, | ||||||
|                 graphicsDevice.PresentationParameters.BackBufferWidth, |                 renderDimensionsX, | ||||||
|                 graphicsDevice.PresentationParameters.BackBufferHeight, |                 renderDimensionsY, | ||||||
|                 false, |                 false, | ||||||
|                 SurfaceFormat.Color, |                 SurfaceFormat.Color, | ||||||
|                 DepthFormat.Depth24Stencil8, |                 DepthFormat.Depth24Stencil8, | ||||||
|  | @ -141,7 +154,49 @@ namespace KavTest.Renderers | ||||||
|                 RenderTargetUsage.PreserveContents |                 RenderTargetUsage.PreserveContents | ||||||
|             ); |             ); | ||||||
| 
 | 
 | ||||||
|             GraphicsDevice = graphicsDevice; |             GPosition = new RenderTarget2D( | ||||||
|  |                 GraphicsDevice, | ||||||
|  |                 renderDimensionsX, | ||||||
|  |                 renderDimensionsY, | ||||||
|  |                 false, | ||||||
|  |                 SurfaceFormat.Vector4, | ||||||
|  |                 DepthFormat.Depth24 | ||||||
|  |             ); | ||||||
|  | 
 | ||||||
|  |             GNormal = new RenderTarget2D( | ||||||
|  |                 GraphicsDevice, | ||||||
|  |                 renderDimensionsX, | ||||||
|  |                 renderDimensionsY, | ||||||
|  |                 false, | ||||||
|  |                 SurfaceFormat.Vector4, | ||||||
|  |                 DepthFormat.None | ||||||
|  |             ); | ||||||
|  | 
 | ||||||
|  |             GAlbedo = new RenderTarget2D( | ||||||
|  |                 GraphicsDevice, | ||||||
|  |                 renderDimensionsX, | ||||||
|  |                 renderDimensionsY, | ||||||
|  |                 false, | ||||||
|  |                 SurfaceFormat.Color, | ||||||
|  |                 DepthFormat.None | ||||||
|  |             ); | ||||||
|  | 
 | ||||||
|  |             GMetallicRoughness = new RenderTarget2D( | ||||||
|  |                 GraphicsDevice, | ||||||
|  |                 renderDimensionsX, | ||||||
|  |                 renderDimensionsY, | ||||||
|  |                 false, | ||||||
|  |                 SurfaceFormat.HalfVector2, | ||||||
|  |                 DepthFormat.None | ||||||
|  |             ); | ||||||
|  | 
 | ||||||
|  |             GBuffer = new RenderTargetBinding[4] { | ||||||
|  |                 new RenderTargetBinding(GPosition), | ||||||
|  |                 new RenderTargetBinding(GNormal), | ||||||
|  |                 new RenderTargetBinding(GAlbedo), | ||||||
|  |                 new RenderTargetBinding(GMetallicRoughness) | ||||||
|  |             }; | ||||||
|  | 
 | ||||||
|             SpriteBatch = new SpriteBatch(GraphicsDevice); |             SpriteBatch = new SpriteBatch(GraphicsDevice); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | @ -163,37 +218,67 @@ namespace KavTest.Renderers | ||||||
|                     cameraComponent.FarPlane |                     cameraComponent.FarPlane | ||||||
|                 ); |                 ); | ||||||
| 
 | 
 | ||||||
|                 // if (SomeComponent<DirectionalLightComponent>()) |                 GraphicsDevice.SetRenderTargets(GBuffer); | ||||||
|                 // { |                 GraphicsDevice.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.Black, 1f, 0); | ||||||
|                 //     ref readonly var directionalLightEntity = ref ReadEntity<DirectionalLightComponent>(); |  | ||||||
|                 //     ref readonly var directionalLightTransformComponent = ref GetComponent<Transform3DComponent>(directionalLightEntity); |  | ||||||
|                 //     ref readonly var directionalLightComponent = ref GetComponent<DirectionalLightComponent>(directionalLightEntity); |  | ||||||
| 
 | 
 | ||||||
|                 //     Renderer.DepthRender( |                 Renderer.GBufferRender( | ||||||
|                 //         ModelTransforms, |                     GBuffer, | ||||||
|                 //         new Kav.DirectionalLight( |                     camera, | ||||||
|                 //             directionalLightTransformComponent.Transform.Forward, |                     ModelTransforms | ||||||
|                 //             directionalLightComponent.Color, |                 ); | ||||||
|                 //             directionalLightComponent.Intensity |  | ||||||
|                 //         ) |  | ||||||
|                 //     ); |  | ||||||
|                 // } |  | ||||||
| 
 | 
 | ||||||
|                 // Renderer.DeferredRender( |                 GraphicsDevice.SetRenderTarget(DeferredTarget); | ||||||
|                 //     camera, |                 GraphicsDevice.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.Black, 1f, 0); | ||||||
|                 //     ModelTransforms, |                 GraphicsDevice.DepthStencilState = DepthStencilState.Default; | ||||||
|                 //     AmbientLight, |  | ||||||
|                 //     PointLights, |  | ||||||
|                 //     DirectionalLight() |  | ||||||
|                 // ); |  | ||||||
| 
 | 
 | ||||||
|                 Renderer.DeferredToonRender( |                 Renderer.DepthRender( | ||||||
|  |                     DeferredTarget, | ||||||
|  |                     camera, | ||||||
|  |                     ModelTransforms | ||||||
|  |                 ); | ||||||
|  | 
 | ||||||
|  |                 Renderer.AmbientLightRender( | ||||||
|  |                     DeferredTarget, | ||||||
|  |                     GPosition, | ||||||
|  |                     GAlbedo, | ||||||
|  |                     AmbientLight | ||||||
|  |                 ); | ||||||
|  | 
 | ||||||
|  |                 foreach (var pointLight in PointLights) | ||||||
|  |                 { | ||||||
|  |                     Renderer.PointLightRender( | ||||||
|  |                         DeferredTarget, | ||||||
|  |                         GPosition, | ||||||
|  |                         GAlbedo, | ||||||
|  |                         GNormal, | ||||||
|  |                         GMetallicRoughness, | ||||||
|  |                         camera, | ||||||
|  |                         ModelTransforms, | ||||||
|  |                         pointLight | ||||||
|  |                     ); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 var directionalLight = DirectionalLight(); | ||||||
|  | 
 | ||||||
|  |                 if (directionalLight.HasValue) | ||||||
|  |                 { | ||||||
|  |                     Renderer.DirectionalLightToonRender( | ||||||
|  |                         DeferredTarget, | ||||||
|  |                         GPosition, | ||||||
|  |                         GAlbedo, | ||||||
|  |                         GNormal, | ||||||
|  |                         GMetallicRoughness, | ||||||
|  |                         camera, | ||||||
|  |                         ModelTransforms, | ||||||
|  |                         directionalLight.Value, | ||||||
|  |                         4, | ||||||
|  |                         false | ||||||
|  |                     ); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 Renderer.SkyboxRender( | ||||||
|                     DeferredTarget, |                     DeferredTarget, | ||||||
|                     camera, |                     camera, | ||||||
|                     ModelTransforms, |  | ||||||
|                     AmbientLight, |  | ||||||
|                     PointLights, |  | ||||||
|                     DirectionalLight(), |  | ||||||
|                     ReadComponent<SkyboxComponent>().Skybox |                     ReadComponent<SkyboxComponent>().Skybox | ||||||
|                 ); |                 ); | ||||||
| 
 | 
 | ||||||
|  | @ -212,14 +297,6 @@ namespace KavTest.Renderers | ||||||
|                 SpriteBatch.Draw(DeferredTarget, Vector2.Zero, Color.White); |                 SpriteBatch.Draw(DeferredTarget, Vector2.Zero, Color.White); | ||||||
|                 SpriteBatch.Draw(BillboardTarget, Vector2.Zero, Color.White); |                 SpriteBatch.Draw(BillboardTarget, Vector2.Zero, Color.White); | ||||||
|                 SpriteBatch.End(); |                 SpriteBatch.End(); | ||||||
| 
 |  | ||||||
|                 // foreach (var directionalLight in DirectionalLights) |  | ||||||
|                 // { |  | ||||||
|                 //     Renderer.DepthRender( |  | ||||||
|                 //         ModelTransforms, |  | ||||||
|                 //         directionalLight |  | ||||||
|                 //     ); |  | ||||||
|                 // } |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue