Наследование: MonoBehaviour
Пример #1
0
        void Render(GraphicsDevice gd,
                    CommandList cl,
                    SceneContext sc,
                    RenderPasses pass,
                    IDictionary <Type, IRenderer> renderers,
                    IEnumerable <IRenderable> renderableList)
        {
            foreach (IRenderable renderable in renderableList)
            {
                if (renderable is IScreenSpaceRenderable)
                {
                    sc.UpdateModelTransform(cl, renderable.Transform);
                }
                else
                {
                    sc.UpdateModelTransform(cl, Camera.ViewMatrix * renderable.Transform);
                }

                var renderer = renderers[renderable.Renderer];
                if ((renderer.RenderPasses & pass) != 0)
                {
                    renderer.Render(gd, cl, sc, pass, renderable);
                }
            }
        }
Пример #2
0
 private void CollectVisibleObjects(
     ref BoundingFrustum frustum,
     RenderPasses renderPass,
     List <CullRenderable> renderables)
 {
     _octree.GetContainedObjects(frustum, renderables, GetFilter(renderPass));
 }
Пример #3
0
        public void Render(
            RenderContext rc,
            SceneContext sc,
            RenderPasses pass,
            BoundingFrustum frustum,
            Comparer <RenderItemIndex> comparer = null)
        {
            _renderQueue.Clear();

            _cullableStage.Clear();
            CollectVisibleObjects(ref frustum, pass, _cullableStage);
            _renderQueue.AddRange(_cullableStage, _camera.Position);

            _renderableStage.Clear();
            CollectFreeObjects(pass, _renderableStage);
            _renderQueue.AddRange(_renderableStage, _camera.Position);

            if (comparer == null)
            {
                _renderQueue.Sort();
            }
            else
            {
                _renderQueue.Sort(comparer);
            }

            foreach (Renderable renderable in _renderQueue)
            {
                renderable.Render(rc, sc, pass);
            }
        }
Пример #4
0
        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 dom = Resolve <IDeviceObjectManager>();

            var overlay = (InfoOverlay)renderable;

            cl.PushDebugGroup(overlay.Name);

            var resourceSet = dom.GetDeviceObject <ResourceSet>((overlay, overlay, "ResourceSet"));

            cl.SetPipeline(_pipeline);
            cl.SetGraphicsResourceSet(0, resourceSet);
            cl.SetGraphicsResourceSet(1, c.SceneContext.CommonResourceSet);
            cl.SetVertexBuffer(0, _vertexBuffer);
            cl.SetIndexBuffer(_indexBuffer, IndexFormat.UInt16);
            cl.DrawIndexed((uint)Indices.Length);
            cl.PopDebugGroup();
        }
Пример #5
0
        public void Render(
            GraphicsDevice gd,
            CommandList rc,
            SceneContext sc,
            RenderPasses pass,
            BoundingFrustum frustum,
            Vector3 viewPosition,
            RenderQueue renderQueue,
            List <IRenderable> renderableList,
            Comparer <RenderItemIndex> comparer,
            bool threaded)
        {
            renderQueue.Clear();

            renderableList.Clear();
            CollectFreeObjects(pass, renderableList);
            renderQueue.AddRange(renderableList, viewPosition);

            if (comparer == null)
            {
                renderQueue.Sort();
            }
            else
            {
                renderQueue.Sort(comparer);
            }

            foreach (var renderable in renderQueue)
            {
                renderable.Render(gd, rc, sc, pass);
            }
        }
Пример #6
0
 public RenderContext(GraphicsDevice gd, CommandList cl, SceneContext sc, RenderPasses renderPass)
 {
     GraphicsDevice = gd;
     CommandList    = cl;
     SceneContext   = sc;
     RenderPass     = renderPass;
 }
Пример #7
0
        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();
        }
