public override void Render() { if (!ResourcesLoaded) { return; } var context = this.DeviceManager.Direct3DContext; var vs = this.vertexShader; // OutputMerger targets must be set for every frame in Windows Store apps context.OutputMerger.SetTargets(this.DepthStencilView, this.RenderTargetView); context.ClearDepthStencilView(this.DepthStencilView, SharpDX.Direct3D11.DepthStencilClearFlags.Depth | SharpDX.Direct3D11.DepthStencilClearFlags.Stencil, 1.0f, 0); context.ClearRenderTargetView(this.RenderTargetView, new SharpDX.Color(Color.R, Color.G, Color.B, 1)); // Set the context pipeline state SetContextState(context); ViewMatrix = Matrix.LookAtRH(Camera.Position, Camera.Position + Camera.LookAtDir, Vector3.UnitY); var viewProjection = ViewMatrix * ProjectionMatrix; // Extract camera position from view var camPosition = Matrix.Transpose(Matrix.Invert(ViewMatrix)).Column4; Camera.Position = new Vector3(camPosition.X, camPosition.Y, camPosition.Z); var perFrame = new ConstantBuffers.PerFrame(); perFrame.CameraPosition = Camera.Position; perFrame.Light.Color = new Color(0.8f, 0.8f, 0.8f, 1.0f); var lightDir = Vector3.Transform(new Vector3(1f, -1f, -1f), WorldMatrix); perFrame.Light.Direction = new Vector3(lightDir.X, lightDir.Y, lightDir.Z); context.UpdateSubresource(ref perFrame, perFrameBuffer); var perMaterial = new ConstantBuffers.PerMaterial(); perMaterial.Ambient = new Color4(0.2f); perMaterial.Diffuse = SharpDX.Color.White; perMaterial.Emissive = new Color4(0); perMaterial.Specular = SharpDX.Color.White; perMaterial.SpecularPower = 20f; context.UpdateSubresource(ref perMaterial, perMaterialBuffer); //var scale = this.SwapChainPanel.CompositionScaleX; foreach (var m in meshRenderers) { var worldRotation = Matrix.Identity;// *Matrix.RotationAxis(Vector3.UnitY, clock.ElapsedMilliseconds / 1000.0f); var perObject = new ConstantBuffers.PerObject(); perObject.World = m.World * WorldMatrix * worldRotation; perObject.WorldInverseTranspose = Matrix.Transpose(Matrix.Invert(perObject.World)); perObject.WorldViewProjection = perObject.World * viewProjection; perObject.Transpose(); context.UpdateSubresource(ref perObject, perObjectBuffer); m.Render(); } //textRenderer.Text = "Async resource loading"; //textRenderer.Render(); fpsRenderer.Render(); //// Draw a circle. //var d2dContext = DeviceManager.Direct2DContext; //float radiusX = this.RenderTargetSize.Width / 3.0f; //float radiusY = this.RenderTargetSize.Height / 3.0f; //float strokeWidth = 10.0f *this.SwapChainPanel.CompositionScaleX; //var brush = new SharpDX.Direct2D1.SolidColorBrush(d2dContext, SharpDX.Color.Black); //d2dContext.BeginDraw(); //using (var sc2 = SwapChain.QueryInterface<SwapChain2>()) //{ // d2dContext.Transform = sc2.MatrixTransform; //} //d2dContext.DrawEllipse(new SharpDX.Direct2D1.Ellipse(new Vector2(this.RenderTargetSize.Width / 2.0f, this.RenderTargetSize.Height / 2.0f), radiusX, radiusY), brush, strokeWidth ); //d2dContext.EndDraw(); // Present the render result Present(); }
public override void Render() { if (!ResourcesLoaded) return; var context = this.DeviceManager.Direct3DContext; var vs = this.vertexShader; // OutputMerger targets must be set for every frame in Windows Store apps context.OutputMerger.SetTargets(this.DepthStencilView, this.RenderTargetView); context.ClearDepthStencilView(this.DepthStencilView, SharpDX.Direct3D11.DepthStencilClearFlags.Depth | SharpDX.Direct3D11.DepthStencilClearFlags.Stencil, 1.0f, 0); context.ClearRenderTargetView(this.RenderTargetView, new SharpDX.Color(Color.R, Color.G, Color.B, 1)); // Set the context pipeline state SetContextState(context); ViewMatrix = Matrix.LookAtRH(Camera.Position, Camera.Position + Camera.LookAtDir, Vector3.UnitY); var viewProjection = ViewMatrix * ProjectionMatrix; // Extract camera position from view var camPosition = Matrix.Transpose(Matrix.Invert(ViewMatrix)).Column4; Camera.Position = new Vector3(camPosition.X, camPosition.Y, camPosition.Z); var perFrame = new ConstantBuffers.PerFrame(); perFrame.CameraPosition = Camera.Position; perFrame.Light.Color = new Color(0.8f, 0.8f, 0.8f, 1.0f); var lightDir = Vector3.Transform(new Vector3(1f, -1f, -1f), WorldMatrix); perFrame.Light.Direction = new Vector3(lightDir.X, lightDir.Y, lightDir.Z); context.UpdateSubresource(ref perFrame, perFrameBuffer); var perMaterial = new ConstantBuffers.PerMaterial(); perMaterial.Ambient = new Color4(0.2f); perMaterial.Diffuse = SharpDX.Color.White; perMaterial.Emissive = new Color4(0); perMaterial.Specular = SharpDX.Color.White; perMaterial.SpecularPower = 20f; context.UpdateSubresource(ref perMaterial, perMaterialBuffer); //var scale = this.SwapChainPanel.CompositionScaleX; foreach (var m in meshRenderers) { var worldRotation = Matrix.Identity;// *Matrix.RotationAxis(Vector3.UnitY, clock.ElapsedMilliseconds / 1000.0f); var perObject = new ConstantBuffers.PerObject(); perObject.World = m.World * WorldMatrix * worldRotation; perObject.WorldInverseTranspose = Matrix.Transpose(Matrix.Invert(perObject.World)); perObject.WorldViewProjection = perObject.World * viewProjection; perObject.Transpose(); context.UpdateSubresource(ref perObject, perObjectBuffer); m.Render(); } //textRenderer.Text = "Async resource loading"; //textRenderer.Render(); fpsRenderer.Render(); //// Draw a circle. //var d2dContext = DeviceManager.Direct2DContext; //float radiusX = this.RenderTargetSize.Width / 3.0f; //float radiusY = this.RenderTargetSize.Height / 3.0f; //float strokeWidth = 10.0f *this.SwapChainPanel.CompositionScaleX; //var brush = new SharpDX.Direct2D1.SolidColorBrush(d2dContext, SharpDX.Color.Black); //d2dContext.BeginDraw(); //using (var sc2 = SwapChain.QueryInterface<SwapChain2>()) //{ // d2dContext.Transform = sc2.MatrixTransform; //} //d2dContext.DrawEllipse(new SharpDX.Direct2D1.Ellipse(new Vector2(this.RenderTargetSize.Width / 2.0f, this.RenderTargetSize.Height / 2.0f), radiusX, radiusY), brush, strokeWidth ); //d2dContext.EndDraw(); // Present the render result Present(); }