protected override void LoadContent() { menu = new MenuComponent( content.Load <SpriteFont>(@"Fonts\InterfaceFont"), textureManager.GetTexture("green-button"), textureManager.GetTexture("blue-button"), new[] { "New Game", "Continue", "Options", "Credits", "Exit" }); menu.Postion = new Vector2(1100, 50); base.LoadContent(); }
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 IEnumerable <IRenderable> UpdatePerFrameResources(IRendererContext context, IEnumerable <IRenderable> renderables) { var c = (VeldridRendererContext)context; var gd = c.GraphicsDevice; if (!(renderables.FirstOrDefault() is SkyboxRenderable skybox)) { yield break; } ITextureManager textureManager = Resolve <ITextureManager>(); IDeviceObjectManager objectManager = Resolve <IDeviceObjectManager>(); textureManager?.PrepareTexture(skybox.Texture, context); TextureView textureView = (TextureView)textureManager?.GetTexture(skybox.Texture); var resourceSet = objectManager.Get <ResourceSet>((skybox, textureView)); if (resourceSet == null) { resourceSet = gd.ResourceFactory.CreateResourceSet(new ResourceSetDescription( _resourceLayout, gd.PointSampler, textureView, _uniformBuffer)); resourceSet.Name = $"RS_Sky:{skybox.Texture.Name}"; PerfTracker.IncrementFrameCounter("Create ResourceSet"); objectManager.Set((skybox, textureView), resourceSet); } yield return(skybox); }
public void Render(IRendererContext context, RenderPasses renderPass, IRenderable renderable) { var c = (VeldridRendererContext)context; var cl = c.CommandList; var sc = c.SceneContext; ITextureManager textureManager = Resolve <ITextureManager>(); IDeviceObjectManager dom = Resolve <IDeviceObjectManager>(); EngineFlags engineFlags = Resolve <IEngineSettings>().Flags; // float depth = gd.IsDepthRangeZeroToOne ? 0 : 1; var sprite = (MultiSprite)renderable; var shaderKey = new SpriteShaderKey(sprite, engineFlags); sprite.PipelineId = shaderKey.GetHashCode(); //if (!shaderKey.UseArrayTexture) // return; cl.PushDebugGroup(sprite.Name); if (sc.PaletteView == null) { return; } TextureView textureView = (TextureView)textureManager?.GetTexture(sprite.Key.Texture); var resourceSet = dom.Get <ResourceSet>((sprite, textureView)); var instanceBuffer = dom.Get <DeviceBuffer>((sprite, sprite)); var uniformInfo = new SpriteUniformInfo { Flags = sprite.Key.Flags, TextureWidth = textureView?.Target.Width ?? 1, TextureHeight = textureView?.Target.Height ?? 1 }; if (sprite.Key.ScissorRegion.HasValue) { IWindowManager wm = Resolve <IWindowManager>(); var screenCoordinates = wm.UiToPixel(sprite.Key.ScissorRegion.Value); cl.SetScissorRect(0, (uint)screenCoordinates.X, (uint)screenCoordinates.Y, (uint)screenCoordinates.Width, (uint)screenCoordinates.Height); } cl.UpdateBuffer(_uniformBuffer, 0, uniformInfo); cl.SetPipeline(_pipelines[shaderKey]); cl.SetGraphicsResourceSet(0, resourceSet); cl.SetGraphicsResourceSet(1, sc.CommonResourceSet); cl.SetVertexBuffer(0, _vertexBuffer); cl.SetIndexBuffer(_indexBuffer, IndexFormat.UInt16); cl.SetVertexBuffer(1, instanceBuffer); //cl.SetViewport(0, new Viewport(0, 0, sc.MainSceneColorTexture.Width, sc.MainSceneColorTexture.Height, depth, depth)); cl.DrawIndexed((uint)Indices.Length, (uint)sprite.ActiveInstances, 0, 0, 0); //cl.SetViewport(0, new Viewport(0, 0, sc.MainSceneColorTexture.Width, sc.MainSceneColorTexture.Height, 0, 1)); if (sprite.Key.ScissorRegion.HasValue) { cl.SetFullScissorRect(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(); }
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 sc = c.SceneContext; ITextureManager textureManager = Resolve <ITextureManager>(); IDeviceObjectManager dom = Resolve <IDeviceObjectManager>(); var config = Resolve <CoreConfig>().Visual.Skybox; if (!(Resolve <ICamera>() is PerspectiveCamera camera)) { return; } var skybox = (SkyboxRenderable)renderable; cl.PushDebugGroup(skybox.Name); var uniformInfo = new SkyboxUniformInfo { uYaw = camera.Yaw, uPitch = camera.Pitch, uVisibleProportion = config.VisibleProportion }; cl.UpdateBuffer(_uniformBuffer, 0, uniformInfo); if (sc.PaletteView == null) { return; } TextureView textureView = (TextureView)textureManager?.GetTexture(skybox.Texture); var resourceSet = dom.GetDeviceObject <ResourceSet>((skybox, textureView, null)); cl.SetPipeline(_pipeline); cl.SetGraphicsResourceSet(0, resourceSet); cl.SetGraphicsResourceSet(1, sc.CommonResourceSet); cl.SetVertexBuffer(0, _vertexBuffer); cl.SetIndexBuffer(_indexBuffer, IndexFormat.UInt16); cl.DrawIndexed((uint)Indices.Length, 1, 0, 0, 0); cl.PopDebugGroup(); }
public IEnumerable <IRenderable> UpdatePerFrameResources(GraphicsDevice gd, CommandList cl, SceneContext sc, IEnumerable <IRenderable> renderables) { ITextureManager textureManager = Resolve <ITextureManager>(); IDeviceObjectManager dom = Resolve <IDeviceObjectManager>(); foreach (var sprite in renderables.OfType <MultiSprite>()) { if (sprite.ActiveInstances == 0) { continue; } uint bufferSize = (uint)sprite.Instances.Length * SpriteInstanceData.StructSize; var buffer = dom.Prepare((sprite, sprite), () => { var newBuffer = gd.ResourceFactory.CreateBuffer(new BufferDescription(bufferSize, BufferUsage.VertexBuffer)); newBuffer.Name = $"B_SpriteInst:{sprite.Name}"; PerfTracker.IncrementFrameCounter("Create InstanceBuffer"); return(newBuffer); }, existing => existing.SizeInBytes != bufferSize); if (sprite.InstancesDirty) { cl.UpdateBuffer(buffer, 0, sprite.Instances); PerfTracker.IncrementFrameCounter("Update InstanceBuffers"); } textureManager?.PrepareTexture(sprite.Key.Texture, gd); TextureView textureView = textureManager?.GetTexture(sprite.Key.Texture); dom.Prepare((sprite, textureView), () => { var resourceSet = gd.ResourceFactory.CreateResourceSet(new ResourceSetDescription( _perSpriteResourceLayout, gd.PointSampler, textureView, _uniformBuffer)); resourceSet.Name = $"RS_Sprite:{sprite.Key.Texture.Name}"; PerfTracker.IncrementFrameCounter("Create ResourceSet"); return(resourceSet); }, _ => false ); sprite.InstancesDirty = false; yield return(sprite); } Resolve <ISpriteManager>().Cleanup(); }
public void Render(GraphicsDevice gd, CommandList cl, SceneContext sc, RenderPasses renderPass, IRenderable renderable) { ITextureManager textureManager = Resolve <ITextureManager>(); // float depth = gd.IsDepthRangeZeroToOne ? 0 : 1; var sprite = (MultiSprite)renderable; var shaderKey = new SpriteShaderKey( sprite.Key.Texture.ArrayLayers > 1, !sprite.Flags.HasFlag(SpriteFlags.NoDepthTest)); //if (!shaderKey.UseArrayTexture) // return; cl.PushDebugGroup($"Sprite:{sprite.Key.Texture.Name}:{sprite.Key.RenderOrder}"); TextureView textureView = textureManager?.GetTexture(sprite.Key.Texture); if (sc.PaletteView == null) { return; } var resourceSet = gd.ResourceFactory.CreateResourceSet(new ResourceSetDescription( _perSpriteResourceLayout, sc.ProjectionMatrixBuffer, sc.ModelViewMatrixBuffer, gd.PointSampler, textureView, sc.PaletteView )); resourceSet.Name = $"RS_Sprite:{sprite.Key.Texture.Name}"; _resourceSets.Add(resourceSet); cl.SetPipeline(_pipelines[shaderKey]); cl.SetGraphicsResourceSet(0, resourceSet); cl.SetGraphicsResourceSet(1, sc.CommonResourceSet); cl.SetVertexBuffer(0, _vertexBuffer); cl.SetIndexBuffer(_indexBuffer, IndexFormat.UInt16); cl.SetVertexBuffer(1, _instanceBuffers[sprite.BufferId]); //cl.SetViewport(0, new Viewport(0, 0, sc.MainSceneColorTexture.Width, sc.MainSceneColorTexture.Height, depth, depth)); cl.DrawIndexed((uint)Indices.Length, (uint)sprite.Instances.Length, 0, 0, 0); //cl.SetViewport(0, new Viewport(0, 0, sc.MainSceneColorTexture.Width, sc.MainSceneColorTexture.Height, 0, 1)); cl.PopDebugGroup(); }
public void Render(GraphicsDevice gd, CommandList cl, SceneContext sc, RenderPasses renderPass, IRenderable renderable) { ITextureManager textureManager = Resolve <ITextureManager>(); IDeviceObjectManager dom = Resolve <IDeviceObjectManager>(); // float depth = gd.IsDepthRangeZeroToOne ? 0 : 1; var sprite = (MultiSprite)renderable; var shaderKey = new SpriteShaderKey(sprite); sprite.PipelineId = shaderKey.GetHashCode(); //if (!shaderKey.UseArrayTexture) // return; cl.PushDebugGroup($"Sprite:{sprite.Key.Texture.Name}:{sprite.Key.RenderOrder}"); var uniformInfo = new SpriteUniformInfo { Flags = sprite.Key.Flags }; cl.UpdateBuffer(_uniformBuffer, 0, uniformInfo); if (sc.PaletteView == null) { return; } TextureView textureView = textureManager?.GetTexture(sprite.Key.Texture); var resourceSet = dom.Get <ResourceSet>((sprite, textureView)); var instanceBuffer = dom.Get <DeviceBuffer>((sprite, sprite)); cl.SetPipeline(_pipelines[shaderKey]); cl.SetGraphicsResourceSet(0, resourceSet); cl.SetGraphicsResourceSet(1, sc.CommonResourceSet); cl.SetVertexBuffer(0, _vertexBuffer); cl.SetIndexBuffer(_indexBuffer, IndexFormat.UInt16); cl.SetVertexBuffer(1, instanceBuffer); //cl.SetViewport(0, new Viewport(0, 0, sc.MainSceneColorTexture.Width, sc.MainSceneColorTexture.Height, depth, depth)); cl.DrawIndexed((uint)Indices.Length, (uint)sprite.ActiveInstances, 0, 0, 0); //cl.SetViewport(0, new Viewport(0, 0, sc.MainSceneColorTexture.Width, sc.MainSceneColorTexture.Height, 0, 1)); cl.PopDebugGroup(); }
public IEnumerable <IRenderable> UpdatePerFrameResources(IRendererContext context, IEnumerable <IRenderable> renderables) { var c = (VeldridRendererContext)context; var cl = c.CommandList; var gd = c.GraphicsDevice; var sc = c.SceneContext; ITextureManager textureManager = Resolve <ITextureManager>(); IDeviceObjectManager objectManager = Resolve <IDeviceObjectManager>(); EngineFlags engineFlags = Resolve <IEngineSettings>().Flags; foreach (var renderable in renderables) { var sprite = (MultiSprite)renderable; if (sprite.ActiveInstances == 0) { continue; } var shaderKey = new SpriteShaderKey(sprite, engineFlags); if (!_pipelines.ContainsKey(shaderKey)) { _pipelines.Add(shaderKey, BuildPipeline(gd, sc, shaderKey)); } uint bufferSize = (uint)sprite.Instances.Length * SpriteInstanceData.StructSize; var buffer = objectManager.Get <DeviceBuffer>((sprite, sprite)); if (buffer?.SizeInBytes != bufferSize) { buffer = gd.ResourceFactory.CreateBuffer(new BufferDescription(bufferSize, BufferUsage.VertexBuffer)); buffer.Name = $"B_SpriteInst:{sprite.Name}"; PerfTracker.IncrementFrameCounter("Create InstanceBuffer"); objectManager.Set((sprite, sprite), buffer); } if (sprite.InstancesDirty) { cl.UpdateBuffer(buffer, 0, sprite.Instances); PerfTracker.IncrementFrameCounter("Update InstanceBuffers"); } textureManager?.PrepareTexture(sprite.Key.Texture, context); TextureView textureView = (TextureView)textureManager?.GetTexture(sprite.Key.Texture); var resourceSet = objectManager.Get <ResourceSet>((sprite, textureView)); if (resourceSet == null) { resourceSet = gd.ResourceFactory.CreateResourceSet(new ResourceSetDescription( _perSpriteResourceLayout, gd.PointSampler, textureView, _uniformBuffer)); resourceSet.Name = $"RS_Sprite:{sprite.Key.Texture.Name}"; PerfTracker.IncrementFrameCounter("Create ResourceSet"); objectManager.Set((sprite, textureView), resourceSet); } sprite.InstancesDirty = false; yield return(sprite); } Resolve <ISpriteManager>().Cleanup(); }