Пример #8
0
        public void Render(
            GraphicsDevice gd,
            CommandList rc,
            SceneContext sc,
            RenderPasses pass,
            BoundingFrustum frustum,
            RenderQueue renderQueue,
            List <CullRenderable> cullRenderableList,
            List <Renderable> renderableList,
            Comparer <RenderItemIndex> comparer,
            bool threaded)
        {
            renderQueue.Clear();

            cullRenderableList.Clear();
            CollectVisibleObjects(ref frustum, pass, cullRenderableList);
            renderQueue.AddRange(cullRenderableList, _camera.Position);

            renderableList.Clear();
            CollectFreeObjects(pass, renderableList);
            renderQueue.AddRange(renderableList, _camera.Position);

            if (comparer == null)
            {
                renderQueue.Sort();
            }
            else
            {
                renderQueue.Sort(comparer);
            }

            foreach (Renderable renderable in renderQueue)
            {
                renderable.Render(gd, rc, sc, pass);
            }

            if (threaded)
            {
                foreach (CullRenderable thing in cullRenderableList)
                {
                    _allPerFrameRenderablesConcurrentBag.Add(thing);
                }
                foreach (Renderable thing in renderableList)
                {
                    _allPerFrameRenderablesConcurrentBag.Add(thing);
                }
            }
            else
            {
                foreach (CullRenderable thing in cullRenderableList)
                {
                    _allPerFrameRenderablesSet.Add(thing);
                }
                foreach (Renderable thing in renderableList)
                {
                    _allPerFrameRenderablesSet.Add(thing);
                }
            }
        }
Пример #9
0
 public void Render(GraphicsDevice gd, CommandList cl, GraphicsSystem sc, RenderPasses renderPass)
 {
     cl.SetPipeline(_pipeline);
     cl.SetGraphicsResourceSet(0, UseTintedTexture ? sc.DuplicatorTargetSet1 : sc.DuplicatorTargetSet0);
     cl.SetVertexBuffer(0, _vb);
     cl.SetIndexBuffer(_ib, IndexFormat.UInt16);
     cl.DrawIndexed(6, 1, 0, 0, 0);
 }
Пример #10
0
        public void Render(IRendererContext context, RenderPasses renderPass, IRenderable r)
        {
            var c = (VeldridRendererContext)context;

            ApiUtil.Assert(renderPass == RenderPasses.Standard);
            _imguiRenderer.Render(c.GraphicsDevice, c.CommandList);
            c.CommandList.SetFullScissorRects();
        }
Пример #11
0
        public void Render(GraphicsDevice gd, CommandList cl, SceneContext sc, RenderPasses renderPass)
        {
            Debug.Assert(renderPass == RenderPasses.Overlay);

            ImGuiInterface.Draw();

            _imguiRenderer.Render(gd, cl);
        }
Пример #12
0
 public void Render(GraphicsDevice gd, CommandList cl, GraphicsSystem sc, RenderPasses renderPass)
 {
     cl.SetPipeline(_pipeline);
     cl.SetGraphicsResourceSet(0, sc.MainSceneViewResourceSet);
     cl.SetVertexBuffer(0, _vb);
     cl.SetIndexBuffer(_ib, IndexFormat.UInt16);
     cl.DrawIndexed(6, 1, 0, 0, 0);
 }
Пример #13
0
 public void Render(GraphicsDevice gd, CommandList cl, SceneContext sc, RenderPasses renderPass, IRenderable r)
 {
     cl.SetPipeline(_pipeline);
     cl.SetGraphicsResourceSet(0, sc.DuplicatorTargetSet0);
     cl.SetVertexBuffer(0, _vb);
     cl.SetIndexBuffer(_ib, IndexFormat.UInt16);
     cl.DrawIndexed(6, 1, 0, 0, 0);
 }
Пример #14
0
 public void Render(GraphicsDevice gd, CommandList cl, SceneContext sc, RenderPasses renderPass)
 {
     cl.SetVertexBuffer(0, _vb);
     cl.SetIndexBuffer(_ib, IndexFormat.UInt16);
     cl.SetPipeline(_pipeline);
     cl.SetGraphicsResourceSet(0, _resourceSet);
     cl.DrawIndexed((uint)s_indices.Length, 1, 0, 0, 0);
 }
