diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2019-04-02 22:35:46 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2019-04-05 11:49:17 +0200 |
commit | d7aaf83421261087a99d18d92eca9637c1bf72f8 (patch) | |
tree | df938a5b6fe40c9e665e028285d28eb88e0dfea2 /src/mbgl/gl | |
parent | b1a2513b61761d09b3ae08904c03d28caedd09fe (diff) | |
download | qtlocation-mapboxgl-d7aaf83421261087a99d18d92eca9637c1bf72f8.tar.gz |
[core] introduce gfx::RenderPass
Diffstat (limited to 'src/mbgl/gl')
-rw-r--r-- | src/mbgl/gl/command_encoder.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/gl/command_encoder.hpp | 5 | ||||
-rw-r--r-- | src/mbgl/gl/program.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/gl/render_pass.cpp | 28 | ||||
-rw-r--r-- | src/mbgl/gl/render_pass.hpp | 31 |
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 |