diff options
| author | iwubcode <iwubcode@users.noreply.github.com> | 2023-05-28 20:59:02 -0500 |
|---|---|---|
| committer | iwubcode <iwubcode@users.noreply.github.com> | 2023-06-03 14:52:31 -0500 |
| commit | 834f8f7b5cb9b5d9e437c7a3935bfdcc236c422a (patch) | |
| tree | 429b751c40a96b44a920cc9f59afb3813320a1e0 /Source/Core/VideoCommon/AbstractFramebuffer.cpp | |
| parent | 252d3f353aa74b06a1c67daa65eb60f786608a6a (diff) | |
VideoBackends: add support to allow rendering to multiple output textures
Diffstat (limited to 'Source/Core/VideoCommon/AbstractFramebuffer.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/AbstractFramebuffer.cpp | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/Source/Core/VideoCommon/AbstractFramebuffer.cpp b/Source/Core/VideoCommon/AbstractFramebuffer.cpp index 982357e691..beb6c6752b 100644 --- a/Source/Core/VideoCommon/AbstractFramebuffer.cpp +++ b/Source/Core/VideoCommon/AbstractFramebuffer.cpp @@ -6,10 +6,12 @@ AbstractFramebuffer::AbstractFramebuffer(AbstractTexture* color_attachment, AbstractTexture* depth_attachment, + std::vector<AbstractTexture*> additional_color_attachments, AbstractTextureFormat color_format, AbstractTextureFormat depth_format, u32 width, u32 height, u32 layers, u32 samples) : m_color_attachment(color_attachment), m_depth_attachment(depth_attachment), + m_additional_color_attachments(std::move(additional_color_attachments)), m_color_format(color_format), m_depth_format(depth_format), m_width(width), m_height(height), m_layers(layers), m_samples(samples) { @@ -17,13 +19,18 @@ AbstractFramebuffer::AbstractFramebuffer(AbstractTexture* color_attachment, AbstractFramebuffer::~AbstractFramebuffer() = default; -bool AbstractFramebuffer::ValidateConfig(const AbstractTexture* color_attachment, - const AbstractTexture* depth_attachment) +bool AbstractFramebuffer::ValidateConfig( + const AbstractTexture* color_attachment, const AbstractTexture* depth_attachment, + const std::vector<AbstractTexture*>& additional_color_attachments) { // Must have at least a color or depth attachment. if (!color_attachment && !depth_attachment) return false; + // Must have a color attachment if additional color attachments are defined + if (!color_attachment && !additional_color_attachments.empty()) + return false; + // Currently we only expose a single mip level for render target textures. // MSAA textures are not supported with mip levels on most backends, and it simplifies our // handling of framebuffers. @@ -36,6 +43,14 @@ bool AbstractFramebuffer::ValidateConfig(const AbstractTexture* color_attachment return false; } + for (auto* attachment : additional_color_attachments) + { + if (!CheckAttachment(attachment)) + { + return false; + } + } + // If both color and depth are present, their attributes must match. if (color_attachment && depth_attachment) { @@ -48,6 +63,16 @@ bool AbstractFramebuffer::ValidateConfig(const AbstractTexture* color_attachment } } + for (auto* attachment : additional_color_attachments) + { + if (color_attachment->GetConfig().width != attachment->GetConfig().width || + color_attachment->GetConfig().height != attachment->GetConfig().height || + color_attachment->GetConfig().samples != attachment->GetConfig().samples) + { + return false; + } + } + return true; } |
