Beispiel #1
0
 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());
 }
Beispiel #2
0
 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);
 }
Beispiel #3
0
        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();
        }
Beispiel #4
0
    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();
    }
Beispiel #5
0
    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();
        });
    }
Beispiel #6
0
 static EtmPipeline BuildPipeline(string name, FaceCullMode cullMode, IFramebufferHolder framebuffer)
 => new()