/// <inheritdoc /> public override void Render(GPUContext context, ref RenderContext renderContext, GPUTexture input, GPUTexture output) { if (renderContext.View.Frustum.Contains(Canvas.Bounds.GetBoundingBox()) == ContainmentType.Disjoint) { return; } Profiler.BeginEventGPU("UI Canvas"); // Calculate rendering matrix (world*view*projection) Canvas.GetWorldMatrix(out Matrix worldMatrix); Matrix.Multiply(ref worldMatrix, ref renderContext.View.View, out Matrix viewMatrix); Matrix.Multiply(ref viewMatrix, ref renderContext.View.Projection, out Matrix viewProjectionMatrix); // Pick a depth buffer GPUTexture depthBuffer = Canvas.IgnoreDepth ? null : renderContext.Buffers.DepthBuffer; // Render GUI in 3D var features = Render2D.Features; if (Canvas.RenderMode == CanvasRenderMode.WorldSpace || Canvas.RenderMode == CanvasRenderMode.WorldSpaceFaceCamera) { Render2D.Features &= ~Render2D.RenderingFeatures.VertexSnapping; } Render2D.CallDrawing(Canvas.GUI, context, input, depthBuffer, ref viewProjectionMatrix); Render2D.Features = features; Profiler.EndEventGPU(); }
/// <inheritdoc /> public override void Render(GPUContext context, ref RenderContext renderContext, GPUTexture input, GPUTexture output) { // TODO: apply frustum culling to skip rendering if canvas is not in a viewport Profiler.BeginEventGPU("UI Canvas"); // Calculate rendering matrix (world*view*projection) Canvas.GetWorldMatrix(out Matrix worldMatrix); Matrix.Multiply(ref worldMatrix, ref renderContext.View.View, out Matrix viewMatrix); Matrix.Multiply(ref viewMatrix, ref renderContext.View.Projection, out Matrix viewProjectionMatrix); // Pick a depth buffer GPUTexture depthBuffer = Canvas.IgnoreDepth ? null : renderContext.Buffers.DepthBuffer; // Render GUI in 3D Render2D.CallDrawing(Canvas.GUI, context, input, depthBuffer, ref viewProjectionMatrix); Profiler.EndEventGPU(); }
/// <inheritdoc /> public override void Render(GPUContext context, SceneRenderTask task, RenderTarget input, RenderTarget output) { // TODO: apply frustum culling to skip rendering if canvas is not in a viewport Profiler.BeginEventGPU("UI Canvas"); // Calculate rendering matrix (world*view*projection) Matrix viewProjection; Matrix world; Canvas.GetWorldMatrix(out world); Matrix view; Matrix.Multiply(ref world, ref task.View.View, out view); Matrix.Multiply(ref view, ref task.View.Projection, out viewProjection); // Pick a depth buffer RenderTarget depthBuffer = Canvas.IgnoreDepth ? null : task.Buffers.DepthBuffer; // Render GUI in 3D Render2D.CallDrawing(Canvas.GUI, context, input, depthBuffer, ref viewProjection); Profiler.EndEventGPU(); }