| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
- //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
- #pragma once
- #include "BsVulkanPrerequisites.h"
- #include "BsVulkanResource.h"
- namespace BansheeEngine
- {
- /** @addtogroup Vulkan
- * @{
- */
- /** Represents a single attachment in a Vulkan frame-buffer. */
- struct VULKAN_ATTACHMENT_DESC
- {
- /** View of the image to attach or VK_NULL_HANDLE if none. */
- VkImageView view;
- /** Format of the attached image. */
- VkFormat format;
- };
- /** Contains parameters used for initializing VulkanFrameBuffer object. */
- struct VULKAN_FRAMEBUFFER_DESC
- {
- /** Images describing the color attachments. */
- VULKAN_ATTACHMENT_DESC color[BS_MAX_MULTIPLE_RENDER_TARGETS];
- /** Image describing the depth attachment. */
- VULKAN_ATTACHMENT_DESC depth;
- /** Width of the images, in pixels. All images must be the same size. */
- UINT32 width;
- /** Height of the images, in pixels. All images must be the same size. */
- UINT32 height;
- /** Number of image layers to render to. */
- UINT32 layers;
- /** Number of samples in the attached images. All attachments must have the same number of samples. */
- UINT32 numSamples;
- /** Set to true if framebuffer represents an offscreen surface that will not be presented. */
- bool offscreen;
- };
- /** Vulkan frame buffer containing one or multiple color surfaces, and an optional depth surface. */
- class VulkanFramebuffer : public VulkanResource
- {
- public:
- /** Creates a new frame buffer with the specified image views attached.
- *
- * @param[in] owner Resource manager that allocated this resource.
- * @param[in] desc Description of the frame buffer.
- */
- VulkanFramebuffer(VulkanResourceManager* owner, const VULKAN_FRAMEBUFFER_DESC& desc);
- ~VulkanFramebuffer();
- /** Returns a unique ID of this framebuffer. */
- UINT32 getId() const { return mId; }
- /** Gets internal Vulkan render pass object. */
- VkRenderPass getRenderPass() const { return mRenderPass; }
- /** Gets internal Vulkan framebuffer object. */
- VkFramebuffer getFramebuffer() const { return mFramebuffer; }
- /** Gets the total number of frame-buffer attachments, including both color and depth. */
- UINT32 getNumAttachments() const { return mNumAttachments; }
- /** Gets the number of color frame-buffer attachments. */
- UINT32 getNumColorAttachments() const { return mNumColorAttachments; }
- /** Returns true if the framebuffer has a depth attachment. */
- bool hasDepthAttachment() const { return mHasDepth; }
- /** Returns sample flags that determine if the framebuffer supports multi-sampling, and for how many samples. */
- VkSampleCountFlagBits getSampleFlags() const { return mSampleFlags; }
- private:
- UINT32 mId;
- VkRenderPass mRenderPass;
- VkFramebuffer mFramebuffer;
- UINT32 mNumAttachments;
- UINT32 mNumColorAttachments;
- bool mHasDepth;
- VkSampleCountFlagBits mSampleFlags;
- static UINT32 sNextValidId;
- };
- /** @} */
- }
|