summaryrefslogtreecommitdiff
path: root/platform/default/mbgl/gl/offscreen_view.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/default/mbgl/gl/offscreen_view.cpp')
-rw-r--r--platform/default/mbgl/gl/offscreen_view.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/platform/default/mbgl/gl/offscreen_view.cpp b/platform/default/mbgl/gl/offscreen_view.cpp
new file mode 100644
index 0000000000..16faf6a4a9
--- /dev/null
+++ b/platform/default/mbgl/gl/offscreen_view.cpp
@@ -0,0 +1,30 @@
+#include <mbgl/gl/offscreen_view.hpp>
+#include <mbgl/gl/context.hpp>
+
+#include <cstring>
+#include <cassert>
+
+namespace mbgl {
+
+OffscreenView::OffscreenView(gl::Context& context_, const Size size_)
+ : size(std::move(size_)), context(context_) {
+ assert(size);
+}
+
+void OffscreenView::bind() {
+ if (!framebuffer) {
+ color = context.createRenderbuffer<gl::RenderbufferType::RGBA>(size);
+ depthStencil = context.createRenderbuffer<gl::RenderbufferType::DepthStencil>(size);
+ framebuffer = context.createFramebuffer(*color, *depthStencil);
+ } else {
+ context.bindFramebuffer = framebuffer->framebuffer;
+ }
+
+ context.viewport = { 0, 0, size };
+}
+
+PremultipliedImage OffscreenView::readStillImage() {
+ return context.readFramebuffer<PremultipliedImage>(size);
+}
+
+} // namespace mbgl