Пример #15
0
        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 dom            = Resolve <IDeviceObjectManager>();
            var engineFlags    = Resolve <IEngineSettings>().Flags;
            var textureManager = Resolve <ITextureManager>();

            var sprite    = (MultiSprite)renderable;
            var shaderKey = new SpriteShaderKey(sprite, engineFlags);

            sprite.PipelineId = shaderKey.GetHashCode();

            //if (!shaderKey.UseArrayTexture)
            //    return;

            cl.PushDebugGroup(sprite.Name);

            if (c.SceneContext.PaletteView == null)
            {
                return;
            }

            TextureView textureView    = (TextureView)textureManager?.GetTexture(sprite.Key.Texture);
            var         resourceSet    = dom.GetDeviceObject <ResourceSet>((sprite, textureView, "ResourceSet"));
            var         instanceBuffer = dom.GetDeviceObject <DeviceBuffer>((sprite, sprite, "InstanceBuffer"));

            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.SetPipeline(_pipelines[shaderKey]);
            cl.SetGraphicsResourceSet(0, resourceSet);
            cl.SetGraphicsResourceSet(1, c.SceneContext.CommonResourceSet);
            cl.SetVertexBuffer(0, _vertexBuffer);
            cl.SetIndexBuffer(_indexBuffer, IndexFormat.UInt16);
            cl.SetVertexBuffer(1, instanceBuffer);

            cl.DrawIndexed((uint)Indices.Length, (uint)sprite.ActiveInstances, 0, 0, 0);
            if (sprite.Key.ScissorRegion.HasValue)
            {
                cl.SetFullScissorRect(0);
            }
            cl.PopDebugGroup();
        }
Пример #16
0
 private void CollectFreeObjects(RenderPasses renderPass, List <Renderable> renderables)
 {
     foreach (Renderable r in _freeRenderables)
     {
         if ((r.RenderPasses & renderPass) != 0)
         {
             renderables.Add(r);
         }
     }
 }
Пример #17
0
        private Func <CullRenderable, bool> GetFilter(RenderPasses renderPass)
        {
            if (!_filters.TryGetValue(renderPass, out Func <CullRenderable, bool> filter))
            {
                filter = cr => (cr.RenderPasses & renderPass) != 0;
                _filters.Add(renderPass, filter);
            }

            return(filter);
        }
Пример #18
0
        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();
        }
Пример #19
0
        public void Render(GraphicsDevice gd, CommandList cl, SceneContext sc, RenderPasses renderPass)
        {
            cl.SetVertexBuffer(0, _vb);
            cl.SetIndexBuffer(_ib, IndexFormat.UInt16);
            cl.SetPipeline(_pipeline);
            cl.SetGraphicsResourceSet(0, _resourceSet);
            float depth = gd.IsDepthRangeZeroToOne ? 0 : 1;

            cl.SetViewport(0, new Viewport(0, 0, sc.MainSceneColorTexture.Width, sc.MainSceneColorTexture.Height, depth, depth));
            cl.DrawIndexed((uint)s_indices.Length, 1, 0, 0, 0);
        }
Пример #20
0
        public void Render(IRendererContext context, RenderPasses renderPass, IRenderable r)
        {
            var c  = (VeldridRendererContext)context;
            var cl = c.CommandList;
            var sc = c.SceneContext;

            cl.SetPipeline(_pipeline);
            cl.SetGraphicsResourceSet(0, sc.DuplicatorTargetSet0);
            cl.SetVertexBuffer(0, _vb);
            cl.SetIndexBuffer(_ib, IndexFormat.UInt16);
            cl.DrawIndexed(6, 1, 0, 0, 0);
        }
Пример #21
0
        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();
        }
Пример #22
0
        public void Render(GraphicsDevice gd, CommandList cl, SceneContext sc, RenderPasses renderPass)
        {
            _active        = true;
            _renderContext = new RenderContext {
                GraphicsDevice = gd, CommandList = cl, SceneContext = sc, RenderPass = renderPass
            };

            _renderModels(this, sc.ViewState);

            _renderContext = new RenderContext();
            _active        = false;
        }
Пример #23
0
        public void Render(IRendererContext context, RenderPasses renderPass, IRenderable r)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (r == null)
            {
                throw new ArgumentNullException(nameof(r));
            }
            var c = (VeldridRendererContext)context;

            ApiUtil.Assert(renderPass == RenderPasses.Standard);
            _imguiRenderer.Render(c.GraphicsDevice, c.CommandList);
            c.CommandList.SetFullScissorRects();
        }
