public void Render(IRendererContext context, RenderPasses renderPass, IRenderable renderable)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (renderable == null)
            {
                throw new ArgumentNullException(nameof(renderable));
            }
            var c  = (VeldridRendererContext)context;
            var cl = c.CommandList;
            var gd = c.GraphicsDevice;
            var sc = c.SceneContext;

            ITextureManager textureManager = Resolve <ITextureManager>();

            if (!(renderable is TileMapWindow window))
            {
                return;
            }

            var tilemap = window.TileMap;

            cl.PushDebugGroup($"Tiles3D:{tilemap.Name}:{tilemap.RenderOrder}");
            TextureView floors = (TextureView)textureManager.GetTexture(tilemap.Floors);
            TextureView walls  = (TextureView)textureManager.GetTexture(tilemap.Walls);

            var miscUniformData = new MiscUniformData {
                TileSize = tilemap.TileSize, Unused1 = 0
            };

            cl.UpdateBuffer(_miscUniformBuffer, 0, miscUniformData);

            var resourceSet = gd.ResourceFactory.CreateResourceSet(new ResourceSetDescription(_layout,
                                                                                              _miscUniformBuffer,
                                                                                              gd.PointSampler,
                                                                                              _textureSampler,
                                                                                              floors,
                                                                                              walls));

            resourceSet.Name = $"RS_TileMap:{tilemap.Name}";
            _resourceSets.Add(resourceSet);

            cl.SetPipeline(_pipeline);
            cl.SetGraphicsResourceSet(0, resourceSet);
            cl.SetGraphicsResourceSet(1, sc.CommonResourceSet);
            cl.SetVertexBuffer(0, _vb);
            cl.SetVertexBuffer(1, _instanceBuffers[window.InstanceBufferId]);
            cl.SetIndexBuffer(_ib, IndexFormat.UInt16);

            cl.DrawIndexed((uint)Indices.Length, (uint)window.Length, 0, 0, 0);
            cl.PopDebugGroup();
        }
示例#2
0
        public void Render(GraphicsDevice gd, CommandList cl, SceneContext sc, RenderPasses renderPass, IRenderable renderable)
        {
            ITextureManager textureManager = Resolve <ITextureManager>();
            var             window         = renderable as TileMapWindow;

            if (window == null)
            {
                return;
            }

            var tilemap = window.TileMap;

            cl.PushDebugGroup($"Tiles3D:{tilemap.Name}:{tilemap.RenderOrder}");
            TextureView floors = textureManager.GetTexture(tilemap.Floors);
            TextureView walls  = textureManager.GetTexture(tilemap.Walls);

            var miscUniformData = new MiscUniformData {
                Position = tilemap.Position, TileSize = tilemap.TileSize, Unused1 = 0, Unused2 = 0
            };

            cl.UpdateBuffer(_miscUniformBuffer, 0, miscUniformData);

            var resourceSet = gd.ResourceFactory.CreateResourceSet(new ResourceSetDescription(_layout,
                                                                                              sc.ProjectionMatrixBuffer,
                                                                                              sc.ModelViewMatrixBuffer,
                                                                                              _miscUniformBuffer,
                                                                                              gd.PointSampler,
                                                                                              sc.PaletteView,
                                                                                              _textureSampler,
                                                                                              floors,
                                                                                              walls));

            _resourceSets.Add(resourceSet);

            cl.SetPipeline(_pipeline);
            cl.SetGraphicsResourceSet(0, resourceSet);
            cl.SetGraphicsResourceSet(1, sc.CommonResourceSet);
            cl.SetVertexBuffer(0, _vb);
            cl.SetVertexBuffer(1, _instanceBuffers[window.InstanceBufferId]);
            cl.SetIndexBuffer(_ib, IndexFormat.UInt16);

            cl.DrawIndexed((uint)Indices.Length, (uint)window.Length, 0, 0, 0);
            cl.PopDebugGroup();
        }