From 44825d57079a1621bc7a860f3ce89e667ec08132 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Fri, 14 Aug 2026 11:17:18 -0400 Subject: [PATCH 1/2] Add Colmap OPENCV_FULL, use C++20 --- CMakeLists.txt | 12 ++++++------ colmap.cpp | 13 +++++++++++++ input_data.cpp | 4 ++-- input_data.hpp | 3 +++ 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c69c700c..67942d55 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -209,11 +209,11 @@ else() set(GPU_RUNTIME "CPU") endif() -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD 20) if((GPU_RUNTIME STREQUAL "CUDA") OR (GPU_RUNTIME STREQUAL "HIP")) enable_language(${GPU_RUNTIME}) - set(CMAKE_${GPU_RUNTIME}_STANDARD 17) - set(${GPU_RUNTIME}_STANDARD 17) + set(CMAKE_${GPU_RUNTIME}_STANDARD 20) + set(${GPU_RUNTIME}_STANDARD 20) endif() if (NOT WIN32 AND NOT APPLE) @@ -305,7 +305,7 @@ if(OPENSPLAT_USE_PCH) endif() install(TARGETS opensplat DESTINATION bin) -set_property(TARGET opensplat PROPERTY CXX_STANDARD 17) +set_property(TARGET opensplat PROPERTY CXX_STANDARD 20) target_include_directories(opensplat PRIVATE ${PROJECT_SOURCE_DIR}/rasterizer ${GPU_INCLUDE_DIRS} @@ -351,7 +351,7 @@ if(OPENSPLAT_BUILD_SIMPLE_TRAINER) if (NOT WIN32) target_link_libraries(simple_trainer PUBLIC pthread) endif() - set_property(TARGET simple_trainer PROPERTY CXX_STANDARD 17) + set_property(TARGET simple_trainer PROPERTY CXX_STANDARD 20) if(GPU_RUNTIME STREQUAL "HIP") target_compile_definitions(simple_trainer PRIVATE USE_HIP __HIP_PLATFORM_AMD__) elseif(GPU_RUNTIME STREQUAL "CUDA") @@ -366,7 +366,7 @@ endif() # the DLLs need to be copied to avoid memory errors. if (MSVC) file(GLOB TORCH_DLLS "${TORCH_INSTALL_PREFIX}/lib/*.dll") - file(GLOB OPENCV_DLL "${OPENCV_DIR}/x64/vc16/bin/opencv_world490.dll") + file(GLOB OPENCV_DLL "${OPENCV_DIR}/x64/vc16/bin/opencv_world*[0-9].dll") set(DLLS_TO_COPY ${TORCH_DLLS} ${OPENCV_DLL}) add_custom_command(TARGET opensplat POST_BUILD diff --git a/colmap.cpp b/colmap.cpp index 5bad19e0..9d0bfb09 100644 --- a/colmap.cpp +++ b/colmap.cpp @@ -68,6 +68,19 @@ InputData inputDataFromColmap(const std::string &projectRoot){ cam->k2 = readBinary(camf); cam->p1 = readBinary(camf); cam->p2 = readBinary(camf); + }else if (model == FullOpenCV){ + cam->fx = readBinary(camf); + cam->fy = readBinary(camf); + cam->cx = readBinary(camf); + cam->cy = readBinary(camf); + cam->k1 = readBinary(camf); + cam->k2 = readBinary(camf); + cam->p1 = readBinary(camf); + cam->p2 = readBinary(camf); + cam->k3 = readBinary(camf); + cam->k4 = readBinary(camf); + cam->k5 = readBinary(camf); + cam->k6 = readBinary(camf); }else{ throw std::runtime_error("Unsupported camera model: " + std::to_string(model)); } diff --git a/input_data.cpp b/input_data.cpp index 77fa944a..dcdbb59c 100644 --- a/input_data.cpp +++ b/input_data.cpp @@ -117,11 +117,11 @@ torch::Tensor Camera::getImage(int downscaleFactor){ } bool Camera::hasDistortionParameters(){ - return k1 != 0.0f || k2 != 0.0f || k3 != 0.0f || p1 != 0.0f || p2 != 0.0f; + return k1 != 0.0f || k2 != 0.0f || k3 != 0.0f || k4 != 0.0f || k5 != 0.0f || k6 != 0.0f || p1 != 0.0f || p2 != 0.0f; } std::vector Camera::undistortionParameters(){ - std::vector p = { k1, k2, p1, p2, k3, 0.0f, 0.0f, 0.0f }; + std::vector p = { k1, k2, p1, p2, k3, k4, k5, k6 }; return p; } diff --git a/input_data.hpp b/input_data.hpp index 4a2bb4af..a2c36f9f 100644 --- a/input_data.hpp +++ b/input_data.hpp @@ -20,6 +20,9 @@ struct Camera{ float k1 = 0; float k2 = 0; float k3 = 0; + float k4 = 0; + float k5 = 0; + float k6 = 0; float p1 = 0; float p2 = 0; torch::Tensor camToWorld; From ee6865763ee105344f38ec739090bd981715ff7f Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Fri, 14 Aug 2026 15:32:50 -0400 Subject: [PATCH 2/2] Use C++20 only if supported --- CMakeLists.txt | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 67942d55..719486d1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -209,11 +209,26 @@ else() set(GPU_RUNTIME "CPU") endif() -set(CMAKE_CXX_STANDARD 20) +# Use C++20 when the compiler supports it (required by libtorch >= 2.13), +# otherwise fall back to C++17 +if("cxx_std_20" IN_LIST CMAKE_CXX_COMPILE_FEATURES) + set(OPENSPLAT_CXX_STANDARD 20) +else() + set(OPENSPLAT_CXX_STANDARD 17) +endif() +message(STATUS "Using C++ standard: ${OPENSPLAT_CXX_STANDARD}") +set(CMAKE_CXX_STANDARD ${OPENSPLAT_CXX_STANDARD}) if((GPU_RUNTIME STREQUAL "CUDA") OR (GPU_RUNTIME STREQUAL "HIP")) enable_language(${GPU_RUNTIME}) - set(CMAKE_${GPU_RUNTIME}_STANDARD 20) - set(${GPU_RUNTIME}_STANDARD 20) + string(TOLOWER "${GPU_RUNTIME}" GPU_RUNTIME_LOWER) + if("${GPU_RUNTIME_LOWER}_std_${OPENSPLAT_CXX_STANDARD}" IN_LIST CMAKE_${GPU_RUNTIME}_COMPILE_FEATURES) + set(OPENSPLAT_GPU_STANDARD ${OPENSPLAT_CXX_STANDARD}) + else() + set(OPENSPLAT_GPU_STANDARD 17) + endif() + message(STATUS "Using ${GPU_RUNTIME} standard: ${OPENSPLAT_GPU_STANDARD}") + set(CMAKE_${GPU_RUNTIME}_STANDARD ${OPENSPLAT_GPU_STANDARD}) + set(${GPU_RUNTIME}_STANDARD ${OPENSPLAT_GPU_STANDARD}) endif() if (NOT WIN32 AND NOT APPLE) @@ -305,7 +320,7 @@ if(OPENSPLAT_USE_PCH) endif() install(TARGETS opensplat DESTINATION bin) -set_property(TARGET opensplat PROPERTY CXX_STANDARD 20) +set_property(TARGET opensplat PROPERTY CXX_STANDARD ${OPENSPLAT_CXX_STANDARD}) target_include_directories(opensplat PRIVATE ${PROJECT_SOURCE_DIR}/rasterizer ${GPU_INCLUDE_DIRS} @@ -351,7 +366,7 @@ if(OPENSPLAT_BUILD_SIMPLE_TRAINER) if (NOT WIN32) target_link_libraries(simple_trainer PUBLIC pthread) endif() - set_property(TARGET simple_trainer PROPERTY CXX_STANDARD 20) + set_property(TARGET simple_trainer PROPERTY CXX_STANDARD ${OPENSPLAT_CXX_STANDARD}) if(GPU_RUNTIME STREQUAL "HIP") target_compile_definitions(simple_trainer PRIVATE USE_HIP __HIP_PLATFORM_AMD__) elseif(GPU_RUNTIME STREQUAL "CUDA")