/// <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); }
public virtual void DestroyDeviceObjects() { _disposer.DisposeAll(); PaletteView?.Dispose(); PaletteTexture?.Dispose(); PaletteView = null; PaletteTexture = null; }
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; }
public void Dispose() { _disposer.DisposeAll(); PaletteView?.Dispose(); PaletteTexture?.Dispose(); CommonResourceSet?.Dispose(); PaletteView = null; PaletteTexture = null; CommonResourceSet = null; }
public void DestroyDeviceObjects() { _disposer.DisposeAll(); PaletteView?.Dispose(); PaletteTexture?.Dispose(); CommonResourceSet?.Dispose(); PaletteView = null; PaletteTexture = null; CommonResourceSet = null; }
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); }
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); }
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]]); }
void GeneratePalette() { PaletteTexture = new PaletteTexture(Palette.Name, Palette.GetPaletteAtTime(PaletteFrame)); }
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]); } } }