private void Draw() { Debug.Assert(_window.Exists); int width = _window.Width; int height = _window.Height; if (_windowResized) { _windowResized = false; _gd.ResizeMainWindow((uint)width, (uint)height); _scene.Camera.WindowResized(width, height); _resizeHandled?.Invoke(width, height); CommandList cl = _gd.ResourceFactory.CreateCommandList(); cl.Begin(); _sc.RecreateWindowSizedResources(_gd, cl); cl.End(); _gd.ExecuteCommands(cl); cl.Dispose(); } if (_newSampleCount != null) { _sc.MainSceneSampleCount = _newSampleCount.Value; _newSampleCount = null; DestroyAllObjects(); CreateAllObjects(); } _frameCommands.Begin(); CommonMaterials.FlushAll(_frameCommands); _scene.RenderAllStages(_gd, _frameCommands, _sc); _gd.SwapBuffers(); }
private void DestroyAllObjects() { _frameCommands.Dispose(); _sc.DestroyDeviceObjects(); _scene.DestroyAllDeviceObjects(); CommonMaterials.DestroyAllDeviceObjects(); StaticResourceCache.DestroyAllDeviceObjects(); _gd.WaitForIdle(); }
private void CreateAllObjects() { _frameCommands = _gd.ResourceFactory.CreateCommandList(); _frameCommands.Name = "Frame Commands List"; CommandList initCL = _gd.ResourceFactory.CreateCommandList(); initCL.Name = "Recreation Initialization Command List"; initCL.Begin(); _sc.CreateDeviceObjects(_gd, initCL, _sc); CommonMaterials.CreateAllDeviceObjects(_gd, initCL, _sc); _scene.CreateAllDeviceObjects(_gd, initCL, _sc); initCL.End(); _gd.SubmitCommands(initCL); initCL.Dispose(); }
private void Draw() { Debug.Assert(_window.Exists); int width = _window.Width; int height = _window.Height; if (_windowResized) { _windowResized = false; _gd.ResizeMainWindow((uint)width, (uint)height); _scene.Camera.WindowResized(width, height); _resizeHandled?.Invoke(width, height); } _frameCommands.Begin(); CommonMaterials.FlushAll(_frameCommands); _sc.UpdateCameraBuffers(_frameCommands); // Meh _scene.RenderAllStages(_gd, _frameCommands, _sc); _frameCommands.End(); _gd.ExecuteCommands(_frameCommands); _gd.SwapBuffers(); }
private void ChangeRenderContext(GraphicsBackend backend) { _sc.DestroyDeviceObjects(); _scene.DestroyAllDeviceObjects(); CommonMaterials.DestroyAllDeviceObjects(); _rc.Dispose(); if (_recreateWindow) { WindowCreateInfo windowCI = new WindowCreateInfo { X = _window.X, Y = _window.Y, WindowWidth = _window.Width, WindowHeight = _window.Height, WindowInitialState = _window.WindowState, WindowTitle = "Veldrid NeoDemo" }; _window.Close(); _window = VeldridStartup.CreateWindow(ref windowCI); _window.Resized += () => _windowResized = true; } RenderContextCreateInfo rcCI = new RenderContextCreateInfo { Backend = backend }; _rc = VeldridStartup.CreateRenderContext(ref rcCI, _window); _sc.CreateDeviceObjects(_rc); _scene.CreateAllDeviceObjects(_rc); CommonMaterials.CreateAllDeviceObjects(_rc); }
public NeoDemo() { WindowCreateInfo windowCI = new WindowCreateInfo { X = 50, Y = 50, WindowWidth = 960, WindowHeight = 540, WindowInitialState = WindowState.Normal, WindowTitle = "Veldrid NeoDemo" }; RenderContextCreateInfo rcCI = new RenderContextCreateInfo(); rcCI.DebugContext = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); VeldridStartup.CreateWindowAndRenderContext(ref windowCI, ref rcCI, out _window, out _rc); _window.Resized += () => _windowResized = true; _sc.CreateDeviceObjects(_rc); CommonMaterials.CreateAllDeviceObjects(_rc); _scene = new Scene(_window.Width, _window.Height); _sc.SetCurrentScene(_scene); _igRenderable = new ImGuiRenderable(_window.Width, _window.Height); _resizeHandled += (w, h) => _igRenderable.WindowResized(w, h); _igRenderable.CreateDeviceObjects(_rc); _scene.AddRenderable(_igRenderable); _scene.AddUpdateable(_igRenderable); InfiniteGrid grid = new InfiniteGrid(); grid.CreateDeviceObjects(_rc); _scene.AddRenderable(grid); Skybox skybox = Skybox.LoadDefaultSkybox(); skybox.CreateDeviceObjects(_rc); _scene.AddRenderable(skybox); AddTexturedMesh( "Textures/spnza_bricks_a_diff.png", PrimitiveShapes.Box(10, 10, 10, 10), new Vector3(0, 0, -5), Quaternion.Identity, Vector3.One); AddTexturedMesh( "Textures/spnza_bricks_a_diff.png", PrimitiveShapes.Box(5, 5, 5, 5f), new Vector3(-3, -9, 2), Quaternion.Identity, Vector3.One); AddTexturedMesh( "Textures/spnza_bricks_a_diff.png", PrimitiveShapes.Box(27, 3, 27, 27f), new Vector3(-5, -16, 5), Quaternion.Identity, Vector3.One); AddTexturedMesh( "Textures/spnza_bricks_a_diff.png", PrimitiveShapes.Plane(100, 100, 5), new Vector3(0, -20, 0), Quaternion.Identity, Vector3.One); ShadowmapDrawer texDrawer = new ShadowmapDrawer(_window, () => _sc.NearShadowMapBinding); texDrawer.CreateDeviceObjects(_rc); texDrawer.Position = new Vector2(10, 25); _scene.AddRenderable(texDrawer); texDrawer = new ShadowmapDrawer(_window, () => _sc.MidShadowMapBinding); texDrawer.CreateDeviceObjects(_rc); texDrawer.Position = new Vector2(20 + texDrawer.Size.X, 25); _scene.AddRenderable(texDrawer); texDrawer = new ShadowmapDrawer(_window, () => _sc.FarShadowMapBinding); texDrawer.CreateDeviceObjects(_rc); texDrawer.Position = new Vector2(30 + (texDrawer.Size.X * 2), 25); _scene.AddRenderable(texDrawer); }