summaryrefslogtreecommitdiff
path: root/src/mbgl/gfx
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2019-03-20 15:27:13 +0100
committerKonstantin Käfer <mail@kkaefer.com>2019-04-05 11:49:17 +0200
commitbe3b5917c169a6d5e6fcdc3cca15ca78e44dfd1d (patch)
treeaf780c3b78e5d2df7d8bee1f55a6f471a8047801 /src/mbgl/gfx
parent839f4687aacb98440f85660120173c9b9895f46a (diff)
downloadqtlocation-mapboxgl-be3b5917c169a6d5e6fcdc3cca15ca78e44dfd1d.tar.gz
[core] add generic base class for renderbuffers
Diffstat (limited to 'src/mbgl/gfx')
-rw-r--r--src/mbgl/gfx/context.hpp12
-rw-r--r--src/mbgl/gfx/renderbuffer.hpp52
2 files changed, 64 insertions, 0 deletions
diff --git a/src/mbgl/gfx/context.hpp b/src/mbgl/gfx/context.hpp
index e898006ff5..f9b7789696 100644
--- a/src/mbgl/gfx/context.hpp
+++ b/src/mbgl/gfx/context.hpp
@@ -5,6 +5,7 @@
#include <mbgl/gfx/index_vector.hpp>
#include <mbgl/gfx/index_buffer.hpp>
#include <mbgl/gfx/texture.hpp>
+#include <mbgl/gfx/renderbuffer.hpp>
#include <mbgl/gfx/draw_scope.hpp>
#include <mbgl/gfx/program.hpp>
#include <mbgl/gfx/types.hpp>
@@ -121,6 +122,17 @@ protected:
TexturePixelType, TextureChannelDataType) = 0;
public:
+ template <RenderbufferPixelType pixelType>
+ Renderbuffer<pixelType>
+ createRenderbuffer(const Size size) {
+ return { size, createRenderbufferResource(pixelType, size) };
+ }
+
+protected:
+ virtual std::unique_ptr<RenderbufferResource>
+ createRenderbufferResource(RenderbufferPixelType, Size) = 0;
+
+public:
DrawScope createDrawScope() {
return { createDrawScopeResource() };
}
diff --git a/src/mbgl/gfx/renderbuffer.hpp b/src/mbgl/gfx/renderbuffer.hpp
new file mode 100644
index 0000000000..209b7ed3f9
--- /dev/null
+++ b/src/mbgl/gfx/renderbuffer.hpp
@@ -0,0 +1,52 @@
+#pragma once
+
+#include <mbgl/gfx/types.hpp>
+#include <mbgl/util/size.hpp>
+
+#include <memory>
+#include <cassert>
+
+namespace mbgl {
+namespace gfx {
+
+class RenderbufferResource {
+protected:
+ RenderbufferResource() = default;
+
+public:
+ virtual ~RenderbufferResource() = default;
+};
+
+template <RenderbufferPixelType renderbufferType>
+class Renderbuffer final {
+public:
+ Renderbuffer(const Size size_, std::unique_ptr<RenderbufferResource> resource_)
+ : size(size_), resource(std::move(resource_)) {
+ }
+
+ void setShouldClear(bool clear) {
+ dirty = clear;
+ }
+
+ bool needsClearing() const {
+ return dirty;
+ }
+
+ const Size& getSize() const {
+ return size;
+ }
+
+ template <typename T = RenderbufferResource>
+ T& getResource() const {
+ assert(resource);
+ return static_cast<T&>(*resource);
+ }
+
+protected:
+ Size size;
+ bool dirty = false;
+ std::unique_ptr<RenderbufferResource> resource;
+};
+
+} // namespace gfx
+} // namespace mbgl