public DebugGuiRenderer(IFramebufferHolder framebuffer) { _framebuffer = framebuffer; On <InputEvent>(e => _imguiRenderer?.Update((float)e.DeltaSeconds, e.Snapshot)); On <WindowResizedEvent>(e => _imguiRenderer?.WindowResized(e.Width, e.Height)); On <DeviceCreatedEvent>(_ => Dirty()); On <DestroyDeviceObjectsEvent>(_ => Dispose()); }
public EtmRenderer(IFramebufferHolder framebuffer) { _vertexBuffer = new MultiBuffer <Vertex3DTextured>(Cube.Vertices, BufferUsage.VertexBuffer) { Name = "TileMapVertexBuffer" }; _indexBuffer = new MultiBuffer <ushort>(Cube.Indices, BufferUsage.IndexBuffer) { Name = "TileMapIndexBuffer" }; _normalPipeline = BuildPipeline("P_TileMapRenderer", FaceCullMode.Back, framebuffer); _nonCullingPipeline = BuildPipeline("P_TileMapRendererNoCull", FaceCullMode.None, framebuffer); AttachChild(_vertexBuffer); AttachChild(_indexBuffer); AttachChild(_normalPipeline); AttachChild(_nonCullingPipeline); }
public void Render(IRenderable renderable, CommonSet commonSet, IFramebufferHolder framebuffer, CommandList cl, GraphicsDevice device) { if (cl == null) { throw new ArgumentNullException(nameof(cl)); } if (device == null) { throw new ArgumentNullException(nameof(device)); } if (renderable is not DebugGuiRenderable) { throw new ArgumentException($"{GetType().Name} was passed renderable of unexpected type {renderable?.GetType().Name ?? "null"}", nameof(renderable)); } _imguiRenderer.Render(device, cl); cl.SetFullScissorRects(); }
public void Render(IRenderable renderable, CommonSet commonSet, IFramebufferHolder framebuffer, CommandList cl, GraphicsDevice device) { if (cl == null) { throw new ArgumentNullException(nameof(cl)); } if (commonSet == null) { throw new ArgumentNullException(nameof(commonSet)); } if (framebuffer == null) { throw new ArgumentNullException(nameof(framebuffer)); } if (renderable is not EtmWindow window) { throw new ArgumentException($"{GetType().Name} was passed renderable of unexpected type {renderable?.GetType().Name ?? "null"}", nameof(renderable)); } var tilemap = window.Tilemap; cl.PushDebugGroup($"Tiles3D:{tilemap.Name}"); cl.SetPipeline(tilemap.RendererId == DungeonTilemapPipeline.NoCulling ? _nonCullingPipeline.Pipeline : _normalPipeline.Pipeline); cl.SetGraphicsResourceSet(0, tilemap.ResourceSet.ResourceSet); cl.SetGraphicsResourceSet(1, commonSet.ResourceSet); cl.SetVertexBuffer(0, _vertexBuffer.DeviceBuffer); cl.SetVertexBuffer(1, tilemap.TileBuffer); cl.SetIndexBuffer(_indexBuffer.DeviceBuffer, IndexFormat.UInt16); cl.SetFramebuffer(framebuffer.Framebuffer); cl.DrawIndexed((uint)Cube.Indices.Length, (uint)tilemap.Tiles.Length, 0, 0, 0); cl.PopDebugGroup(); }
public IsometricBuilder(IFramebufferHolder framebuffer, int width, int height, int diamondHeight, int tilesPerRow) { Framebuffer = framebuffer ?? throw new ArgumentNullException(nameof(framebuffer)); _labId = Base.Labyrinth.Test1; _layout = AttachChild(new IsometricLayout()); _width = width; _height = height; _pitch = ApiUtil.RadToDeg(MathF.Asin((float)diamondHeight / _width)); _tilesPerRow = tilesPerRow; On <IsoLabEvent>(e => { _labId = e.Id; RecreateLayout(); }); On <IsoModeEvent>(e => { _mode = e.Mode; RecreateLayout(); }); On <IsoYawEvent>(e => { _yaw += e.Delta; Update(); }); On <IsoPitchEvent>(e => { _pitch += e.Delta; Update(); }); On <IsoRowWidthEvent>(e => { _tilesPerRow += e.Delta; if (_tilesPerRow < 1) { _tilesPerRow = 1; } Update(); }); On <IsoWidthEvent>(e => { _width += e.Delta; if (_width < 1) { _width = 1; } Update(); }); On <IsoHeightEvent>(e => { _height += e.Delta; if (_height < 1) { _height = 1; } Update(); }); On <IsoPaletteEvent>(e => { _paletteId = (_paletteId ?? 0) + e.Delta; if (_paletteId <= 0) { _paletteId = null; } Info($"PalId: {_paletteId}"); RecreateLayout(); }); On <IsoLabDeltaEvent>(e => { var newId = _labId.Id + e.Delta; if (newId < 0) { return; } _labId = new LabyrinthId(AssetType.Labyrinth, newId); Info($"LabId: {_labId} ({_labId.Id})"); RecreateLayout(); }); }
static EtmPipeline BuildPipeline(string name, FaceCullMode cullMode, IFramebufferHolder framebuffer) => new()