From 4c24a697106471b33973da619a43167c947276aa Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sun, 21 Jan 2018 20:22:45 +1000 Subject: VideoCommon: Add support for Abstract Framebuffers --- Source/Core/VideoCommon/AbstractFramebuffer.h | 45 +++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Source/Core/VideoCommon/AbstractFramebuffer.h (limited to 'Source/Core/VideoCommon/AbstractFramebuffer.h') diff --git a/Source/Core/VideoCommon/AbstractFramebuffer.h b/Source/Core/VideoCommon/AbstractFramebuffer.h new file mode 100644 index 0000000000..9d4b2d29cd --- /dev/null +++ b/Source/Core/VideoCommon/AbstractFramebuffer.h @@ -0,0 +1,45 @@ +// Copyright 2018 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#pragma once + +#include "Common/CommonTypes.h" +#include "Common/MathUtil.h" +#include "VideoCommon/TextureConfig.h" + +class AbstractTexture; + +// An abstract framebuffer wraps a backend framebuffer/view object, which can be used to +// draw onto a texture. Currently, only single-level textures are supported. Multi-layer +// textures will render by default only to the first layer, however, multiple layers +// be rendered in parallel using geometry shaders and layer variable. + +class AbstractFramebuffer +{ +public: + AbstractFramebuffer(AbstractTextureFormat color_format, AbstractTextureFormat depth_format, + u32 width, u32 height, u32 layers, u32 samples); + virtual ~AbstractFramebuffer(); + + static bool ValidateConfig(const AbstractTexture* color_attachment, + const AbstractTexture* depth_attachment); + + AbstractTextureFormat GetColorFormat() const { return m_color_format; } + AbstractTextureFormat GetDepthFormat() const { return m_depth_format; } + bool HasColorBuffer() const { return m_color_format != AbstractTextureFormat::Undefined; } + bool HasDepthBuffer() const { return m_depth_format != AbstractTextureFormat::Undefined; } + u32 GetWidth() const { return m_width; } + u32 GetHeight() const { return m_height; } + u32 GetLayers() const { return m_layers; } + u32 GetSamples() const { return m_samples; } + MathUtil::Rectangle GetRect() const; + +protected: + AbstractTextureFormat m_color_format; + AbstractTextureFormat m_depth_format; + u32 m_width; + u32 m_height; + u32 m_layers; + u32 m_samples; +}; -- cgit v1.2.3