private void RecreateSwapChain() { this.device.WaitIdle(); foreach (var frameBuffer in this.frameBuffers) { frameBuffer.Dispose(); } this.frameBuffers = null; this.pipeline.Dispose(); this.pipeline = null; this.pipelineLayout.Dispose(); this.pipelineLayout = null; foreach (var imageView in this.swapChainImageViews) { imageView.Dispose(); } this.swapChainImageViews = null; this.renderPass.Dispose(); this.renderPass = null; this.swapChain.Dispose(); this.swapChain = null; this.CreateSwapChain(); this.CreateImageViews(); this.CreateRenderPass(); this.CreateGraphicsPipeline(); this.CreateFrameBuffers(); this.CreateCommandBuffers(); }
private void CreateSwapChain() { SwapChainSupportDetails swapChainSupport = this.QuerySwapChainSupport(this.physicalDevice); uint imageCount = swapChainSupport.Capabilities.MinImageCount + 1; if (swapChainSupport.Capabilities.MaxImageCount > 0 && imageCount > swapChainSupport.Capabilities.MaxImageCount) { imageCount = swapChainSupport.Capabilities.MaxImageCount; } SurfaceFormat surfaceFormat = this.ChooseSwapSurfaceFormat(swapChainSupport.Formats); QueueFamilyIndices queueFamilies = this.FindQueueFamilies(this.physicalDevice); var indices = queueFamilies.Indices.ToArray(); Extent2D extent = this.ChooseSwapExtent(swapChainSupport.Capabilities); this.swapChain = device.CreateSwapchain(new SwapchainCreateInfo { Surface = surface, Flags = SwapchainCreateFlags.None, PresentMode = this.ChooseSwapPresentMode(swapChainSupport.PresentModes), MinImageCount = imageCount, ImageExtent = extent, ImageUsage = ImageUsageFlags.ColorAttachment, PreTransform = swapChainSupport.Capabilities.CurrentTransform, ImageArrayLayers = 1, ImageSharingMode = indices.Length == 1 ? SharingMode.Exclusive : SharingMode.Concurrent, QueueFamilyIndices = indices, ImageFormat = surfaceFormat.Format, ImageColorSpace = surfaceFormat.ColorSpace, Clipped = true, CompositeAlpha = CompositeAlphaFlags.Opaque, OldSwapchain = this.swapChain }); this.swapChainImages = this.swapChain.GetImages(); this.swapChainFormat = surfaceFormat.Format; this.swapChainExtent = extent; }
private void TearDown() { device.WaitIdle(); this.renderFinishedSemaphore.Dispose(); this.renderFinishedSemaphore = null; this.imageAvailableSemaphore.Dispose(); this.imageAvailableSemaphore = null; this.descriptorPool.Dispose(); this.descriptorPool = null; this.descriptorSet = null; this.device.FreeMemory(this.uniformBufferMemory); this.uniformBufferMemory = null; this.uniformBuffer.Dispose(); this.uniformBuffer = null; this.device.FreeMemory(this.uniformStagingBufferMemory); this.uniformStagingBufferMemory = null; this.uniformStagingBuffer.Dispose(); this.uniformStagingBuffer = null; this.device.FreeMemory(this.indexBufferMemory); this.indexBufferMemory = null; this.indexBuffer.Dispose(); this.indexBuffer = null; this.device.FreeMemory(this.vertexBufferMemory); this.vertexBufferMemory = null; this.vertexBuffer.Dispose(); this.vertexBuffer = null; this.commandPool.Dispose(); this.commandPool = null; this.commandBuffers = null; this.transientCommandPool.Dispose(); this.transientCommandPool = null; foreach (var frameBuffer in this.frameBuffers) { frameBuffer.Dispose(); } this.frameBuffers = null; this.pipeline.Dispose(); this.pipeline = null; this.pipelineLayout.Dispose(); this.pipelineLayout = null; foreach (var imageView in this.swapChainImageViews) { imageView.Dispose(); } this.swapChainImageViews = null; this.descriptorSetLayout.Dispose(); this.descriptorSetLayout = null; this.renderPass.Dispose(); this.renderPass = null; this.swapChain.Dispose(); this.swapChain = null; this.device.Dispose(); this.device = null; this.surface.Dispose(); this.surface = null; this.debugCallback.Dispose(); this.debugCallback = null; this.instance.Dispose(); this.instance = null; }