public override void Draw(float time) { var world = Matrix.Translation(0, 0, 50) * Matrix.RotationY(time); // Render cubemap. _deviceContext.Rasterizer.SetViewports(new Viewport(0, 0, CubeMapSize, CubeMapSize, 0.0f, 1.0f)); _deviceContext.OutputMerger.SetTargets(_depthViewCube, _renderTargetViewCube); _deviceContext.ClearDepthStencilView(_depthViewCube, DepthStencilClearFlags.Depth, 1.0f, 0); _deviceContext.ClearRenderTargetView(_renderTargetViewCube, Color4.CornflowerBlue); _deviceContext.VertexShader.Shader = _vertexShaderCubeMap; _deviceContext.GeometryShader.Shader = _geometryShaderCubeMap; _deviceContext.PixelShader.Shader = _pixelShaderCubeMap; _deviceContext.PixelShader.SetShaderResources(1, null); _vertexShaderData.World = world; _vertexShaderData.WorldViewProjection = _vertexShaderData.World * _viewProjectionCube; _deviceContext.SetBufferData(_vertexConstantBuffer, ref _vertexShaderData); var geometryShaderData = new GeometryShaderData { Matrix1 = world * _view1 * _projectionCube, Matrix2 = world * _view2 * _projectionCube, Matrix3 = world * _view3 * _projectionCube, Matrix4 = world * _view4 * _projectionCube, Matrix5 = world * _view5 * _projectionCube, Matrix6 = world * _view6 * _projectionCube }; _deviceContext.SetBufferData(_geometryConstantBuffer, ref geometryShaderData); _model.Draw(_deviceContext); // Render scene. _deviceContext.Rasterizer.SetViewports(new Viewport(0, 0, Width, Height, 0.0f, 1.0f)); _deviceContext.OutputMerger.SetTargets(_depthView, _renderTargetView); _deviceContext.ClearDepthStencilView(_depthView, DepthStencilClearFlags.Depth, 1.0f, 0); _deviceContext.ClearRenderTargetView(_renderTargetView, Color4.Blue); // Draw rotating teapot. _deviceContext.VertexShader.Shader = _vertexShaderStandard; _deviceContext.GeometryShader.Shader = null; _deviceContext.PixelShader.Shader = _pixelShaderStandard; _vertexShaderData.World = world; _vertexShaderData.WorldViewProjection = _vertexShaderData.World * _viewProjection; _deviceContext.SetBufferData(_vertexConstantBuffer, ref _vertexShaderData); _model.Draw(_deviceContext); // Draw stationary teapot. _deviceContext.VertexShader.Shader = _vertexShaderStandard; _deviceContext.GeometryShader.Shader = null; _deviceContext.PixelShader.Shader = _pixelShaderReflective; _vertexShaderData.World = Matrix.Identity; _vertexShaderData.WorldViewProjection = _vertexShaderData.World * _viewProjection; _deviceContext.SetBufferData(_vertexConstantBuffer, ref _vertexShaderData); _deviceContext.PixelShader.SetShaderResources(1, _resourceViewCube); _model.Draw(_deviceContext); // Present! _deviceContext.Present(_swapChain); base.Draw(time); }
public override void Draw(float time) { var world = Matrix.Translation(0, 0, 50) * Matrix.RotationY(time); // Render cubemap. _deviceContext.Rasterizer.SetViewports(new Viewport(0, 0, CubeMapSize, CubeMapSize, 0.0f, 1.0f)); _deviceContext.OutputMerger.SetTargets(_depthViewCube, _renderTargetViewCube); _deviceContext.ClearDepthStencilView(_depthViewCube, DepthStencilClearFlags.Depth, 1.0f, 0); _deviceContext.ClearRenderTargetView(_renderTargetViewCube, Color4.CornflowerBlue); _deviceContext.VertexShader.Shader = _vertexShaderCubeMap; _deviceContext.GeometryShader.Shader = _geometryShaderCubeMap; _deviceContext.PixelShader.Shader = _pixelShaderCubeMap; _deviceContext.PixelShader.SetShaderResources(1, null); _vertexShaderData.World = world; _vertexShaderData.WorldViewProjection = _vertexShaderData.World * _viewProjectionCube; _deviceContext.SetBufferData(_vertexConstantBuffer, ref _vertexShaderData); var geometryShaderData = new GeometryShaderData { Matrix1 = world * _view1 * _projectionCube, Matrix2 = world * _view2 * _projectionCube, Matrix3 = world * _view3 * _projectionCube, Matrix4 = world * _view4 * _projectionCube, Matrix5 = world * _view5 * _projectionCube, Matrix6 = world * _view6 * _projectionCube }; _deviceContext.SetBufferData(_geometryConstantBuffer, ref geometryShaderData); _model.Draw(_deviceContext); // Render scene. _deviceContext.Rasterizer.SetViewports(new Viewport(0, 0, Width, Height, 0.0f, 1.0f)); _deviceContext.OutputMerger.SetTargets(_depthView, _renderTargetView); _deviceContext.ClearDepthStencilView(_depthView, DepthStencilClearFlags.Depth, 1.0f, 0); _deviceContext.ClearRenderTargetView(_renderTargetView, Color4.Blue); // Draw rotating teapot. _deviceContext.VertexShader.Shader = _vertexShaderStandard; _deviceContext.GeometryShader.Shader = null; _deviceContext.PixelShader.Shader = _pixelShaderStandard; _vertexShaderData.World = world; _vertexShaderData.WorldViewProjection = _vertexShaderData.World * _viewProjection; _deviceContext.SetBufferData(_vertexConstantBuffer, ref _vertexShaderData); _model.Draw(_deviceContext); // Draw stationary teapot. _deviceContext.VertexShader.Shader = _vertexShaderStandard; _deviceContext.GeometryShader.Shader = null; _deviceContext.PixelShader.Shader = _pixelShaderReflective; _vertexShaderData.World = Matrix.Identity; _vertexShaderData.WorldViewProjection = _vertexShaderData.World * _viewProjection; _deviceContext.SetBufferData(_vertexConstantBuffer, ref _vertexShaderData); _deviceContext.PixelShader.SetShaderResources(1, _resourceViewCube); _model.Draw(_deviceContext); // Present! _deviceContext.Present(_swapChain); base.Draw(time); }