コード例 #1
0
 /// <summary>Construct the object</summary>
 public ImmediateContext(Context context, iVrmacDraw factory, PaletteTexture palette)
 {
     resources        = new GpuResources(context, palette);
     states           = new StatesCache(resources);
     depthValues      = DepthValues.create(context.swapChainFormats.depth);
     tesselatorThread = new Tessellate.Tesselator(context, factory);
 }
コード例 #2
0
        public virtual void DestroyDeviceObjects()
        {
            _disposer.DisposeAll();
            PaletteView?.Dispose();
            PaletteTexture?.Dispose();

            PaletteView    = null;
            PaletteTexture = null;
        }
コード例 #3
0
 public GpuResources(Context context, PaletteTexture palette)
 {
     this.context   = context;
     m_vertexBuffer = new DynamicBuffer(context, BindFlags.VertexBuffer, kb(256));
     m_indexBuffer  = new DynamicBuffer(context, BindFlags.IndexBuffer, kb(32));
     createStaticCBuffer(context.swapChainSize, context.dpiScalingFactor);
     context.swapChainResized.add(this, onSwapChainResized);
     paletteTexture = palette;
 }
コード例 #4
0
ファイル: SceneContext.cs プロジェクト: vsafonkin/ualbion
        public void Dispose()
        {
            _disposer.DisposeAll();
            PaletteView?.Dispose();
            PaletteTexture?.Dispose();
            CommonResourceSet?.Dispose();

            PaletteView       = null;
            PaletteTexture    = null;
            CommonResourceSet = null;
        }
コード例 #5
0
ファイル: SceneContext.cs プロジェクト: mrwillbarnz/ualbion
        public void DestroyDeviceObjects()
        {
            _disposer.DisposeAll();
            PaletteView?.Dispose();
            PaletteTexture?.Dispose();
            CommonResourceSet?.Dispose();

            PaletteView       = null;
            PaletteTexture    = null;
            CommonResourceSet = null;
        }
コード例 #6
0
        internal DrawDevice(Context context3d)
        {
            this.context3d    = context3d;
            paletteTexture    = new PaletteTexture(context3d);
            context           = new VrmacDrawContext(context3d, this, factory);
            rootTransform     = new Matrix3x2();
            rootTransform.M31 = -1;
            rootTransform.M32 = 1;

            onResized(context3d.swapChainSize, context3d.dpiScalingFactor);
            context3d.swapChainResized.add(this, onResized);

            fontTextures = new Textures(context3d, factory);
        }
コード例 #7
0
        public void SetCurrentPalette(PaletteTexture newPalette, int newVersion)
        {
            if (SceneContext.PaletteView != null && _paletteTexture == newPalette && _lastPaletteVersion == newVersion)
            {
                return;
            }

            SceneContext.PaletteView?.Dispose();
            SceneContext.PaletteTexture?.Dispose();
            CoreTrace.Log.Info("Scene", "Disposed palette device texture");
            _paletteTexture             = (VeldridPaletteTexture)newPalette;
            _lastPaletteVersion         = newVersion;
            SceneContext.PaletteTexture = _paletteTexture.CreateDeviceTexture(GraphicsDevice, GraphicsDevice.ResourceFactory, TextureUsage.Sampled);
            SceneContext.PaletteView    = GraphicsDevice.ResourceFactory.CreateTextureView(SceneContext.PaletteTexture);
        }
コード例 #8
0
        public SundropCar(Vector2 tilePosition, Facing facing, int?type = null, int?variant = null, string decal = null) : base(false)
        {
            this.tilePosition.Value = tilePosition;
            this.Facing             = facing;
            this.Mirror             = facing == Facing.Left;
            switch (facing)
            {
            case Facing.Down:
                this.RenderRect = Down;
                break;

            case Facing.Up:
                this.RenderRect = Up;
                break;

            case Facing.Left:
            case Facing.Right:
                this.RenderRect = Sideways;
                break;
            }
            int myType    = type ?? Rand.Next(CarTypes.Count);
            int myVariant = variant ?? Rand.Next(CarTypes[myType].Variants.Length);

            this.BaseTexture = Game1.content.Load <Texture2D>(CarTypes[myType].Base);
            if (!TextureCache.ContainsKey(CarTypes[myType].Recolor))
            {
                TextureCache.Add(CarTypes[myType].Recolor, new PaletteTexture(Game1.content.Load <Texture2D>(CarTypes[myType].Recolor), CarTypes[myType].Source));
            }
            this.RecolorTexture = TextureCache[CarTypes[myType].Recolor];
            this.ColorPalette   = CarTypes[myType].Variants[myVariant].Palette;
            var validDecals = CarTypes[myType].Decals.Where(_ => !CarTypes[myType].Variants[myVariant].Disallow.Contains(_.Key)).Select(_ => _.Key).ToList();
            int rand        = Rand.Next(validDecals.Count + 1);

            if (rand == validDecals.Count)
            {
                return;
            }
            this.DecalTexture = Game1.content.Load <Texture2D>(CarTypes[myType].Decals[validDecals[rand]]);
        }
