public void DispatchToRenderStage(IMeshRenderStageModel stage, CommandList cl, RenderCommandQueueItem command) { var surface = _surfaceManager.RetrieveSurface(command.Surface, new GpuSurfaceType[] { GpuSurfaceType.Texture, GpuSurfaceType.Internal }); var source = _surfaceManager.RetrieveSurface(command.Texture0, new GpuSurfaceType[] { GpuSurfaceType.SwapChainOutput, GpuSurfaceType.Internal }); var camera = _cameraManager.RetrieveCameraModel3D(command.Camera); _meshRenderer.Render(cl, stage, source, surface, camera); }
public void Render(CommandList cl, IMeshRenderStageModel stage, GpuSurface source, GpuSurface surface, ICameraModel3D camera) { if (cl == null || stage == null || source == null || surface == null || camera == null) { _frameworkMessenger.Report("Warning: you are feeding the Mesh Stage Renderer null inputs, aborting"); return; } cl.SetFramebuffer(surface.Framebuffer); _viewportManager.ConfigureViewportForActiveFramebuffer(cl); cl.ClearDepthStencil(1.0f); cl.SetPipeline(_pipeline); cl.SetGraphicsResourceSet(0, camera.WvpResource); cl.SetGraphicsResourceSet(1, camera.PositionResource); cl.SetGraphicsResourceSet(2, source.ResourceSet_TexWrap); cl.SetGraphicsResourceSet(3, stage.LightPropertiesResource); cl.SetGraphicsResourceSet(4, stage.LightsResource); cl.SetVertexBuffer(0, stage.MeshVertexBuffer); cl.Draw(stage.MeshNumberVertices); }
public void CacheStageModel(IMeshRenderStageModel model) => CachedMeshRenderStageModel = model;