summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/AbstractFramebuffer.h
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2018-01-21 20:22:45 +1000
committerStenzek <stenzek@gmail.com>2018-03-02 20:20:48 +1000
commit4c24a697106471b33973da619a43167c947276aa (patch)
treea3c94597cfbffccc30d56ef58fcfefd2183b0126 /Source/Core/VideoCommon/AbstractFramebuffer.h
parent2a6d9e4713a9a540684795cb10ee6e6462178ba1 (diff)
VideoCommon: Add support for Abstract Framebuffers
Diffstat (limited to 'Source/Core/VideoCommon/AbstractFramebuffer.h')
-rw-r--r--Source/Core/VideoCommon/AbstractFramebuffer.h45
1 files changed, 45 insertions, 0 deletions
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<int> GetRect() const;
+
+protected:
+ AbstractTextureFormat m_color_format;
+ AbstractTextureFormat m_depth_format;
+ u32 m_width;
+ u32 m_height;
+ u32 m_layers;
+ u32 m_samples;
+};