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(); }
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(); }