Пример #24
0
        public override void Render(RenderContext rc, SceneContext sc, RenderPasses renderPass)
        {
            rc.VertexBuffer = _vb;
            rc.IndexBuffer  = _ib;
            rc.ShaderSet    = _shaderSet;
            rc.ShaderResourceBindingSlots = _resourceSlots;
            rc.SetConstantBuffer(0, sc.ProjectionMatrixBuffer);
            Matrix4x4 viewMat = Utilities.ConvertToMatrix3x3(sc.Camera.ViewMatrix);

            _viewMatrixBuffer.SetData(ref viewMat);
            rc.SetConstantBuffer(1, _viewMatrixBuffer);
            RasterizerState previousRasterState = rc.RasterizerState;

            rc.SetRasterizerState(_rasterizerState);
            rc.SetTexture(2, _cubemapBinding);
            rc.DrawIndexedPrimitives(s_indices.Length, 0);
            rc.SetRasterizerState(previousRasterState);
        }
Пример #25
0
        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();
        }
Пример #26
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();
        }
Пример #27
0
        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();
        }
Пример #28
0
        public override void Render(RenderContext rc, SceneContext sc, RenderPasses renderPass)
        {
            rc.ShaderSet = _shaderSet;
            rc.ShaderResourceBindingSlots = _resourceBindings;
            rc.SetConstantBuffer(0, sc.ProjectionMatrixBuffer);
            rc.SetConstantBuffer(1, sc.ViewMatrixBuffer);
            rc.SetTexture(2, _textureBinding);
            rc.SetSamplerState(3, rc.PointSampler);
            rc.VertexBuffer = _vb;
            rc.IndexBuffer  = _ib;
            BlendState previousBlend = rc.BlendState;

            rc.BlendState = rc.AlphaBlend;
            RasterizerState previousRS = rc.RasterizerState;

            rc.RasterizerState = _rasterizerState;
            rc.DrawIndexedPrimitives(6);
            rc.BlendState      = previousBlend;
            rc.RasterizerState = previousRS;
        }
Пример #29
0
        public void Render(GraphicsDevice gd, CommandList cl, GraphicsSystem sc, RenderPasses renderPass)
        {
            if (_materialPropsOwned)
            {
                _materialProps.FlushChanges(cl);
            }

            if ((renderPass & Glitch.Graphics.RenderPasses.AllShadowMap) != 0)
            {
                int shadowMapIndex = renderPass == Glitch.Graphics.RenderPasses.ShadowMapNear ? 0 : renderPass == Glitch.Graphics.RenderPasses.ShadowMapMid ? 1 : 2;
                RenderShadowMap(cl, sc, shadowMapIndex);
            }
            else if (renderPass == Glitch.Graphics.RenderPasses.Standard || renderPass == Glitch.Graphics.RenderPasses.AlphaBlend)
            {
                RenderStandard(cl, sc, false);
            }
            else if (renderPass == Glitch.Graphics.RenderPasses.ReflectionMap)
            {
                RenderStandard(cl, sc, true);
            }
        }
Пример #30
0
        public void Render(GraphicsDevice gd, CommandList cl, SceneContext sc, RenderPasses renderPass)
        {
            var renderContext = new RenderContext(gd, cl, sc, renderPass);

            foreach (var renderable in _renderables)
            {
                renderable.Render(this, renderContext);
            }

            //TODO: render all entities known to the renderer
            //_renderModels(this, sc.ViewState);

            /*
             * //TODO: let game render world?
             * if (sc.Scene.WorldModel != null)
             * {
             *  var data = new BrushModelRenderData
             *  {
             *      Shared = new SharedModelRenderData
             *      {
             *          Index = 0,
             *
             *          Origin = Vector3.Zero,
             *          Angles = Vector3.Zero,
             *          Scale = Vector3.One,
             *
             *          Effects = EffectsFlags.None,
             *
             *          RenderMode = RenderMode.Normal,
             *          RenderAmount = 0,
             *          RenderColor = Vector3.Zero,
             *          RenderFX = RenderFX.None,
             *      },
             *      Model = sc.Scene.WorldModel
             *  };
             *
             *  RenderBrushModel(ref data);
             * }
             */
        }