diff options
author | Juha Alanen <juha.alanen@mapbox.com> | 2020-02-25 10:30:45 +0200 |
---|---|---|
committer | Juha Alanen <juha.alanen@mapbox.com> | 2020-02-25 11:43:52 +0200 |
commit | 815a7049d8edf96f4db43233a074127da55d4207 (patch) | |
tree | 4c4648ee8a13856e8d3052fda7ee043c06d5b8e7 | |
parent | 7bbeb974453e2dcf0a14038f43da1f9d82804b55 (diff) | |
download | qtlocation-mapboxgl-815a7049d8edf96f4db43233a074127da55d4207.tar.gz |
[build][ios] Enable support for Metal renderer
-rw-r--r-- | CMakeLists.txt | 7 | ||||
-rw-r--r-- | platform/ios/ios.cmake | 4 | ||||
-rw-r--r-- | platform/ios/mbgl-metal.cmake | 98 |
3 files changed, 109 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index fab5319f74..54214da897 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,6 +41,13 @@ option(MBGL_WITH_QT "Build Mapbox GL Qt bindings" OFF) option(MBGL_WITH_SANITIZER "Use [address|thread|undefined] here" OFF) option(MBGL_WITH_RTTI "Compile with runtime type information" OFF) option(MBGL_WITH_OPENGL "Build with OpenGL renderer" ON) +option(MBGL_WITH_METAL "Build with Metal renderer" OFF) + +if(MBGL_WITH_OPENGL AND MBGL_WITH_METAL) + message("!! Both OpenGL and Metal renderer backend options selected") + message("!! Configuring GL-Native with Metal renderer backend") + set(MBGL_WITH_OPENGL OFF) +endif() add_library( mbgl-compiler-options INTERFACE diff --git a/platform/ios/ios.cmake b/platform/ios/ios.cmake index 72a8878181..6b6dd4886c 100644 --- a/platform/ios/ios.cmake +++ b/platform/ios/ios.cmake @@ -27,6 +27,10 @@ if(MBGL_WITH_OPENGL) ) endif() +if(MBGL_WITH_METAL) + include(${PROJECT_SOURCE_DIR}/platform/ios/mbgl-metal.cmake) +endif() + target_sources( mbgl-core PRIVATE diff --git a/platform/ios/mbgl-metal.cmake b/platform/ios/mbgl-metal.cmake new file mode 100644 index 0000000000..e3dc8a0f23 --- /dev/null +++ b/platform/ios/mbgl-metal.cmake @@ -0,0 +1,98 @@ +message("-- Configuring GL-Native with Metal renderer backend") + +if(NOT EXISTS ${PROJECT_SOURCE_DIR}/modules/metal) + execute_process( + COMMAND git clone git@github.com:mapbox/mapbox-maps-metal.git ${PROJECT_SOURCE_DIR}/modules/metal + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + ) +endif() + +target_compile_definitions( + mbgl-core + PRIVATE MBGL_RENDER_BACKEND_METAL=1 +) + +target_sources(mbgl-core PRIVATE + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/buffer_resource.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/command_encoder.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/context.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/conversion.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/draw_scope_resource.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/offscreen_texture.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/program.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/render_pass.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/renderable_resource.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/renderbuffer_resource.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/renderer_backend.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/texture_resource.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/upload_pass.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/background.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/background_pattern.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/circle.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/clipping_mask.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/collision_box.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/collision_circle.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/debug.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/fill.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/fill_extrusion.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/fill_extrusion_pattern.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/fill_outline.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/fill_outline_pattern.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/fill_pattern.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/heatmap.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/heatmap_texture.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/hillshade.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/hillshade_prepare.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/line.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/line_gradient.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/line_pattern.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/line_sdf.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/raster.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/symbol_icon.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/symbol_sdf_icon.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/symbol_sdf_text.mm + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/programs/metal/symbol_text_and_icon.mm +) + +target_sources(mbgl-core PUBLIC + ${PROJECT_SOURCE_DIR}/modules/metal/include/mbgl/gfx/backend.hpp + ${PROJECT_SOURCE_DIR}/modules/metal/include/mbgl/metal/configuration.hpp + ${PROJECT_SOURCE_DIR}/modules/metal/include/mbgl/metal/renderable_resource.hpp + ${PROJECT_SOURCE_DIR}/modules/metal/include/mbgl/metal/renderer_backend.hpp +) + +target_sources(mbgl-core PRIVATE + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/attribute.hpp + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/buffer_resource.hpp + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/command_encoder.hpp + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/context.hpp + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/conversion.hpp + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/draw_scope_resource.hpp + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/index_buffer_resource.hpp + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/offscreen_texture.hpp + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/program.hpp + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/render_pass.hpp + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/renderbuffer_resource.hpp + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/shader.hpp + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/texture_resource.hpp + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/upload_pass.hpp + ${PROJECT_SOURCE_DIR}/modules/metal/src/mbgl/metal/vertex_buffer_resource.hpp +) + +target_sources(mbgl-core PRIVATE + ${PROJECT_SOURCE_DIR}/modules/metal/platform/darwin/src/headless_backend.mm +) + +target_include_directories(mbgl-core BEFORE + PRIVATE ${PROJECT_SOURCE_DIR}/modules/metal/src + PUBLIC ${PROJECT_SOURCE_DIR}/modules/metal/include +) + +target_include_directories(mbgl-core PRIVATE + ${PROJECT_SOURCE_DIR}/platform/default/include +) + +target_link_libraries(mbgl-core + PUBLIC "-framework MetalKit" + PUBLIC "-framework Metal" +) |