/// <summary> /// Creates all framebuffers from the swapchain images. /// </summary> /// <param name="pass">Render pass.</param> public void CreateFrameBuffers(VKRenderPass pass) { Framebuffer Create(ImageView imageView) => RenderDevice.Handle.CreateFramebuffer(pass.Handle, new[] { imageView }, extent.Width, extent.Height, 1); videoBuffers = ImageViews.Select(Create).ToArray(); }
/// <summary> /// Makes a new instance of <see cref="VKRenderer"/> class, /// this class manage Vulkan assets rendering. /// </summary> public VKRenderer(ISurface videoSurface) : base(videoSurface) { // - Creates vulkan library instance base.Library = new VulkanLibrary(); // - Creates the vulkan physical device base.PhysicalDevice = new VKPhysicalDevice(Library); // - Creates the vulkan graphical device base.GraphicDevice = new VKGraphicDevice(PhysicalDevice); // - Istantiate modules ShaderManager = new VKShaderManager(GraphicDevice); // - Initialize the vertex manager base.VertexManager = new VKVertexBuffer(GraphicDevice, 100, true, 0.2); // - Initialize the index manager base.IndexManager = new VKIndexBuffer(GraphicDevice, 100, true, 0.2); // - Initialize the geometry dispatcher base.GeometryDispatcher = new VKGeometryDispatcher(VertexManager, IndexManager); // - Create a new swapchain Swapchain = new VKSwapChain(PhysicalDevice, GraphicDevice); // - Create the default render pass DefaultRenderPass = new VKRenderPass(GraphicDevice); // - Create the default pipeline Pipeline = new VKPipeline(GraphicDevice, DefaultRenderPass, false); // - Number of frames processing at the same time allowed MaxFrameInFlight = 2; // - Rendering and syncronization Commands = new List <CommandPool>(); CommandBuffers = new List <CommandBuffer[]>(); RenderFinishedSemaphores = new List <Semaphore>(); ImageAvailableSemaphores = new List <Semaphore>(); InFlightFences = new List <Fence>(); ImagesInFlight = new List <Fence>(); }