diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2020-03-10 15:48:11 +0200 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2020-03-11 16:51:45 +0200 |
commit | b83de65813fa8a7b6e79954a1ed19bd51b6ce1e9 (patch) | |
tree | 00bc1370d48ad15d66f240fe1b96300d738c17a4 | |
parent | 6c26e141a89a1718f6f6ddf53f4a738e2558c803 (diff) | |
download | qtlocation-mapboxgl-b83de65813fa8a7b6e79954a1ed19bd51b6ce1e9.tar.gz |
[core] Adjust mapbox-gl-native for the updated debug shader semantics
-rw-r--r-- | src/mbgl/programs/debug_program.hpp | 23 | ||||
-rw-r--r-- | src/mbgl/programs/textures.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/renderer/buckets/debug_bucket.cpp | 5 | ||||
-rw-r--r-- | src/mbgl/renderer/buckets/debug_bucket.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/renderer/render_tile.cpp | 15 | ||||
-rw-r--r-- | src/mbgl/renderer/sources/render_image_source.cpp | 13 | ||||
-rw-r--r-- | src/mbgl/renderer/sources/render_image_source.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/text/collision_index.cpp | 2 |
8 files changed, 39 insertions, 23 deletions
diff --git a/src/mbgl/programs/debug_program.hpp b/src/mbgl/programs/debug_program.hpp index f1782e19e3..c96a176dbe 100644 --- a/src/mbgl/programs/debug_program.hpp +++ b/src/mbgl/programs/debug_program.hpp @@ -1,23 +1,22 @@ #pragma once -#include <mbgl/programs/program.hpp> #include <mbgl/programs/attributes.hpp> +#include <mbgl/programs/program.hpp> +#include <mbgl/programs/textures.hpp> #include <mbgl/programs/uniforms.hpp> #include <mbgl/style/properties.hpp> namespace mbgl { -class DebugProgram : public Program< - DebugProgram, - gfx::PrimitiveType::Line, - TypeList< - attributes::pos>, - TypeList< - uniforms::matrix, - uniforms::color>, - TypeList<>, - style::Properties<>> -{ +namespace uniforms { +MBGL_DEFINE_UNIFORM_SCALAR(float, overlay_scale); +} +class DebugProgram : public Program<DebugProgram, + gfx::PrimitiveType::Line, + TypeList<attributes::pos>, + TypeList<uniforms::matrix, uniforms::color, uniforms::overlay_scale>, + TypeList<textures::overlay>, + style::Properties<>> { public: using Program::Program; }; diff --git a/src/mbgl/programs/textures.hpp b/src/mbgl/programs/textures.hpp index 7d53b447b1..b525b0d44c 100644 --- a/src/mbgl/programs/textures.hpp +++ b/src/mbgl/programs/textures.hpp @@ -11,6 +11,7 @@ MBGL_DEFINE_TEXTURE(image1); MBGL_DEFINE_TEXTURE(color_ramp); MBGL_DEFINE_TEXTURE(texture); MBGL_DEFINE_TEXTURE(texture_icon); +MBGL_DEFINE_TEXTURE(overlay); } // namespace textures } // namespace mbgl diff --git a/src/mbgl/renderer/buckets/debug_bucket.cpp b/src/mbgl/renderer/buckets/debug_bucket.cpp index fcdc727f4b..701a347f4c 100644 --- a/src/mbgl/renderer/buckets/debug_bucket.cpp +++ b/src/mbgl/renderer/buckets/debug_bucket.cpp @@ -76,6 +76,11 @@ void DebugBucket::upload(gfx::UploadPass& uploadPass) { vertexBuffer = uploadPass.createVertexBuffer(std::move(vertices)); indexBuffer = uploadPass.createIndexBuffer(std::move(indices)); } + if (!texture) { + std::array<uint8_t, 4> data{{0, 0, 0, 0}}; + static const PremultipliedImage emptyImage{Size(1, 1), data.data(), data.size()}; + texture = uploadPass.createTexture(emptyImage); + } } } // namespace mbgl diff --git a/src/mbgl/renderer/buckets/debug_bucket.hpp b/src/mbgl/renderer/buckets/debug_bucket.hpp index 78b1cbb8ff..c256ee6717 100644 --- a/src/mbgl/renderer/buckets/debug_bucket.hpp +++ b/src/mbgl/renderer/buckets/debug_bucket.hpp @@ -43,6 +43,7 @@ public: SegmentVector<DebugAttributes> tileBorderSegments; optional<gfx::VertexBuffer<DebugLayoutVertex>> vertexBuffer; optional<gfx::IndexBuffer> indexBuffer; + optional<gfx::Texture> texture; }; } // namespace mbgl diff --git a/src/mbgl/renderer/render_tile.cpp b/src/mbgl/renderer/render_tile.cpp index ce5fef05b8..71e5895402 100644 --- a/src/mbgl/renderer/render_tile.cpp +++ b/src/mbgl/renderer/render_tile.cpp @@ -155,12 +155,13 @@ void RenderTile::finishRender(PaintParameters& parameters) const { *debugBucket->indexBuffer, debugBucket->segments, program.computeAllUniformValues(DebugProgram::LayoutUniformValues{uniforms::matrix::Value(matrix), - uniforms::color::Value(Color::white())}, + uniforms::color::Value(Color::white()), + uniforms::overlay_scale::Value(1.0f)}, paintAttributeData, properties, parameters.state.getZoom()), allAttributeBindings, - DebugProgram::TextureBindings{}, + DebugProgram::TextureBindings{textures::image::Value{debugBucket->texture->getResource()}}, "text-outline"); program.draw( @@ -174,12 +175,13 @@ void RenderTile::finishRender(PaintParameters& parameters) const { *debugBucket->indexBuffer, debugBucket->segments, program.computeAllUniformValues(DebugProgram::LayoutUniformValues{uniforms::matrix::Value(matrix), - uniforms::color::Value(Color::black())}, + uniforms::color::Value(Color::black()), + uniforms::overlay_scale::Value(1.0f)}, paintAttributeData, properties, parameters.state.getZoom()), allAttributeBindings, - DebugProgram::TextureBindings{}, + DebugProgram::TextureBindings{textures::image::Value{debugBucket->texture->getResource()}}, "text"); } @@ -199,13 +201,14 @@ void RenderTile::finishRender(PaintParameters& parameters) const { *parameters.staticData.tileBorderIndexBuffer, debugBucket->tileBorderSegments, program.computeAllUniformValues(DebugProgram::LayoutUniformValues{uniforms::matrix::Value(matrix), - uniforms::color::Value(Color::red())}, + uniforms::color::Value(Color::red()), + uniforms::overlay_scale::Value(1.0f)}, paintAttributeData, properties, parameters.state.getZoom()), program.computeAllAttributeBindings( *parameters.staticData.tileVertexBuffer, paintAttributeData, properties), - DebugProgram::TextureBindings{}, + DebugProgram::TextureBindings{textures::image::Value{debugBucket->texture->getResource()}}, "border"); } } diff --git a/src/mbgl/renderer/sources/render_image_source.cpp b/src/mbgl/renderer/sources/render_image_source.cpp index 30f1bbcee6..215bbb1c92 100644 --- a/src/mbgl/renderer/sources/render_image_source.cpp +++ b/src/mbgl/renderer/sources/render_image_source.cpp @@ -23,13 +23,19 @@ void ImageSourceRenderData::upload(gfx::UploadPass& uploadPass) const { if (bucket && bucket->needsUpload()) { bucket->upload(uploadPass); } + + if (!debugTexture) { + std::array<uint8_t, 4> data{{0, 0, 0, 0}}; + static const PremultipliedImage emptyImage{Size(1, 1), data.data(), data.size()}; + debugTexture = uploadPass.createTexture(emptyImage); + } } void ImageSourceRenderData::render(PaintParameters& parameters) const { if (!bucket || !(parameters.debugOptions & MapDebugOptions::TileBorders)) { return; } - + assert(debugTexture); static const style::Properties<>::PossiblyEvaluated properties {}; static const DebugProgram::Binders paintAttributeData(properties, 0); @@ -47,13 +53,14 @@ void ImageSourceRenderData::render(PaintParameters& parameters) const { parameters.staticData.tileBorderSegments(), programInstance.computeAllUniformValues( DebugProgram::LayoutUniformValues{uniforms::matrix::Value(matrix), - uniforms::color::Value(Color::red())}, + uniforms::color::Value(Color::red()), + uniforms::overlay_scale::Value(1.0f)}, paintAttributeData, properties, parameters.state.getZoom()), programInstance.computeAllAttributeBindings( *parameters.staticData.tileVertexBuffer, paintAttributeData, properties), - DebugProgram::TextureBindings{}, + DebugProgram::TextureBindings{textures::image::Value{debugTexture->getResource()}}, "image"); } } diff --git a/src/mbgl/renderer/sources/render_image_source.hpp b/src/mbgl/renderer/sources/render_image_source.hpp index da0d899624..1b3afd6ddf 100644 --- a/src/mbgl/renderer/sources/render_image_source.hpp +++ b/src/mbgl/renderer/sources/render_image_source.hpp @@ -26,8 +26,8 @@ private: void render(PaintParameters&) const override; bool hasRenderPass(RenderPass) const override { return false; } const std::string& getName() const override { return name; } - std::string name; + mutable optional<gfx::Texture> debugTexture; }; class RenderImageSource final : public RenderSource { diff --git a/src/mbgl/text/collision_index.cpp b/src/mbgl/text/collision_index.cpp index ef0358dd6b..e749db3ffa 100644 --- a/src/mbgl/text/collision_index.cpp +++ b/src/mbgl/text/collision_index.cpp @@ -284,7 +284,7 @@ void CollisionIndex::insertFeature(const CollisionFeature& feature, const std::v ); } } - } else { + } else if (!projectedBoxes.empty()) { assert(projectedBoxes.size() == 1); auto& box = projectedBoxes[0]; assert(box.isBox()); |