diff --git a/CMakeLists.txt b/CMakeLists.txt index 1892a2f36..b75493e05 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -172,11 +172,12 @@ if(MLN_DRAWABLE_RENDERER) ${PROJECT_SOURCE_DIR}/src/mbgl/gfx/drawable_atlases_tweaker.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/gfx/image_drawable_data.hpp ${PROJECT_SOURCE_DIR}/src/mbgl/gfx/line_drawable_data.hpp - ${PROJECT_SOURCE_DIR}/src/mbgl/gfx/shader_group.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/gfx/symbol_drawable_data.hpp ${PROJECT_SOURCE_DIR}/src/mbgl/gfx/uniform_block.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/gfx/uniform_buffer.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/gfx/vertex_attribute.cpp + ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/render_target.cpp + ${PROJECT_SOURCE_DIR}/src/mbgl/gl/render_target_gl.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/change_request.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layer_group.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/tile_layer_group.cpp @@ -189,14 +190,19 @@ if(MLN_DRAWABLE_RENDERER) ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/fill_layer_tweaker.hpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/fill_extrusion_layer_tweaker.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/fill_extrusion_layer_tweaker.hpp + ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/line_layer_tweaker.cpp + ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/line_layer_tweaker.hpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/raster_layer_tweaker.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/raster_layer_tweaker.hpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/symbol_layer_tweaker.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/symbol_layer_tweaker.hpp + ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/heatmap_layer_tweaker.cpp + ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/heatmap_layer_tweaker.hpp + ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/heatmap_texture_layer_tweaker.cpp + ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/heatmap_texture_layer_tweaker.hpp ${PROJECT_SOURCE_DIR}/src/mbgl/shaders/shader_program_base.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/shader_program_mtl.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/util/identity.cpp - ${PROJECT_SOURCE_DIR}/src/mbgl/shaders/gl/shader_program_gl.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/gl/drawable_gl.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/gl/drawable_gl_builder.cpp @@ -455,6 +461,7 @@ list(APPEND SRC_FILES ${PROJECT_SOURCE_DIR}/src/mbgl/gfx/renderbuffer.hpp ${PROJECT_SOURCE_DIR}/src/mbgl/gfx/renderer_backend.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/gfx/rendering_stats.cpp + ${PROJECT_SOURCE_DIR}/src/mbgl/gfx/shader_group.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/gfx/shader_registry.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/gfx/stencil_mode.hpp ${PROJECT_SOURCE_DIR}/src/mbgl/gfx/texture.hpp @@ -581,23 +588,6 @@ list(APPEND SRC_FILES ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/image_manager.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/image_manager.hpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/image_manager_observer.hpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layer_group.cpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/tile_layer_group.cpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layer_tweaker.cpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/line_layer_tweaker.cpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/line_layer_tweaker.hpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/background_layer_tweaker.cpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/background_layer_tweaker.hpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/circle_layer_tweaker.cpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/circle_layer_tweaker.hpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/fill_layer_tweaker.cpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/fill_layer_tweaker.hpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/heatmap_layer_tweaker.cpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/heatmap_layer_tweaker.hpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/heatmap_texture_layer_tweaker.cpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/heatmap_texture_layer_tweaker.hpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/raster_layer_tweaker.cpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/raster_layer_tweaker.hpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/render_background_layer.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/render_background_layer.hpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/render_circle_layer.cpp @@ -637,7 +627,6 @@ list(APPEND SRC_FILES ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/render_source_observer.hpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/render_static_data.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/render_static_data.hpp - ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/render_target.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/render_tile.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/render_tile.hpp ${PROJECT_SOURCE_DIR}/src/mbgl/renderer/render_tree.hpp @@ -1080,7 +1069,6 @@ if(MLN_WITH_OPENGL) ${PROJECT_SOURCE_DIR}/src/mbgl/gl/render_custom_layer.hpp ${PROJECT_SOURCE_DIR}/src/mbgl/gl/render_pass.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/gl/render_pass.hpp - ${PROJECT_SOURCE_DIR}/src/mbgl/gl/render_target_gl.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/gl/renderbuffer_resource.hpp ${PROJECT_SOURCE_DIR}/src/mbgl/gl/renderer_backend.cpp ${PROJECT_SOURCE_DIR}/src/mbgl/gl/state.hpp diff --git a/include/mbgl/util/image.hpp b/include/mbgl/util/image.hpp index 28c24d498..2e46bc0de 100644 --- a/include/mbgl/util/image.hpp +++ b/include/mbgl/util/image.hpp @@ -31,8 +31,11 @@ public: if (srcLength != bytes()) { throw std::invalid_argument("mismatched image size"); } - data = std::make_unique(bytes()); - std::copy(srcData, srcData + srcLength, data.get()); + + if (bytes()) { + data = std::make_unique(bytes()); + std::copy(srcData, srcData + srcLength, data.get()); + } } Image(Size size_, std::unique_ptr data_) @@ -63,21 +66,32 @@ public: template T clone() const { T copy_(size); - std::copy(data.get(), data.get() + bytes(), copy_.data.get()); + if (valid() && copy_.valid()) { + assert(bytes() == copy_.bytes()); + std::copy(data.get(), data.get() + bytes(), copy_.data.get()); + } return copy_; } size_t stride() const { return channels * size.width; } size_t bytes() const { return stride() * size.height; } - void fill(uint8_t value) { std::fill(data.get(), data.get() + bytes(), value); } + void fill(uint8_t value) { + if (valid()) { + assert(bytes()); + std::fill(data.get(), data.get() + bytes(), value); + } + } void resize(Size size_) { if (size == size_) { return; } Image newImage(size_); - newImage.fill(0); + if (valid()) { + assert(bytes()); // gcc12 bug + newImage.fill(0); + } copy(*this, newImage, {0, 0}, {0, 0}, {std::min(size.width, size_.width), std::min(size.height, size_.height)}); operator=(std::move(newImage)); } diff --git a/test/util/thread.test.cpp b/test/util/thread.test.cpp index cd39f39f6..217494240 100644 --- a/test/util/thread.test.cpp +++ b/test/util/thread.test.cpp @@ -183,6 +183,8 @@ TEST(Thread, ThreadPoolMessaging) { } TEST(Thread, ReferenceCanOutliveThread) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wuse-after-free" // See AspiringActor<>::object() auto thread = std::make_unique>("Test"); auto worker = thread->actor(); @@ -194,6 +196,7 @@ TEST(Thread, ReferenceCanOutliveThread) { using namespace std::literals; std::this_thread::sleep_for(10s); +#pragma GCC diagnostic pop } TEST(Thread, DeletePausedThread) {