diff --git a/include/mbgl/gfx/drawable.hpp b/include/mbgl/gfx/drawable.hpp index c316bc0b0..c06bb17e6 100644 --- a/include/mbgl/gfx/drawable.hpp +++ b/include/mbgl/gfx/drawable.hpp @@ -174,6 +174,8 @@ private: struct alignas(16) DrawableUBO { std::array matrix; + std::array world; + std::array padding; }; static_assert(sizeof(DrawableUBO) % 16 == 0); diff --git a/include/mbgl/shaders/gl/drawable_background.hpp b/include/mbgl/shaders/gl/drawable_background.hpp index 5c442f3ae..6b72ff475 100644 --- a/include/mbgl/shaders/gl/drawable_background.hpp +++ b/include/mbgl/shaders/gl/drawable_background.hpp @@ -13,6 +13,8 @@ struct ShaderSource { static constexpr const char* vertex = R"(layout (location = 0) in vec2 a_pos; layout (std140) uniform DrawableUBO { mat4 u_matrix; + vec2 u_world; + vec2 pad; }; void main() { diff --git a/include/mbgl/shaders/gl/drawable_fill.hpp b/include/mbgl/shaders/gl/drawable_fill.hpp index b51e96924..a9a65c801 100644 --- a/include/mbgl/shaders/gl/drawable_fill.hpp +++ b/include/mbgl/shaders/gl/drawable_fill.hpp @@ -14,6 +14,8 @@ struct ShaderSource { layout (std140) uniform DrawableUBO { mat4 u_matrix; + vec2 u_world; + vec2 pad; }; #ifndef HAS_UNIFORM_u_color diff --git a/include/mbgl/shaders/gl/drawable_fill_outline.hpp b/include/mbgl/shaders/gl/drawable_fill_outline.hpp index 24c1f8dfe..74660a8c9 100644 --- a/include/mbgl/shaders/gl/drawable_fill_outline.hpp +++ b/include/mbgl/shaders/gl/drawable_fill_outline.hpp @@ -12,8 +12,11 @@ struct ShaderSource { static constexpr const char* name = "FillOutlineShader"; static constexpr const char* vertex = R"(layout (location = 0) in vec2 a_pos; -uniform mat4 u_matrix; -uniform vec2 u_world; +layout (std140) uniform DrawableUBO { + mat4 u_matrix; + vec2 u_world; + vec2 pad; +}; out vec2 v_pos; diff --git a/src/mbgl/gl/context.cpp b/src/mbgl/gl/context.cpp index bc0bc3846..952b4c5c4 100644 --- a/src/mbgl/gl/context.cpp +++ b/src/mbgl/gl/context.cpp @@ -464,7 +464,10 @@ bool Context::setupDraw(const PaintParameters& parameters, const gfx::Drawable& program = value::Program::Default; } - setDepthMode(parameters.depthModeForSublayer(0, drawable.getDepthType())); + setDepthMode(parameters.depthModeForSublayer(drawable.getSubLayerIndex(), drawable.getDepthType())); + + // force disable depth test for debugging + //setDepthMode({gfx::DepthFunctionType::Always, gfx::DepthMaskType::ReadOnly, {0,1}}); if (auto tileID = drawable.getTileID()) { // Doesn't work until the clipping masks are generated @@ -477,13 +480,10 @@ bool Context::setupDraw(const PaintParameters& parameters, const gfx::Drawable& setColorMode(gfx::ColorMode::alphaBlended()); setCullFaceMode(gfx::CullFaceMode::disabled()); - // uniformStates.bind(uniformValues); - // textureStates.bind(context, textureBindings); - auto& drawableGL = static_cast(drawable); auto& vao = drawableGL.getVertexArray(); if (vao.isValid()) { - bindVertexArray = vao.getID(); // glBindVertexArray + bindVertexArray = vao.getID(); return true; } else { bindVertexArray = value::BindVertexArray::Default; diff --git a/src/mbgl/gl/layer_group_gl.cpp b/src/mbgl/gl/layer_group_gl.cpp index ec24dba6d..e774b83e2 100644 --- a/src/mbgl/gl/layer_group_gl.cpp +++ b/src/mbgl/gl/layer_group_gl.cpp @@ -1,6 +1,8 @@ #include #include +#include +#include #include #include #include @@ -87,8 +89,11 @@ void TileLayerGroupGL::render(RenderOrchestrator&, PaintParameters& parameters) matrix = tileMat; } + const auto renderableSize = parameters.backend.getDefaultRenderable().getSize(); + gfx::DrawableUBO drawableUBO; drawableUBO.matrix = util::cast(matrix); + drawableUBO.world = {(float)renderableSize.width, (float)renderableSize.height}; auto uniformBuffer = context.createUniformBuffer(&drawableUBO, sizeof(drawableUBO)); drawable.mutableUniformBuffers().addOrReplace("DrawableUBO", uniformBuffer); diff --git a/src/mbgl/renderer/layers/render_fill_layer.cpp b/src/mbgl/renderer/layers/render_fill_layer.cpp index 6705823e5..258e05ae2 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_layer.cpp @@ -507,7 +507,7 @@ void RenderFillLayer::update(const int32_t layerIndex, for (auto& drawable : fillBuilder->clearDrawables()) { drawable->setTileID(tileID); - tileLayerGroup->addDrawable(renderPass, tileID, std::move(drawable)); + //tileLayerGroup->addDrawable(renderPass, tileID, std::move(drawable)); ++stats.tileDrawablesAdded; } }