コード例 #9
0
ファイル: PaletteManager.cs プロジェクト: mrwillbarnz/ualbion
 void GeneratePalette()
 {
     PaletteTexture = new PaletteTexture(Palette.Name, Palette.GetPaletteAtTime(PaletteFrame));
 }
コード例 #10
0
        public void RenderAllStages(GraphicsDevice gd, CommandList cl, SceneContext sc, IDictionary <Type, IRenderer> renderers)
        {
            sc.SetCurrentScene(this);

            // Collect all renderables from components
            foreach (var renderer in _renderables.Values)
            {
                renderer.Clear();
            }

            using (PerfTracker.FrameEvent("6.1.1 Collect renderables"))
            {
                Exchange.Raise(new RenderEvent(x =>
                {
                    if (x == null || !_activeRendererTypes.Contains(x.Renderer))
                    {
                        return;
                    }
                    if (!_renderables.ContainsKey(x.Renderer))
                    {
                        _renderables[x.Renderer] = new List <IRenderable>();
                    }
                    _renderables[x.Renderer].Add(x);
                }), this);
            }

            foreach (var renderer in _renderables)
            {
                CoreTrace.Log.CollectedRenderables(renderer.Key.Name, 0, renderer.Value.Count);
            }

            var newPalette = Resolve <IPaletteManager>().PaletteTexture;

            if (sc.PaletteView == null || _paletteTexture != newPalette)
            {
                sc.PaletteView?.Dispose();
                sc.PaletteTexture?.Dispose();
                CoreTrace.Log.Info("Scene", "Disposed palette device texture");
                _paletteTexture   = newPalette;
                sc.PaletteTexture = _paletteTexture.CreateDeviceTexture(gd, gd.ResourceFactory, TextureUsage.Sampled);
                sc.PaletteView    = gd.ResourceFactory.CreateTextureView(sc.PaletteTexture);
            }
            CoreTrace.Log.Info("Scene", "Created palette device texture");

            using (PerfTracker.FrameEvent("6.1.2 Prepare per-frame resources"))
                using (new RenderDebugGroup(cl, "Prepare per-frame resources"))
                {
                    _processedRenderables.Clear();
                    foreach (var renderableGroup in _renderables)
                    {
                        var renderer = renderers[renderableGroup.Key];
                        foreach (var renderable in renderer.UpdatePerFrameResources(gd, cl, sc,
                                                                                    renderableGroup.Value))
                        {
                            if (!_processedRenderables.ContainsKey(renderable.RenderOrder))
                            {
                                _processedRenderables[renderable.RenderOrder] = new List <IRenderable>();
                            }
                            _processedRenderables[renderable.RenderOrder].Add(renderable);
                        }
                    }

                    CoreTrace.Log.CollectedRenderables("ProcessedRenderables",
                                                       _processedRenderables.Count,
                                                       _processedRenderables.Sum(x => x.Value.Count));
                }

            var orderedKeys = _processedRenderables.Keys.OrderBy(x => x).ToList();

            CoreTrace.Log.Info("Scene", "Sorted processed renderables");
            float depthClear = gd.IsDepthRangeZeroToOne ? 1f : 0f;

            // Main scene
            using (PerfTracker.FrameEvent("6.1.3 Main scene pass"))
                using (new RenderDebugGroup(cl, "Main Scene Pass"))
                {
                    sc.UpdateCameraBuffers(cl);
                    cl.SetFramebuffer(sc.MainSceneFramebuffer);
                    var fbWidth  = sc.MainSceneFramebuffer.Width;
                    var fbHeight = sc.MainSceneFramebuffer.Height;
                    cl.SetViewport(0, new Viewport(0, 0, fbWidth, fbHeight, 0, 1));
                    cl.SetFullViewports();
                    cl.SetFullScissorRects();
                    cl.ClearColorTarget(0, _clearColour);
                    cl.ClearDepthStencil(depthClear);
                    foreach (var key in orderedKeys)
                    {
                        Render(gd, cl, sc, RenderPasses.Standard, renderers, _processedRenderables[key]);
                    }
                }

            // 2D Overlays
            using (new RenderDebugGroup(cl, "Overlay"))
            {
                foreach (var key in orderedKeys)
                {
                    Render(gd, cl, sc, RenderPasses.Overlay, renderers, _processedRenderables[key]);
                }
            }

            if (sc.MainSceneColorTexture.SampleCount != TextureSampleCount.Count1)
            {
                cl.ResolveTexture(sc.MainSceneColorTexture, sc.MainSceneResolvedColorTexture);
            }

            using (new RenderDebugGroup(cl, "Duplicator"))
            {
                cl.SetFramebuffer(sc.DuplicatorFramebuffer);
                cl.SetFullViewports();
                foreach (var key in orderedKeys)
                {
                    Render(gd, cl, sc, RenderPasses.Duplicator, renderers, _processedRenderables[key]);
                }
            }

            using (new RenderDebugGroup(cl, "Swapchain Pass"))
            {
                cl.SetFramebuffer(gd.SwapchainFramebuffer);
                cl.SetFullViewports();
                foreach (var key in orderedKeys)
                {
                    Render(gd, cl, sc, RenderPasses.SwapchainOutput, renderers, _processedRenderables[key]);
                }
            }
        }