summaryrefslogtreecommitdiff
path: root/src/mbgl/gl
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2019-04-02 22:35:46 +0200
committerKonstantin Käfer <mail@kkaefer.com>2019-04-05 11:49:17 +0200
commitd7aaf83421261087a99d18d92eca9637c1bf72f8 (patch)
treedf938a5b6fe40c9e665e028285d28eb88e0dfea2 /src/mbgl/gl
parentb1a2513b61761d09b3ae08904c03d28caedd09fe (diff)
downloadqtlocation-mapboxgl-d7aaf83421261087a99d18d92eca9637c1bf72f8.tar.gz
[core] introduce gfx::RenderPass
Diffstat (limited to 'src/mbgl/gl')
-rw-r--r--src/mbgl/gl/command_encoder.cpp6
-rw-r--r--src/mbgl/gl/command_encoder.hpp5
-rw-r--r--src/mbgl/gl/program.hpp1
-rw-r--r--src/mbgl/gl/render_pass.cpp28
-rw-r--r--src/mbgl/gl/render_pass.hpp31
5 files changed, 71 insertions, 0 deletions
diff --git a/src/mbgl/gl/command_encoder.cpp b/src/mbgl/gl/command_encoder.cpp
index e1bf5e1187..26d1008789 100644
--- a/src/mbgl/gl/command_encoder.cpp
+++ b/src/mbgl/gl/command_encoder.cpp
@@ -1,4 +1,5 @@
#include <mbgl/gl/command_encoder.hpp>
+#include <mbgl/gl/render_pass.hpp>
#include <mbgl/gl/context.hpp>
#include <mbgl/gl/debugging_extension.hpp>
#include <mbgl/platform/gl_functions.hpp>
@@ -13,6 +14,11 @@ CommandEncoder::~CommandEncoder() {
context.performCleanup();
}
+std::unique_ptr<gfx::RenderPass>
+CommandEncoder::createRenderPass(const char* name, const gfx::RenderPassDescriptor& descriptor) {
+ return std::make_unique<gl::RenderPass>(*this, name, descriptor);
+}
+
void CommandEncoder::pushDebugGroup(const char* name) {
(void)name;
#ifndef NDEBUG
diff --git a/src/mbgl/gl/command_encoder.hpp b/src/mbgl/gl/command_encoder.hpp
index b4f7d2af13..8074000034 100644
--- a/src/mbgl/gl/command_encoder.hpp
+++ b/src/mbgl/gl/command_encoder.hpp
@@ -6,6 +6,7 @@ namespace mbgl {
namespace gl {
class Context;
+class RenderPass;
class CommandEncoder final : public gfx::CommandEncoder {
public:
@@ -14,6 +15,10 @@ public:
~CommandEncoder() override;
+ friend class RenderPass;
+
+ std::unique_ptr<gfx::RenderPass> createRenderPass(const char* name, const gfx::RenderPassDescriptor&) override;
+
private:
void pushDebugGroup(const char* name) override;
void popDebugGroup() override;
diff --git a/src/mbgl/gl/program.hpp b/src/mbgl/gl/program.hpp
index 023b738b93..3757c442de 100644
--- a/src/mbgl/gl/program.hpp
+++ b/src/mbgl/gl/program.hpp
@@ -156,6 +156,7 @@ public:
};
void draw(gfx::Context& genericContext,
+ gfx::RenderPass&,
const gfx::DrawMode& drawMode,
const gfx::DepthMode& depthMode,
const gfx::StencilMode& stencilMode,
diff --git a/src/mbgl/gl/render_pass.cpp b/src/mbgl/gl/render_pass.cpp
new file mode 100644
index 0000000000..b327f7954f
--- /dev/null
+++ b/src/mbgl/gl/render_pass.cpp
@@ -0,0 +1,28 @@
+#include <mbgl/gl/render_pass.hpp>
+#include <mbgl/gl/command_encoder.hpp>
+#include <mbgl/gl/renderable_resource.hpp>
+#include <mbgl/gl/context.hpp>
+
+namespace mbgl {
+namespace gl {
+
+RenderPass::RenderPass(gl::CommandEncoder& commandEncoder_,
+ const char* name,
+ const gfx::RenderPassDescriptor& descriptor)
+ : commandEncoder(commandEncoder_), debugGroup(commandEncoder.createDebugGroup(name)) {
+ descriptor.renderable.getResource<gl::RenderableResource>().bind();
+ const auto clearDebugGroup(commandEncoder.createDebugGroup("clear"));
+ commandEncoder.context.clear(descriptor.clearColor, descriptor.clearDepth,
+ descriptor.clearStencil);
+}
+
+void RenderPass::pushDebugGroup(const char* name) {
+ commandEncoder.pushDebugGroup(name);
+}
+
+void RenderPass::popDebugGroup() {
+ commandEncoder.popDebugGroup();
+}
+
+} // namespace gl
+} // namespace mbgl
diff --git a/src/mbgl/gl/render_pass.hpp b/src/mbgl/gl/render_pass.hpp
new file mode 100644
index 0000000000..85a56243a6
--- /dev/null
+++ b/src/mbgl/gl/render_pass.hpp
@@ -0,0 +1,31 @@
+#pragma once
+
+#include <mbgl/gfx/render_pass.hpp>
+
+namespace mbgl {
+namespace gfx {
+
+class CommandEncoder;
+
+} // namespace gfx
+
+namespace gl {
+
+class CommandEncoder;
+class Context;
+
+class RenderPass final : public gfx::RenderPass {
+public:
+ RenderPass(gl::CommandEncoder&, const char* name, const gfx::RenderPassDescriptor&);
+
+private:
+ void pushDebugGroup(const char* name) override;
+ void popDebugGroup() override;
+
+private:
+ gl::CommandEncoder& commandEncoder;
+ const gfx::DebugGroup<gfx::CommandEncoder> debugGroup;
+};
+
+} // namespace gl
+} // namespace mbgl