From c7299eaf201ebb7737d9ceafb2c7d6acbd2bc539 Mon Sep 17 00:00:00 2001 From: Tim Sylvester Date: Mon, 1 May 2023 07:51:07 -0700 Subject: [PATCH] Drawable Renderer (#1570), Move generic shader lookup to context virtual --- src/mbgl/gfx/context.hpp | 4 ++++ src/mbgl/gl/context.cpp | 6 ++++++ src/mbgl/gl/context.hpp | 2 ++ src/mbgl/style/layers/background_layer_impl.cpp | 14 ++------------ 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/mbgl/gfx/context.hpp b/src/mbgl/gfx/context.hpp index de63d61cc..b3c5a5e13 100644 --- a/src/mbgl/gfx/context.hpp +++ b/src/mbgl/gfx/context.hpp @@ -24,6 +24,7 @@ class DrawableBuilder; class DrawableTweaker; class OffscreenTexture; class ShaderProgramBase; +class ShaderRegistry; using DrawablePtr = std::shared_ptr; using UniqueDrawableBuilder = std::unique_ptr; @@ -106,6 +107,9 @@ public: /// Create a new drawable tweaker virtual DrawableTweakerPtr createDrawableTweaker() = 0; + + /// Get the generic shader with the specified name + virtual gfx::ShaderProgramBasePtr getGenericShader(gfx::ShaderRegistry&, const std::string& name) = 0; }; } // namespace gfx diff --git a/src/mbgl/gl/context.cpp b/src/mbgl/gl/context.cpp index d950fba1a..348a5b019 100644 --- a/src/mbgl/gl/context.cpp +++ b/src/mbgl/gl/context.cpp @@ -1,4 +1,6 @@ #include + +#include #include #include #include @@ -487,6 +489,10 @@ gfx::DrawableTweakerPtr Context::createDrawableTweaker() { return std::make_shared(); } +gfx::ShaderProgramBasePtr Context::getGenericShader(gfx::ShaderRegistry& shaders, const std::string& name) { + return shaders.get(name); +} + void Context::clear(std::optional color, std::optional depth, std::optional stencil) { diff --git a/src/mbgl/gl/context.hpp b/src/mbgl/gl/context.hpp index 833abc670..a6b213ca2 100644 --- a/src/mbgl/gl/context.hpp +++ b/src/mbgl/gl/context.hpp @@ -107,6 +107,8 @@ public: gfx::UniqueDrawableBuilder createDrawableBuilder(std::string name) override; gfx::DrawableTweakerPtr createDrawableTweaker() override; + gfx::ShaderProgramBasePtr getGenericShader(gfx::ShaderRegistry&, const std::string& name) override; + private: RendererBackend& backend; bool cleanupOnDestruction = true; diff --git a/src/mbgl/style/layers/background_layer_impl.cpp b/src/mbgl/style/layers/background_layer_impl.cpp index b59fb4c7a..6fa0064f4 100644 --- a/src/mbgl/style/layers/background_layer_impl.cpp +++ b/src/mbgl/style/layers/background_layer_impl.cpp @@ -31,25 +31,15 @@ bool BackgroundLayer::Impl::hasLayoutDifference(const Layer::Impl&) const { constexpr auto shaderName = "background_generic"; -struct ShaderHack final : public gfx::ShaderProgramBase { - static constexpr std::string_view Name{"GenericGLShader"}; - const std::string_view typeName() const noexcept override { return Name; } - const gfx::VertexAttributeArray& getUniforms() const override { return *dummy; } - const gfx::VertexAttributeArray& getVertexAttributes() const override { return *dummy; } - gfx::VertexAttributeArray& mutableUniforms() override { return *dummy; } - gfx::VertexAttributeArray& mutableVertexAttributes() override { return *dummy; } - gfx::VertexAttributeArray* dummy = nullptr; -}; - void BackgroundLayer::Impl::layerAdded(gfx::ShaderRegistry& shaders, - gfx::Context&, + gfx::Context& context, const TransformState&, const PropertyEvaluationParameters&, UniqueChangeRequestVec&) const { { std::unique_lock guard(mutex); if (!shader) { - shader = shaders.get(shaderName); + shader = context.getGenericShader(shaders, shaderName); } } }