From c7d2d195a328534b32dbdbde8903eb210726e62e Mon Sep 17 00:00:00 2001 From: Martin Felis Date: Sun, 17 Mar 2024 12:47:11 +0100 Subject: [PATCH] Updated ozz-animation to version 0.14.3 (commit 92c392b667844) --- 3rdparty/ozz-animation/CHANGES.md | 16 +++++ 3rdparty/ozz-animation/CMakeLists.txt | 12 ++-- 3rdparty/ozz-animation/README.md | 2 +- .../build-utils/cmake/compiler_settings.cmake | 64 +++++++++-------- .../build-utils/cmake/modules/FindFbx.cmake | 4 +- .../ozz-animation/extern/glfw/CMakeLists.txt | 2 - .../extern/jsoncpp/dist/jsoncpp.cpp | 2 +- .../include/ozz/base/endianness.h | 42 +++++------ .../samples/additive/sample_additive.cc | 6 +- .../samples/attach/sample_attach.cc | 10 +-- .../samples/blend/sample_blend.cc | 8 +-- .../samples/foot_ik/sample_foot_ik.cc | 30 ++++---- .../samples/framework/application.cc | 46 ++++++------ .../samples/framework/application.h | 2 +- .../samples/framework/internal/imgui_impl.cc | 2 +- .../samples/framework/internal/shooter.cc | 10 +-- .../ozz-animation/samples/framework/utils.cc | 43 ++++++------ .../samples/look_at/sample_look_at.cc | 42 +++++------ .../samples/millipede/sample_millipede.cc | 20 +++--- .../samples/multithread/sample_multithread.cc | 8 +-- .../samples/optimize/sample_optimize.cc | 52 +++++++------- .../partial_blend/sample_partial_blend.cc | 14 ++-- .../samples/skinning/sample_skinning.cc | 8 +-- .../samples/two_bone_ik/sample_two_bone_ik.cc | 70 +++++++++---------- .../ozz-animation/src/base/CMakeLists.txt | 1 + .../animation/runtime/ik_aim_job_tests.cc | 37 +++------- .../test/base/containers/CMakeLists.txt | 4 ++ src/main.cc | 9 ++- 28 files changed, 284 insertions(+), 282 deletions(-) diff --git a/3rdparty/ozz-animation/CHANGES.md b/3rdparty/ozz-animation/CHANGES.md index 0e3fff3..ef43f8d 100644 --- a/3rdparty/ozz-animation/CHANGES.md +++ b/3rdparty/ozz-animation/CHANGES.md @@ -1,3 +1,19 @@ +Release version 0.14.3 +---------------------- + +* Build pipeline + - Adds vs2022 compiler support for fbxsdk (#170) + +Release version 0.14.2 +---------------------- + +* Library + - Transitions away from sprintf to the more secure snprintf. + - #147 Works around gcc 11 error stringop-overflow which emits false positives for ozz math serialization. + +* Build pipeline + - Updates CI compiler versions. + Release version 0.14.1 ---------------------- diff --git a/3rdparty/ozz-animation/CMakeLists.txt b/3rdparty/ozz-animation/CMakeLists.txt index 07d5bbd..0c49b1c 100644 --- a/3rdparty/ozz-animation/CMakeLists.txt +++ b/3rdparty/ozz-animation/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required (VERSION 3.3) +cmake_minimum_required(VERSION 3.24) # Defines the project's name project(ozz) @@ -9,7 +9,7 @@ get_directory_property(is_sub_project PARENT_DIRECTORY) # Current version set(OZZ_VERSION_MAJOR 0) set(OZZ_VERSION_MINOR 14) -set(OZZ_VERSION_PATCH 1) +set(OZZ_VERSION_PATCH 3) set(OZZ_VERSION ${OZZ_VERSION_MAJOR}.${OZZ_VERSION_MINOR}.${OZZ_VERSION_PATCH}) # Add project build options @@ -30,6 +30,7 @@ if(WIN32 AND BUILD_SHARED_LIBS AND NOT ozz_build_msvc_rt_dll) message("Forcing ozz_build_msvc_rt_dll to ON as ozz is being built as dll (BUILD_SHARED_LIBS is ON).") set(ozz_build_msvc_rt_dll ON) endif() + if(is_sub_project) set(ozz_build_msvc_rt_dll ${ozz_build_msvc_rt_dll} PARENT_SCOPE) endif() @@ -51,7 +52,6 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/build-utils/cm # Detects Fbx SDK, required to build Fbx pipeline. if(ozz_build_tools AND ozz_build_fbx) - # Select a msvc runtime compatible with ozz_build_msvc_rt_dll set(FBX_SHARED ${BUILD_SHARED_LIBS}) set(FBX_MSVC_RT_DLL ${ozz_build_msvc_rt_dll}) @@ -69,15 +69,17 @@ else() # Disables fbx if tools are disabled set(ozz_build_fbx OFF) endif() + if(is_sub_project) set(ozz_build_fbx ${ozz_build_fbx} PARENT_SCOPE) endif() -# gltf +# gltf if(ozz_build_tools AND ozz_build_gltf) else() set(ozz_build_gltf OFF) endif() + if(is_sub_project) set(ozz_build_gltf ${ozz_build_gltf} PARENT_SCOPE) endif() @@ -131,4 +133,4 @@ install(FILES ${PROJECT_SOURCE_DIR}/CHANGES.md ${PROJECT_SOURCE_DIR}/LICENSE.md ${PROJECT_SOURCE_DIR}/README.md - DESTINATION ./) + DESTINATION "share/doc/ozz-animation/") diff --git a/3rdparty/ozz-animation/README.md b/3rdparty/ozz-animation/README.md index 98ef549..8d0a8a4 100644 --- a/3rdparty/ozz-animation/README.md +++ b/3rdparty/ozz-animation/README.md @@ -18,7 +18,7 @@ Documentation and samples are available from [ozz-animation website](http://guil Supported platforms ------------------- -Ozz is tested on Linux, Mac OS and Windows, for x86, x86-64 and ARM architectures. The run-time code (ozz_base, ozz_animation, ozz_geometry) depends only on c++11, the standard CRT and has no OS specific code, portability to any other platform shouldn't be an issue. +Ozz is tested on Linux, Mac OS and Windows, for x86, x86-64 and ARM architectures. The run-time code (ozz_base, ozz_animation, ozz_geometry) depends only on c++11, on the C and the C++ standard libraries, and has no OS specific code. Portability to any other platform shouldn't be an issue. Samples, tools and tests depend on external libraries (glfw, tinygltf, Fbx SDK, jsoncpp, gtest, ...), which could limit portability. diff --git a/3rdparty/ozz-animation/build-utils/cmake/compiler_settings.cmake b/3rdparty/ozz-animation/build-utils/cmake/compiler_settings.cmake index daa6f60..439fde8 100644 --- a/3rdparty/ozz-animation/build-utils/cmake/compiler_settings.cmake +++ b/3rdparty/ozz-animation/build-utils/cmake/compiler_settings.cmake @@ -1,18 +1,18 @@ # Set compilers settings for all platforms/compilers. -#--------------------------------------------------- +# --------------------------------------------------- -#----------------- +# ----------------- # Includes modules include(CheckIncludeFiles) -#------------------------------ +# ------------------------------ # Enables IDE folders y default set_property(GLOBAL PROPERTY USE_FOLDERS ON) -#------------------------ +# ------------------------ # Available build options -#------------------------ +# ------------------------ # Lists all the cxx flags set(cxx_all_flags CMAKE_CXX_FLAGS @@ -26,13 +26,14 @@ set(cxx_all_flags CMAKE_CXX_FLAGS_RELEASE CMAKE_C_FLAGS_RELEASE) -#-------------------------------------- +# -------------------------------------- # Cross compiler compilation flags # Requires C++11 if(NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 11) endif() + set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) @@ -41,15 +42,15 @@ if(ozz_build_simd_ref) add_compile_definitions(OZZ_BUILD_SIMD_REF) endif() - # Disables crt secure warnings - add_compile_definitions(_CRT_SECURE_NO_WARNINGS) - -#-------------------------------------- +# -------------------------------------- # Modify default MSVC compilation flags if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - #--------------------------- + # --------------------------- # For the common build flags + # Disables crt secure warnings + add_compile_definitions(_CRT_SECURE_NO_WARNINGS) + # Adds support for multiple processes builds add_compile_options(/MP) @@ -60,62 +61,61 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") add_compile_options(/WX) # Select whether to use the DLL version or the static library version of the Visual C++ runtime library. - foreach(flag ${cxx_all_flags}) - if (ozz_build_msvc_rt_dll) - string(REGEX REPLACE "/MT" "/MD" ${flag} "${${flag}}") - else() - string(REGEX REPLACE "/MD" "/MT" ${flag} "${${flag}}") - endif() - endforeach() + if(ozz_build_msvc_rt_dll) + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") + else() + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + endif() -#-------------------------------------- +# -------------------------------------- # else consider the compiler as GCC compatible (inc clang) else() - # Set the warning level to Wall add_compile_options(-Wall) # Enable extra level of warning - #add_compile_options(-Wextra) + # add_compile_options(-Wextra) # Set warning as error add_compile_options(-Werror) # ignored-attributes reports issue when using _m128 as template argument check_cxx_compiler_flag("-Wignored-attributes" W_IGNORED_ATTRIBUTES) + if(W_IGNORED_ATTRIBUTES) add_compile_options(-Wno-ignored-attributes) endif() - + # Disables c98 retrocompatibility warnings check_cxx_compiler_flag("-Wc++98-compat-pedantic" W_98_COMPAT_PEDANTIC) + if(W_98_COMPAT_PEDANTIC) add_compile_options(-Wno-c++98-compat-pedantic) endif() - # Check some options availibity for the targetted compiler + check_cxx_compiler_flag("-Wunused-result" W_UNUSED_RESULT) check_cxx_compiler_flag("-Wnull-dereference" W_NULL_DEREFERENCE) check_cxx_compiler_flag("-Wpragma-pack" W_PRAGMA_PACK) - #---------------------- + # ---------------------- # Sets emscripten output if(EMSCRIPTEN) SET(CMAKE_EXECUTABLE_SUFFIX ".html") add_link_options(-s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=0) - #if(NOT ozz_build_simd_ref) - # set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS "-msse2") - #endif() + # if(NOT ozz_build_simd_ref) + # set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS "-msse2") + # endif() endif() - endif() -#--------------------- +# --------------------- # Prints all the flags message(STATUS "---------------------------------------------------------") message(STATUS "Default build type is: ${CMAKE_BUILD_TYPE}") message(STATUS "The following compilation flags will be used:") + foreach(flag ${cxx_all_flags}) message(${flag} " ${${flag}}") endforeach() @@ -124,6 +124,7 @@ message(STATUS "---------------------------------------------------------") get_directory_property(DirectoryCompileOptions DIRECTORY ${PROJECT_SOURCE_DIR} COMPILE_OPTIONS) message(STATUS "Directory Compile Options:") + foreach(opt ${DirectoryCompileOptions}) message(STATUS ${opt}) endforeach() @@ -132,13 +133,14 @@ message(STATUS "---------------------------------------------------------") get_directory_property(DirectoryCompileDefinitions DIRECTORY ${PROJECT_SOURCE_DIR} COMPILE_DEFINITIONS) message(STATUS "Directory Compile Definitions:") + foreach(def ${DirectoryCompileDefinitions}) message(STATUS ${def}) endforeach() message(STATUS "---------------------------------------------------------") -#---------------------------------------------- +# ---------------------------------------------- # Modifies output directory for all executables set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ".") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ".") @@ -146,7 +148,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ".") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ".") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ".") -#------------------------------- +# ------------------------------- # Set a postfix for output files if(ozz_build_postfix) set(CMAKE_DEBUG_POSTFIX "_d") diff --git a/3rdparty/ozz-animation/build-utils/cmake/modules/FindFbx.cmake b/3rdparty/ozz-animation/build-utils/cmake/modules/FindFbx.cmake index f3bebe0..2d007a7 100644 --- a/3rdparty/ozz-animation/build-utils/cmake/modules/FindFbx.cmake +++ b/3rdparty/ozz-animation/build-utils/cmake/modules/FindFbx.cmake @@ -67,7 +67,9 @@ function(FindFbxLibrariesGeneric _FBX_ROOT_DIR _OUT_FBX_LIBRARIES _OUT_FBX_LIBRA # Figures out matching compiler/os directory. if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC") - if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.20) + if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.30) + set(FBX_CP_PATH "vs2022") + elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.20) set(FBX_CP_PATH "vs2019") elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.10) set(FBX_CP_PATH "vs2017") diff --git a/3rdparty/ozz-animation/extern/glfw/CMakeLists.txt b/3rdparty/ozz-animation/extern/glfw/CMakeLists.txt index 6c4d5b4..f93d671 100644 --- a/3rdparty/ozz-animation/extern/glfw/CMakeLists.txt +++ b/3rdparty/ozz-animation/extern/glfw/CMakeLists.txt @@ -57,8 +57,6 @@ if(UNIX AND APPLE) lib/cocoa/cocoa_joystick.m lib/cocoa/cocoa_time.m lib/cocoa/cocoa_window.m) - # Treats .m files as C files. - set_source_files_properties(${specific_objc_file_list} PROPERTIES LANGUAGE C) # Disables warnings in glfw. set_source_files_properties(${specific_objc_file_list} PROPERTIES COMPILE_FLAGS diff --git a/3rdparty/ozz-animation/extern/jsoncpp/dist/jsoncpp.cpp b/3rdparty/ozz-animation/extern/jsoncpp/dist/jsoncpp.cpp index d720967..bb85e0f 100644 --- a/3rdparty/ozz-animation/extern/jsoncpp/dist/jsoncpp.cpp +++ b/3rdparty/ozz-animation/extern/jsoncpp/dist/jsoncpp.cpp @@ -3887,7 +3887,7 @@ std::string valueToString(double value, bool useSpecialFloats, unsigned int prec int len = -1; char formatString[6]; - sprintf(formatString, "%%.%dg", precision); + snprintf(formatString, sizeof(formatString), "%%.%dg", precision); // Print into the buffer. We need not request the alternative representation // that always has a decimal point because JSON doesn't distingish the diff --git a/3rdparty/ozz-animation/include/ozz/base/endianness.h b/3rdparty/ozz-animation/include/ozz/base/endianness.h index 97c66d8..e8f7aa6 100644 --- a/3rdparty/ozz-animation/include/ozz/base/endianness.h +++ b/3rdparty/ozz-animation/include/ozz/base/endianness.h @@ -66,12 +66,11 @@ template struct EndianSwapper; // Internal macro used to swap two bytes. -#define OZZ_BYTE_SWAP(_a, _b) \ - do { \ - const ozz::byte temp = (_a); \ - (_a) = (_b); \ - (_b) = temp; \ - } while (0) +OZZ_INLINE void _in_place_byte_swap(byte& _a, byte& _b) { + _a = _a ^ _b; + _b = _a ^ _b; + _a = _a ^ _b; +} // EndianSwapper specialization for 1 byte types. template @@ -86,12 +85,12 @@ struct EndianSwapper<_Ty, 2> { OZZ_INLINE static void Swap(_Ty* _ty, size_t _count) { byte* alias = reinterpret_cast(_ty); for (size_t i = 0; i < _count * 2; i += 2) { - OZZ_BYTE_SWAP(alias[i + 0], alias[i + 1]); + _in_place_byte_swap(alias[i + 0], alias[i + 1]); } } OZZ_INLINE static _Ty Swap(_Ty _ty) { // Pass by copy to swap _ty in-place. byte* alias = reinterpret_cast(&_ty); - OZZ_BYTE_SWAP(alias[0], alias[1]); + _in_place_byte_swap(alias[0], alias[1]); return _ty; } }; @@ -102,14 +101,14 @@ struct EndianSwapper<_Ty, 4> { OZZ_INLINE static void Swap(_Ty* _ty, size_t _count) { byte* alias = reinterpret_cast(_ty); for (size_t i = 0; i < _count * 4; i += 4) { - OZZ_BYTE_SWAP(alias[i + 0], alias[i + 3]); - OZZ_BYTE_SWAP(alias[i + 1], alias[i + 2]); + _in_place_byte_swap(alias[i + 0], alias[i + 3]); + _in_place_byte_swap(alias[i + 1], alias[i + 2]); } } OZZ_INLINE static _Ty Swap(_Ty _ty) { // Pass by copy to swap _ty in-place. byte* alias = reinterpret_cast(&_ty); - OZZ_BYTE_SWAP(alias[0], alias[3]); - OZZ_BYTE_SWAP(alias[1], alias[2]); + _in_place_byte_swap(alias[0], alias[3]); + _in_place_byte_swap(alias[1], alias[2]); return _ty; } }; @@ -120,25 +119,22 @@ struct EndianSwapper<_Ty, 8> { OZZ_INLINE static void Swap(_Ty* _ty, size_t _count) { byte* alias = reinterpret_cast(_ty); for (size_t i = 0; i < _count * 8; i += 8) { - OZZ_BYTE_SWAP(alias[i + 0], alias[i + 7]); - OZZ_BYTE_SWAP(alias[i + 1], alias[i + 6]); - OZZ_BYTE_SWAP(alias[i + 2], alias[i + 5]); - OZZ_BYTE_SWAP(alias[i + 3], alias[i + 4]); + _in_place_byte_swap(alias[i + 0], alias[i + 7]); + _in_place_byte_swap(alias[i + 1], alias[i + 6]); + _in_place_byte_swap(alias[i + 2], alias[i + 5]); + _in_place_byte_swap(alias[i + 3], alias[i + 4]); } } OZZ_INLINE static _Ty Swap(_Ty _ty) { // Pass by copy to swap _ty in-place. byte* alias = reinterpret_cast(&_ty); - OZZ_BYTE_SWAP(alias[0], alias[7]); - OZZ_BYTE_SWAP(alias[1], alias[6]); - OZZ_BYTE_SWAP(alias[2], alias[5]); - OZZ_BYTE_SWAP(alias[3], alias[4]); + _in_place_byte_swap(alias[0], alias[7]); + _in_place_byte_swap(alias[1], alias[6]); + _in_place_byte_swap(alias[2], alias[5]); + _in_place_byte_swap(alias[3], alias[4]); return _ty; } }; -// OZZ_BYTE_SWAP is not useful anymore. -#undef OZZ_BYTE_SWAP - // Helper function that swaps _count elements of the array _ty in place. template OZZ_INLINE void EndianSwap(_Ty* _ty, size_t _count) { diff --git a/3rdparty/ozz-animation/samples/additive/sample_additive.cc b/3rdparty/ozz-animation/samples/additive/sample_additive.cc index 2a646e1..d033bbc 100644 --- a/3rdparty/ozz-animation/samples/additive/sample_additive.cc +++ b/3rdparty/ozz-animation/samples/additive/sample_additive.cc @@ -250,7 +250,7 @@ class AdditiveBlendSampleApplication : public ozz::sample::Application { ozz::sample::ImGui::OpenClose oc(_im_gui, "Blending parameters", &open); if (open) { _im_gui->DoLabel("Main layer:"); - std::sprintf(label, "Layer weight: %.2f", base_weight_); + std::snprintf(label, sizeof(label), "Layer weight: %.2f", base_weight_); _im_gui->DoSlider(label, 0.f, 1.f, &base_weight_, 1.f); _im_gui->DoLabel("Additive layer:"); @@ -259,8 +259,8 @@ class AdditiveBlendSampleApplication : public ozz::sample::Application { std::memcpy(weights.data(), additive_weigths_, sizeof(additive_weigths_)); - std::sprintf(label, "Weights\nCurl: %.2f\nSplay: %.2f", - additive_weigths_[kCurl], additive_weigths_[kSplay]); + std::snprintf(label, sizeof(label), "Weights\nCurl: %.2f\nSplay: %.2f", + additive_weigths_[kCurl], additive_weigths_[kSplay]); if (_im_gui->DoSlider2D(label, {{0.f, 0.f}}, {{1.f, 1.f}}, &weights)) { auto_animate_weights_ = false; // User interacted. std::memcpy(additive_weigths_, weights.data(), diff --git a/3rdparty/ozz-animation/samples/attach/sample_attach.cc b/3rdparty/ozz-animation/samples/attach/sample_attach.cc index 7cba010..d425f62 100644 --- a/3rdparty/ozz-animation/samples/attach/sample_attach.cc +++ b/3rdparty/ozz-animation/samples/attach/sample_attach.cc @@ -161,16 +161,16 @@ class AttachSampleApplication : public ozz::sample::Application { if (open && skeleton_.num_joints() != 0) { _im_gui->DoLabel("Select joint:"); char label[64]; - std::sprintf(label, "%s (%d)", skeleton_.joint_names()[attachment_], - attachment_); + std::snprintf(label, sizeof(label), "%s (%d)", + skeleton_.joint_names()[attachment_], attachment_); _im_gui->DoSlider(label, 0, skeleton_.num_joints() - 1, &attachment_); _im_gui->DoLabel("Attachment offset:"); - sprintf(label, "x: %02f", offset_.x); + std::snprintf(label, sizeof(label), "x: %02f", offset_.x); _im_gui->DoSlider(label, -1.f, 1.f, &offset_.x); - sprintf(label, "y: %02f", offset_.y); + std::snprintf(label, sizeof(label), "y: %02f", offset_.y); _im_gui->DoSlider(label, -1.f, 1.f, &offset_.y); - sprintf(label, "z: %02f", offset_.z); + std::snprintf(label, sizeof(label), "z: %02f", offset_.z); _im_gui->DoSlider(label, -1.f, 1.f, &offset_.z); } } diff --git a/3rdparty/ozz-animation/samples/blend/sample_blend.cc b/3rdparty/ozz-animation/samples/blend/sample_blend.cc index 0bda296..0f6860a 100644 --- a/3rdparty/ozz-animation/samples/blend/sample_blend.cc +++ b/3rdparty/ozz-animation/samples/blend/sample_blend.cc @@ -58,7 +58,7 @@ OZZ_OPTIONS_DECLARE_STRING(animation2, // Third animation archive can be specified as an option. OZZ_OPTIONS_DECLARE_STRING(animation3, - "Path to the second animation (ozz archive format).", + "Path to the third animation (ozz archive format).", "media/animation3.ozz", false) class BlendSampleApplication : public ozz::sample::Application { @@ -242,16 +242,16 @@ class BlendSampleApplication : public ozz::sample::Application { } char label[64]; - std::sprintf(label, "Blend ratio: %.2f", blend_ratio_); + std::snprintf(label, sizeof(label), "Blend ratio: %.2f", blend_ratio_); _im_gui->DoSlider(label, 0.f, 1.f, &blend_ratio_, 1.f, !manual_); for (int i = 0; i < kNumLayers; ++i) { Sampler& sampler = samplers_[i]; - std::sprintf(label, "Weight %d: %.2f", i, sampler.weight); + std::snprintf(label, sizeof(label), "Weight %d: %.2f", i, sampler.weight); _im_gui->DoSlider(label, 0.f, 1.f, &sampler.weight, 1.f, manual_); } - std::sprintf(label, "Threshold: %.2f", threshold_); + std::snprintf(label, sizeof(label), "Threshold: %.2f", threshold_); _im_gui->DoSlider(label, .01f, 1.f, &threshold_); } } diff --git a/3rdparty/ozz-animation/samples/foot_ik/sample_foot_ik.cc b/3rdparty/ozz-animation/samples/foot_ik/sample_foot_ik.cc index d0b0278..ddfdf39 100644 --- a/3rdparty/ozz-animation/samples/foot_ik/sample_foot_ik.cc +++ b/3rdparty/ozz-animation/samples/foot_ik/sample_foot_ik.cc @@ -608,7 +608,7 @@ class FootIKSampleApplication : public ozz::sample::Application { virtual void OnDestroy() {} virtual bool OnGui(ozz::sample::ImGui* _im_gui) { - char txt[32]; + char label[32]; // Main options { @@ -636,12 +636,12 @@ class FootIKSampleApplication : public ozz::sample::Application { static bool opened = true; ozz::sample::ImGui::OpenClose oc(_im_gui, "IK settings", &opened); if (opened) { - sprintf(txt, "Foot height %.2g", foot_heigh_); - _im_gui->DoSlider(txt, 0.f, .3f, &foot_heigh_); - sprintf(txt, "Weight %.2g", weight_); - _im_gui->DoSlider(txt, 0.f, 1.f, &weight_); - sprintf(txt, "Soften %.2g", soften_); - _im_gui->DoSlider(txt, 0.f, 1.f, &soften_, 1.f, two_bone_ik_); + snprintf(label, sizeof(label), "Foot height %.2g", foot_heigh_); + _im_gui->DoSlider(label, 0.f, .3f, &foot_heigh_); + snprintf(label, sizeof(label), "Weight %.2g", weight_); + _im_gui->DoSlider(label, 0.f, 1.f, &weight_); + snprintf(label, sizeof(label), "Soften %.2g", soften_); + _im_gui->DoSlider(label, 0.f, 1.f, &soften_, 1.f, two_bone_ik_); } } @@ -652,19 +652,19 @@ class FootIKSampleApplication : public ozz::sample::Application { bool moved = false; // Translation _im_gui->DoLabel("Translation"); - sprintf(txt, "x %.2g", root_translation_.x); - moved |= _im_gui->DoSlider(txt, -10.f, 10.f, &root_translation_.x); - sprintf(txt, "y %.2g", root_translation_.y); - moved |= _im_gui->DoSlider(txt, 0.f, 5.f, &root_translation_.y, 1.f, + snprintf(label, sizeof(label), "x %.2g", root_translation_.x); + moved |= _im_gui->DoSlider(label, -10.f, 10.f, &root_translation_.x); + snprintf(label, sizeof(label), "y %.2g", root_translation_.y); + moved |= _im_gui->DoSlider(label, 0.f, 5.f, &root_translation_.y, 1.f, !auto_character_height_); - sprintf(txt, "z %.2g", root_translation_.z); - moved |= _im_gui->DoSlider(txt, -10.f, 10.f, &root_translation_.z); + snprintf(label, sizeof(label), "z %.2g", root_translation_.z); + moved |= _im_gui->DoSlider(label, -10.f, 10.f, &root_translation_.z); // Rotation (in euler form) _im_gui->DoLabel("Rotation"); - sprintf(txt, "yaw %.3g", root_yaw_ * ozz::math::kRadianToDegree); + snprintf(label, sizeof(label), "yaw %.3g", root_yaw_ * ozz::math::kRadianToDegree); moved |= - _im_gui->DoSlider(txt, -ozz::math::kPi, ozz::math::kPi, &root_yaw_); + _im_gui->DoSlider(label, -ozz::math::kPi, ozz::math::kPi, &root_yaw_); // Character position shouldn't be changed after the update. In this // case, because UI is updated after "game" update, we need to recompute diff --git a/3rdparty/ozz-animation/samples/framework/application.cc b/3rdparty/ozz-animation/samples/framework/application.cc index ede6c40..a5c155a 100644 --- a/3rdparty/ozz-animation/samples/framework/application.cc +++ b/3rdparty/ozz-animation/samples/framework/application.cc @@ -528,31 +528,32 @@ bool Application::Gui() { } bool Application::FrameworkGui() { + char label[64]; // Downcast to public imgui. ImGui* im_gui = im_gui_.get(); { // Render statistics static bool open = true; ImGui::OpenClose stat_oc(im_gui, "Statistics", &open); if (open) { - char szLabel[64]; { // FPS Record::Statistics statistics = fps_->GetStatistics(); - std::sprintf(szLabel, "FPS: %.0f", - statistics.mean == 0.f ? 0.f : 1000.f / statistics.mean); + std::snprintf(label, sizeof(label), "FPS: %.0f", + statistics.mean == 0.f ? 0.f : 1000.f / statistics.mean); static bool fps_open = false; - ImGui::OpenClose stats(im_gui, szLabel, &fps_open); + ImGui::OpenClose stats(im_gui, label, &fps_open); if (fps_open) { - std::sprintf(szLabel, "Frame: %.2f ms", statistics.mean); - im_gui->DoGraph(szLabel, 0.f, statistics.max, statistics.latest, + std::snprintf(label, sizeof(label), "Frame: %.2f ms", + statistics.mean); + im_gui->DoGraph(label, 0.f, statistics.max, statistics.latest, fps_->cursor(), fps_->record_begin(), fps_->record_end()); } } { // Update time Record::Statistics statistics = update_time_->GetStatistics(); - std::sprintf(szLabel, "Update: %.2f ms", statistics.mean); + std::snprintf(label, sizeof(label), "Update: %.2f ms", statistics.mean); static bool update_open = true; // This is the most relevant for ozz. - ImGui::OpenClose stats(im_gui, szLabel, &update_open); + ImGui::OpenClose stats(im_gui, label, &update_open); if (update_open) { im_gui->DoGraph(nullptr, 0.f, statistics.max, statistics.latest, update_time_->cursor(), update_time_->record_begin(), @@ -561,9 +562,9 @@ bool Application::FrameworkGui() { } { // Render time Record::Statistics statistics = render_time_->GetStatistics(); - std::sprintf(szLabel, "Render: %.2f ms", statistics.mean); + std::snprintf(label, sizeof(label), "Render: %.2f ms", statistics.mean); static bool render_open = false; - ImGui::OpenClose stats(im_gui, szLabel, &render_open); + ImGui::OpenClose stats(im_gui, label, &render_open); if (render_open) { im_gui->DoGraph(nullptr, 0.f, statistics.max, statistics.latest, render_time_->cursor(), render_time_->record_begin(), @@ -580,18 +581,15 @@ bool Application::FrameworkGui() { im_gui->DoButton("Freeze", true, &freeze_); im_gui->DoCheckBox("Fix update rate", &fix_update_rate, true); if (!fix_update_rate) { - char sz_factor[64]; - std::sprintf(sz_factor, "Time factor: %.2f", time_factor_); - im_gui->DoSlider(sz_factor, -5.f, 5.f, &time_factor_); + std::snprintf(label, sizeof(label), "Time factor: %.2f", time_factor_); + im_gui->DoSlider(label, -5.f, 5.f, &time_factor_); if (im_gui->DoButton("Reset time factor", time_factor_ != 1.f)) { time_factor_ = 1.f; } } else { - char sz_fixed_update_rate[64]; - std::sprintf(sz_fixed_update_rate, "Update rate: %.0f fps", - fixed_update_rate); - im_gui->DoSlider(sz_fixed_update_rate, 1.f, 200.f, &fixed_update_rate, - .5f, true); + std::snprintf(label, sizeof(label), "Update rate: %.0f fps", + fixed_update_rate); + im_gui->DoSlider(label, 1.f, 200.f, &fixed_update_rate, .5f, true); if (im_gui->DoButton("Reset update rate", fixed_update_rate != 60.f)) { fixed_update_rate = 60.f; } @@ -615,10 +613,9 @@ bool Application::FrameworkGui() { } // Vertical sync & swap interval bool changed = im_gui->DoCheckBox("Vertical sync", &vertical_sync_); - char szLabel[64]; - std::sprintf(szLabel, "Swap interval: %d", swap_interval_); + std::snprintf(label, sizeof(label), "Swap interval: %d", swap_interval_); changed |= - im_gui->DoSlider(szLabel, 1, 4, &swap_interval_, 1.f, vertical_sync_); + im_gui->DoSlider(label, 1, 4, &swap_interval_, 1.f, vertical_sync_); if (changed) { glfwSwapInterval(vertical_sync_ ? swap_interval_ : 0); } @@ -640,10 +637,9 @@ bool Application::FrameworkGui() { } } - char szResolution[64]; - std::sprintf(szResolution, "Resolution: %dx%d", resolution_.width, - resolution_.height); - if (im_gui->DoSlider(szResolution, 0, kNumPresets - 1, &preset_lookup)) { + std::snprintf(label, sizeof(label), "Resolution: %dx%d", resolution_.width, + resolution_.height); + if (im_gui->DoSlider(label, 0, kNumPresets - 1, &preset_lookup)) { // Resolution changed. resolution_ = resolution_presets[preset_lookup]; glfwSetWindowSize(resolution_.width, resolution_.height); diff --git a/3rdparty/ozz-animation/samples/framework/application.h b/3rdparty/ozz-animation/samples/framework/application.h index c91ecfe..7a17519 100644 --- a/3rdparty/ozz-animation/samples/framework/application.h +++ b/3rdparty/ozz-animation/samples/framework/application.h @@ -149,7 +149,7 @@ class Application { enum LoopStatus { kContinue, // Can continue with next loop. kBreak, // Should stop looping (ex: exit). - kBreakFailure, // // Should stop looping beacause something went wrong. + kBreakFailure, // Should stop looping because something went wrong. }; LoopStatus OneLoop(int _loops); diff --git a/3rdparty/ozz-animation/samples/framework/internal/imgui_impl.cc b/3rdparty/ozz-animation/samples/framework/internal/imgui_impl.cc index e47e6d0..bb5e236 100644 --- a/3rdparty/ozz-animation/samples/framework/internal/imgui_impl.cc +++ b/3rdparty/ozz-animation/samples/framework/internal/imgui_impl.cc @@ -100,7 +100,7 @@ bool FormatFloat(float _value, char* _string, const char* _string_end) { if (!_string || _string_end - _string < 8 + precision + 1) { return false; } - std::sprintf(_string, "%.2g\n", _value); + std::snprintf(_string, _string_end - _string, "%.2g\n", _value); // Removes unnecessary '0' digits in the exponent. char* exponent = strchr(_string, 'e'); diff --git a/3rdparty/ozz-animation/samples/framework/internal/shooter.cc b/3rdparty/ozz-animation/samples/framework/internal/shooter.cc index 80492aa..d441f96 100644 --- a/3rdparty/ozz-animation/samples/framework/internal/shooter.cc +++ b/3rdparty/ozz-animation/samples/framework/internal/shooter.cc @@ -160,12 +160,12 @@ bool Shooter::Process() { GL(BindBuffer(GL_PIXEL_PACK_BUFFER, shot.pbo)); const void* pixels = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); if (pixels) { - char name[16]; - sprintf(name, "%06d.tga", shot_number_++); + char filename[16]; + std::snprintf(filename, sizeof(filename), "%06d.tga", shot_number_++); - ozz::sample::image::WriteTGA(name, shot.width, shot.height, image_format_, - reinterpret_cast(pixels), - false); + ozz::sample::image::WriteTGA( + filename, shot.width, shot.height, image_format_, + reinterpret_cast(pixels), false); GL(UnmapBuffer(GL_PIXEL_PACK_BUFFER)); } GL(BindBuffer(GL_PIXEL_PACK_BUFFER, 0)); diff --git a/3rdparty/ozz-animation/samples/framework/utils.cc b/3rdparty/ozz-animation/samples/framework/utils.cc index 85fca39..f727401 100644 --- a/3rdparty/ozz-animation/samples/framework/utils.cc +++ b/3rdparty/ozz-animation/samples/framework/utils.cc @@ -110,21 +110,22 @@ bool PlaybackController::OnGui(const animation::Animation& _animation, _im_gui->DoCheckBox("Loop", &loop_, _enabled); - char szLabel[64]; + char label[64]; // Uses a local copy of time_ so that set_time is used to actually apply // changes. Otherwise previous time would be incorrect. float ratio = time_ratio(); - std::sprintf(szLabel, "Animation time: %.2f", ratio * _animation.duration()); - if (_im_gui->DoSlider(szLabel, 0.f, 1.f, &ratio, 1.f, + std::snprintf(label, sizeof(label), "Animation time: %.2f", + ratio * _animation.duration()); + if (_im_gui->DoSlider(label, 0.f, 1.f, &ratio, 1.f, _enabled && _allow_set_time)) { set_time_ratio(ratio); // Pause the time if slider as moved. play_ = false; time_changed = true; } - std::sprintf(szLabel, "Playback speed: %.2f", playback_speed_); - _im_gui->DoSlider(szLabel, -5.f, 5.f, &playback_speed_, 1.f, _enabled); + std::snprintf(label, sizeof(label), "Playback speed: %.2f", playback_speed_); + _im_gui->DoSlider(label, -5.f, 5.f, &playback_speed_, 1.f, _enabled); // Allow to reset speed if it is not the default value. if (_im_gui->DoButton("Reset playback speed", @@ -139,7 +140,7 @@ bool OnRawSkeletonJointGui( ozz::sample::ImGui* _im_gui, ozz::animation::offline::RawSkeleton::Joint::Children* _children, ozz::vector::iterator* _oc_state) { - char txt[255]; + char label[255]; bool modified = false; for (size_t i = 0; i < _children->size(); ++i) { @@ -152,23 +153,23 @@ bool OnRawSkeletonJointGui( // Translation ozz::math::Float3& translation = joint.transform.translation; _im_gui->DoLabel("Translation"); - sprintf(txt, "x %.2g", translation.x); - modified |= _im_gui->DoSlider(txt, -1.f, 1.f, &translation.x); - sprintf(txt, "y %.2g", translation.y); - modified |= _im_gui->DoSlider(txt, -1.f, 1.f, &translation.y); - sprintf(txt, "z %.2g", translation.z); - modified |= _im_gui->DoSlider(txt, -1.f, 1.f, &translation.z); + snprintf(label, sizeof(label), "x %.2g", translation.x); + modified |= _im_gui->DoSlider(label, -1.f, 1.f, &translation.x); + snprintf(label, sizeof(label), "y %.2g", translation.y); + modified |= _im_gui->DoSlider(label, -1.f, 1.f, &translation.y); + snprintf(label, sizeof(label), "z %.2g", translation.z); + modified |= _im_gui->DoSlider(label, -1.f, 1.f, &translation.z); // Rotation (in euler form) ozz::math::Quaternion& rotation = joint.transform.rotation; _im_gui->DoLabel("Rotation"); ozz::math::Float3 euler = ToEuler(rotation) * ozz::math::kRadianToDegree; - sprintf(txt, "x %.3g", euler.x); - bool euler_modified = _im_gui->DoSlider(txt, -180.f, 180.f, &euler.x); - sprintf(txt, "y %.3g", euler.y); - euler_modified |= _im_gui->DoSlider(txt, -180.f, 180.f, &euler.y); - sprintf(txt, "z %.3g", euler.z); - euler_modified |= _im_gui->DoSlider(txt, -180.f, 180.f, &euler.z); + snprintf(label, sizeof(label), "x %.3g", euler.x); + bool euler_modified = _im_gui->DoSlider(label, -180.f, 180.f, &euler.x); + snprintf(label, sizeof(label), "y %.3g", euler.y); + euler_modified |= _im_gui->DoSlider(label, -180.f, 180.f, &euler.y); + snprintf(label, sizeof(label), "z %.3g", euler.z); + euler_modified |= _im_gui->DoSlider(label, -180.f, 180.f, &euler.z); if (euler_modified) { modified = true; ozz::math::Float3 euler_rad = euler * ozz::math::kDegreeToRadian; @@ -179,8 +180,8 @@ bool OnRawSkeletonJointGui( // Scale (must be uniform and not 0) _im_gui->DoLabel("Scale"); ozz::math::Float3& scale = joint.transform.scale; - sprintf(txt, "%.2g", scale.x); - if (_im_gui->DoSlider(txt, -1.f, 1.f, &scale.x)) { + snprintf(label, sizeof(label), "%.2g", scale.x); + if (_im_gui->DoSlider(label, -1.f, 1.f, &scale.x)) { modified = true; scale.y = scale.z = scale.x = scale.x != 0.f ? scale.x : .01f; } @@ -328,7 +329,7 @@ bool LoadAnimation(const char* _filename, } bool LoadRawAnimation(const char* _filename, - ozz::animation::offline::RawAnimation* _animation) { + ozz::animation::offline::RawAnimation* _animation) { assert(_filename && _animation); ozz::log::Out() << "Loading raw animation archive: " << _filename << "." << std::endl; diff --git a/3rdparty/ozz-animation/samples/look_at/sample_look_at.cc b/3rdparty/ozz-animation/samples/look_at/sample_look_at.cc index 4867534..f1d2ab7 100644 --- a/3rdparty/ozz-animation/samples/look_at/sample_look_at.cc +++ b/3rdparty/ozz-animation/samples/look_at/sample_look_at.cc @@ -387,15 +387,15 @@ class LookAtSampleApplication : public ozz::sample::Application { virtual void OnDestroy() {} virtual bool OnGui(ozz::sample::ImGui* _im_gui) { - char txt[64]; + char label[64]; _im_gui->DoCheckBox("Enable ik", &enable_ik_); - sprintf(txt, "IK chain length: %d", chain_length_); - _im_gui->DoSlider(txt, 0, kMaxChainLength, &chain_length_); - sprintf(txt, "Joint weight %.2g", joint_weight_); - _im_gui->DoSlider(txt, 0.f, 1.f, &joint_weight_); - sprintf(txt, "Chain weight %.2g", chain_weight_); - _im_gui->DoSlider(txt, 0.f, 1.f, &chain_weight_); + snprintf(label, sizeof(label), "IK chain length: %d", chain_length_); + _im_gui->DoSlider(label, 0, kMaxChainLength, &chain_length_); + snprintf(label, sizeof(label), "Joint weight %.2g", joint_weight_); + _im_gui->DoSlider(label, 0.f, 1.f, &joint_weight_); + snprintf(label, sizeof(label), "Chain weight %.2g", chain_weight_); + _im_gui->DoSlider(label, 0.f, 1.f, &chain_weight_); // Exposes animation runtime playback controls. { @@ -413,15 +413,15 @@ class LookAtSampleApplication : public ozz::sample::Application { const float kTargetRange = 3.f; _im_gui->DoLabel("Animated extent"); - sprintf(txt, "%.2g", target_extent_); - _im_gui->DoSlider(txt, 0.f, kTargetRange, &target_extent_); + snprintf(label, sizeof(label), "%.2g", target_extent_); + _im_gui->DoSlider(label, 0.f, kTargetRange, &target_extent_); - sprintf(txt, "x %.2g", target_offset_.x); - _im_gui->DoSlider(txt, -kTargetRange, kTargetRange, &target_offset_.x); - sprintf(txt, "y %.2g", target_offset_.y); - _im_gui->DoSlider(txt, -kTargetRange, kTargetRange, &target_offset_.y); - sprintf(txt, "z %.2g", target_offset_.z); - _im_gui->DoSlider(txt, -kTargetRange, kTargetRange, &target_offset_.z); + snprintf(label, sizeof(label), "x %.2g", target_offset_.x); + _im_gui->DoSlider(label, -kTargetRange, kTargetRange, &target_offset_.x); + snprintf(label, sizeof(label), "y %.2g", target_offset_.y); + _im_gui->DoSlider(label, -kTargetRange, kTargetRange, &target_offset_.y); + snprintf(label, sizeof(label), "z %.2g", target_offset_.z); + _im_gui->DoSlider(label, -kTargetRange, kTargetRange, &target_offset_.z); } } @@ -430,12 +430,12 @@ class LookAtSampleApplication : public ozz::sample::Application { ozz::sample::ImGui::OpenClose oc(_im_gui, "Eyes offset", &opened); if (opened) { const float kOffsetRange = .5f; - sprintf(txt, "x %.2g", eyes_offset_.x); - _im_gui->DoSlider(txt, -kOffsetRange, kOffsetRange, &eyes_offset_.x); - sprintf(txt, "y %.2g", eyes_offset_.y); - _im_gui->DoSlider(txt, -kOffsetRange, kOffsetRange, &eyes_offset_.y); - sprintf(txt, "z %.2g", eyes_offset_.z); - _im_gui->DoSlider(txt, -kOffsetRange, kOffsetRange, &eyes_offset_.z); + snprintf(label, sizeof(label), "x %.2g", eyes_offset_.x); + _im_gui->DoSlider(label, -kOffsetRange, kOffsetRange, &eyes_offset_.x); + snprintf(label, sizeof(label), "y %.2g", eyes_offset_.y); + _im_gui->DoSlider(label, -kOffsetRange, kOffsetRange, &eyes_offset_.y); + snprintf(label, sizeof(label), "z %.2g", eyes_offset_.z); + _im_gui->DoSlider(label, -kOffsetRange, kOffsetRange, &eyes_offset_.z); } } diff --git a/3rdparty/ozz-animation/samples/millipede/sample_millipede.cc b/3rdparty/ozz-animation/samples/millipede/sample_millipede.cc index d1f6123..7a23d54 100644 --- a/3rdparty/ozz-animation/samples/millipede/sample_millipede.cc +++ b/3rdparty/ozz-animation/samples/millipede/sample_millipede.cc @@ -152,7 +152,7 @@ class MillipedeSampleApplication : public ozz::sample::Application { // Rebuilds all if the number of joints has changed. int joints = skeleton_->num_joints(); char label[64]; - std::sprintf(label, "Joints count: %d", joints); + std::snprintf(label, sizeof(label), "Joints count: %d", joints); // Uses an exponential scale in the slider to maintain enough precision in // the lowest values. @@ -219,17 +219,17 @@ class MillipedeSampleApplication : public ozz::sample::Application { root->transform.rotation = Quaternion::identity(); root->transform.scale = Float3::one(); - char buf[16]; + char number[16]; for (int i = 0; i < slice_count_; ++i) { // Format joint number. - std::sprintf(buf, "%d", i); + std::snprintf(number, sizeof(number), "%d", i); root->children.resize(3); // Left leg. RawSkeleton::Joint& lu = root->children[0]; lu.name = "lu"; - lu.name += buf; + lu.name += number; lu.transform.translation = kTransUp; lu.transform.rotation = kRotLeftUp; lu.transform.scale = Float3::one(); @@ -237,7 +237,7 @@ class MillipedeSampleApplication : public ozz::sample::Application { lu.children.resize(1); RawSkeleton::Joint& ld = lu.children[0]; ld.name = "ld"; - ld.name += buf; + ld.name += number; ld.transform.translation = kTransDown; ld.transform.rotation = kRotLeftDown; ld.transform.scale = Float3::one(); @@ -245,7 +245,7 @@ class MillipedeSampleApplication : public ozz::sample::Application { ld.children.resize(1); RawSkeleton::Joint& lf = ld.children[0]; lf.name = "lf"; - lf.name += buf; + lf.name += number; lf.transform.translation = Float3::x_axis(); lf.transform.rotation = Quaternion::identity(); lf.transform.scale = Float3::one(); @@ -253,7 +253,7 @@ class MillipedeSampleApplication : public ozz::sample::Application { // Right leg. RawSkeleton::Joint& ru = root->children[1]; ru.name = "ru"; - ru.name += buf; + ru.name += number; ru.transform.translation = kTransUp; ru.transform.rotation = kRotRightUp; ru.transform.scale = Float3::one(); @@ -261,7 +261,7 @@ class MillipedeSampleApplication : public ozz::sample::Application { ru.children.resize(1); RawSkeleton::Joint& rd = ru.children[0]; rd.name = "rd"; - rd.name += buf; + rd.name += number; rd.transform.translation = kTransDown; rd.transform.rotation = kRotRightDown; rd.transform.scale = Float3::one(); @@ -269,7 +269,7 @@ class MillipedeSampleApplication : public ozz::sample::Application { rd.children.resize(1); RawSkeleton::Joint& rf = rd.children[0]; rf.name = "rf"; - rf.name += buf; + rf.name += number; rf.transform.translation = Float3::x_axis(); rf.transform.rotation = Quaternion::identity(); rf.transform.scale = Float3::one(); @@ -277,7 +277,7 @@ class MillipedeSampleApplication : public ozz::sample::Application { // Spine. RawSkeleton::Joint& sp = root->children[2]; sp.name = "sp"; - sp.name += buf; + sp.name += number; sp.transform.translation = Float3(0.f, 0.f, kSpinLength); sp.transform.rotation = Quaternion::identity(); sp.transform.scale = Float3::one(); diff --git a/3rdparty/ozz-animation/samples/multithread/sample_multithread.cc b/3rdparty/ozz-animation/samples/multithread/sample_multithread.cc index d59d174..ec76562 100644 --- a/3rdparty/ozz-animation/samples/multithread/sample_multithread.cc +++ b/3rdparty/ozz-animation/samples/multithread/sample_multithread.cc @@ -287,10 +287,10 @@ class MultithreadSampleApplication : public ozz::sample::Application { ozz::sample::ImGui::OpenClose oc(_im_gui, "Sample control", &oc_open); if (oc_open) { char label[64]; - std::sprintf(label, "Number of entities: %d", num_characters_); + std::snprintf(label, sizeof(label), "Number of entities: %d", num_characters_); _im_gui->DoSlider(label, 1, kMaxCharacters, &num_characters_, .7f); const int num_joints = num_characters_ * skeleton_.num_joints(); - std::sprintf(label, "Number of joints: %d", num_joints); + std::snprintf(label, sizeof(label), "Number of joints: %d", num_joints); _im_gui->DoLabel(label); } } @@ -303,11 +303,11 @@ class MultithreadSampleApplication : public ozz::sample::Application { has_threading_support_); if (enable_theading_) { char label[64]; - std::sprintf(label, "Grain size: %d", grain_size_); + std::snprintf(label, sizeof(label), "Grain size: %d", grain_size_); _im_gui->DoSlider(label, kMinGrainSize, kMaxCharacters, &grain_size_, .2f); const int num_threads = monitor_.ThreadCount(); - std::sprintf(label, "Thread/task count: %d/%d", num_threads, + std::snprintf(label, sizeof(label), "Thread/task count: %d/%d", num_threads, monitor_.TaskCount()); _im_gui->DoLabel(label); } diff --git a/3rdparty/ozz-animation/samples/optimize/sample_optimize.cc b/3rdparty/ozz-animation/samples/optimize/sample_optimize.cc index 8e38224..7402e0e 100644 --- a/3rdparty/ozz-animation/samples/optimize/sample_optimize.cc +++ b/3rdparty/ozz-animation/samples/optimize/sample_optimize.cc @@ -312,29 +312,32 @@ class OptimizeSampleApplication : public ozz::sample::Application { rebuild |= _im_gui->DoCheckBox("Enable optimizations", &optimize_); - std::sprintf(label, "Tolerance: %0.2f mm", setting_.tolerance * 1000); + std::snprintf(label, sizeof(label), "Tolerance: %0.2f mm", + setting_.tolerance * 1000); rebuild |= _im_gui->DoSlider(label, 0.f, .1f, &setting_.tolerance, .5f, optimize_); - std::sprintf(label, "Distance: %0.2f mm", setting_.distance * 1000); + std::snprintf(label, sizeof(label), "Distance: %0.2f mm", + setting_.distance * 1000); rebuild |= _im_gui->DoSlider(label, 0.f, 1.f, &setting_.distance, .5f, optimize_); rebuild |= _im_gui->DoCheckBox("Enable joint setting", &joint_setting_enable_, optimize_); - std::sprintf(label, "%s (%d)", skeleton_.joint_names()[joint_], joint_); + std::snprintf(label, sizeof(label), "%s (%d)", + skeleton_.joint_names()[joint_], joint_); rebuild |= _im_gui->DoSlider(label, 0, skeleton_.num_joints() - 1, &joint_, 1.f, joint_setting_enable_ && optimize_); - std::sprintf(label, "Tolerance: %0.2f mm", - joint_setting_.tolerance * 1000); + std::snprintf(label, sizeof(label), "Tolerance: %0.2f mm", + joint_setting_.tolerance * 1000); rebuild |= _im_gui->DoSlider(label, 0.f, .1f, &joint_setting_.tolerance, .5f, joint_setting_enable_ && optimize_); - std::sprintf(label, "Distance: %0.2f mm", - joint_setting_.distance * 1000); + std::snprintf(label, sizeof(label), "Distance: %0.2f mm", + joint_setting_.distance * 1000); rebuild |= _im_gui->DoSlider(label, 0.f, 1.f, &joint_setting_.distance, .5f, joint_setting_enable_ && optimize_); @@ -356,18 +359,18 @@ class OptimizeSampleApplication : public ozz::sample::Application { static bool open = true; ozz::sample::ImGui::OpenClose ocb(_im_gui, "Memory size", &open); if (open) { - std::sprintf(label, "Original: %dKB", - static_cast(raw_animation_.size() >> 10)); + std::snprintf(label, sizeof(label), "Original: %dKB", + static_cast(raw_animation_.size() >> 10)); _im_gui->DoLabel(label); - std::sprintf(label, "Optimized: %dKB (%.1f:1)", - static_cast(raw_optimized_animation_.size() >> 10), - static_cast(raw_animation_.size()) / - raw_optimized_animation_.size()); + std::snprintf(label, sizeof(label), "Optimized: %dKB (%.1f:1)", + static_cast(raw_optimized_animation_.size() >> 10), + static_cast(raw_animation_.size()) / + raw_optimized_animation_.size()); _im_gui->DoLabel(label); - std::sprintf( - label, "Compressed: %dKB (%.1f:1)", + std::snprintf( + label, sizeof(label), "Compressed: %dKB (%.1f:1)", static_cast(animation_rt_->size() >> 10), static_cast(raw_animation_.size()) / animation_rt_->size()); _im_gui->DoLabel(label); @@ -388,37 +391,36 @@ class OptimizeSampleApplication : public ozz::sample::Application { // Show absolute error. { - char szLabel[64]; static bool error_open = true; ozz::sample::ImGui::OpenClose oc_stats(_im_gui, "Absolute error", &error_open); if (error_open) { { - std::sprintf(szLabel, "Median error: %.2fmm", - *error_record_med_.cursor()); + std::snprintf(label, sizeof(label), "Median error: %.2fmm", + *error_record_med_.cursor()); const ozz::sample::Record::Statistics error_stats = error_record_med_.GetStatistics(); - _im_gui->DoGraph(szLabel, 0.f, error_stats.max, error_stats.latest, + _im_gui->DoGraph(label, 0.f, error_stats.max, error_stats.latest, error_record_med_.cursor(), error_record_med_.record_begin(), error_record_med_.record_end()); } { - std::sprintf(szLabel, "Maximum error: %.2fmm", - *error_record_max_.cursor()); + std::snprintf(label, sizeof(label), "Maximum error: %.2fmm", + *error_record_max_.cursor()); const ozz::sample::Record::Statistics error_stats = error_record_max_.GetStatistics(); - _im_gui->DoGraph(szLabel, 0.f, error_stats.max, error_stats.latest, + _im_gui->DoGraph(label, 0.f, error_stats.max, error_stats.latest, error_record_max_.cursor(), error_record_max_.record_begin(), error_record_max_.record_end()); } { - std::sprintf(szLabel, "Joint %d error: %.2fmm", joint_, - *joint_error_record_.cursor()); + std::snprintf(label, sizeof(label), "Joint %d error: %.2fmm", joint_, + *joint_error_record_.cursor()); const ozz::sample::Record::Statistics error_stats = joint_error_record_.GetStatistics(); - _im_gui->DoGraph(szLabel, 0.f, error_stats.max, error_stats.latest, + _im_gui->DoGraph(label, 0.f, error_stats.max, error_stats.latest, joint_error_record_.cursor(), joint_error_record_.record_begin(), joint_error_record_.record_end()); diff --git a/3rdparty/ozz-animation/samples/partial_blend/sample_partial_blend.cc b/3rdparty/ozz-animation/samples/partial_blend/sample_partial_blend.cc index 03adbe2..abda62d 100644 --- a/3rdparty/ozz-animation/samples/partial_blend/sample_partial_blend.cc +++ b/3rdparty/ozz-animation/samples/partial_blend/sample_partial_blend.cc @@ -251,7 +251,7 @@ class PartialBlendSampleApplication : public ozz::sample::Application { _im_gui->DoCheckBox("Use automatic blending settings", &automatic); static float coeff = 1.f; // All power to the partial animation. - std::sprintf(label, "Upper body weight: %.2f", coeff); + std::snprintf(label, sizeof(label), "Upper body weight: %.2f", coeff); _im_gui->DoSlider(label, 0.f, 1.f, &coeff, 1.f, automatic); Sampler& lower_body_sampler = samplers_[kLowerBody]; @@ -267,27 +267,27 @@ class PartialBlendSampleApplication : public ozz::sample::Application { _im_gui->DoLabel("Manual settings:"); _im_gui->DoLabel("Lower body layer:"); - std::sprintf(label, "Layer weight: %.2f", + std::snprintf(label, sizeof(label), "Layer weight: %.2f", lower_body_sampler.weight_setting); _im_gui->DoSlider(label, 0.f, 1.f, &lower_body_sampler.weight_setting, 1.f, !automatic); - std::sprintf(label, "Joints weight: %.2f", + std::snprintf(label, sizeof(label), "Joints weight: %.2f", lower_body_sampler.joint_weight_setting); _im_gui->DoSlider(label, 0.f, 1.f, &lower_body_sampler.joint_weight_setting, 1.f, !automatic); _im_gui->DoLabel("Upper body layer:"); - std::sprintf(label, "Layer weight: %.2f", + std::snprintf(label, sizeof(label), "Layer weight: %.2f", upper_body_sampler.weight_setting); _im_gui->DoSlider(label, 0.f, 1.f, &upper_body_sampler.weight_setting, 1.f, !automatic); - std::sprintf(label, "Joints weight: %.2f", + std::snprintf(label, sizeof(label), "Joints weight: %.2f", upper_body_sampler.joint_weight_setting); _im_gui->DoSlider(label, 0.f, 1.f, &upper_body_sampler.joint_weight_setting, 1.f, !automatic); _im_gui->DoLabel("Global settings:"); - std::sprintf(label, "Threshold: %.2f", threshold_); + std::snprintf(label, sizeof(label), "Threshold: %.2f", threshold_); _im_gui->DoSlider(label, .01f, 1.f, &threshold_); SetupPerJointWeights(); @@ -301,7 +301,7 @@ class PartialBlendSampleApplication : public ozz::sample::Application { _im_gui->DoLabel("Root of the upper body hierarchy:", ozz::sample::ImGui::kLeft, false); char label[64]; - std::sprintf(label, "%s (%d)", + std::snprintf(label, sizeof(label), "%s (%d)", skeleton_.joint_names()[upper_body_root_], upper_body_root_); if (_im_gui->DoSlider(label, 0, skeleton_.num_joints() - 1, diff --git a/3rdparty/ozz-animation/samples/skinning/sample_skinning.cc b/3rdparty/ozz-animation/samples/skinning/sample_skinning.cc index 355c13c..831d85b 100644 --- a/3rdparty/ozz-animation/samples/skinning/sample_skinning.cc +++ b/3rdparty/ozz-animation/samples/skinning/sample_skinning.cc @@ -186,28 +186,28 @@ class SkinningSampleApplication : public ozz::sample::Application { ozz::sample::ImGui::OpenClose oc(_im_gui, "Model statisitics", &open); if (open) { char label[255]; - sprintf(label, "%d animated joints", skeleton_.num_joints()); + std::snprintf(label, sizeof(label), "%d animated joints", skeleton_.num_joints()); _im_gui->DoLabel(label); int influences = 0; for (const auto& mesh : meshes_) { influences = ozz::math::Max(influences, mesh.max_influences_count()); } - sprintf(label, "%d influences (max)", influences); + std::snprintf(label, sizeof(label), "%d influences (max)", influences); _im_gui->DoLabel(label); int vertices = 0; for (const auto& mesh : meshes_) { vertices += mesh.vertex_count(); } - sprintf(label, "%.1fK vertices", vertices / 1000.f); + std::snprintf(label, sizeof(label), "%.1fK vertices", vertices / 1000.f); _im_gui->DoLabel(label); int indices = 0; for (const auto& mesh : meshes_) { indices += mesh.triangle_index_count(); } - sprintf(label, "%.1fK triangles", indices / 3000.f); + std::snprintf(label, sizeof(label), "%.1fK triangles", indices / 3000.f); _im_gui->DoLabel(label); } } diff --git a/3rdparty/ozz-animation/samples/two_bone_ik/sample_two_bone_ik.cc b/3rdparty/ozz-animation/samples/two_bone_ik/sample_two_bone_ik.cc index f52a9d7..97596a2 100644 --- a/3rdparty/ozz-animation/samples/two_bone_ik/sample_two_bone_ik.cc +++ b/3rdparty/ozz-animation/samples/two_bone_ik/sample_two_bone_ik.cc @@ -264,7 +264,7 @@ class TwoBoneIKSampleApplication : public ozz::sample::Application { virtual void OnDestroy() {} virtual bool OnGui(ozz::sample::ImGui* _im_gui) { - char txt[32]; + char label[32]; // IK parameters _im_gui->DoCheckBox("Fix initial transform", &fix_initial_transform_); @@ -273,25 +273,25 @@ class TwoBoneIKSampleApplication : public ozz::sample::Application { static bool opened = true; ozz::sample::ImGui::OpenClose oc(_im_gui, "IK parameters", &opened); if (opened) { - sprintf(txt, "Soften: %.2g", soften_); - _im_gui->DoSlider(txt, 0.f, 1.f, &soften_, 2.f); - sprintf(txt, "Twist angle: %.0f", + snprintf(label, sizeof(label), "Soften: %.2g", soften_); + _im_gui->DoSlider(label, 0.f, 1.f, &soften_, 2.f); + snprintf(label, sizeof(label), "Twist angle: %.0f", twist_angle_ * ozz::math::kRadianToDegree); - _im_gui->DoSlider(txt, -ozz::math::kPi, ozz::math::kPi, &twist_angle_); - sprintf(txt, "Weight: %.2g", weight_); - _im_gui->DoSlider(txt, 0.f, 1.f, &weight_); + _im_gui->DoSlider(label, -ozz::math::kPi, ozz::math::kPi, &twist_angle_); + snprintf(label, sizeof(label), "Weight: %.2g", weight_); + _im_gui->DoSlider(label, 0.f, 1.f, &weight_); { // Pole vector static bool pole_opened = true; ozz::sample::ImGui::OpenClose oc_pole(_im_gui, "Pole vector", &pole_opened); if (pole_opened) { - sprintf(txt, "x %.2g", pole_vector.x); - _im_gui->DoSlider(txt, -1.f, 1.f, &pole_vector.x); - sprintf(txt, "y %.2g", pole_vector.y); - _im_gui->DoSlider(txt, -1.f, 1.f, &pole_vector.y); - sprintf(txt, "z %.2g", pole_vector.z); - _im_gui->DoSlider(txt, -1.f, 1.f, &pole_vector.z); + snprintf(label, sizeof(label), "x %.2g", pole_vector.x); + _im_gui->DoSlider(label, -1.f, 1.f, &pole_vector.x); + snprintf(label, sizeof(label), "y %.2g", pole_vector.y); + _im_gui->DoSlider(label, -1.f, 1.f, &pole_vector.y); + snprintf(label, sizeof(label), "z %.2g", pole_vector.z); + _im_gui->DoSlider(label, -1.f, 1.f, &pole_vector.z); } } } @@ -301,17 +301,17 @@ class TwoBoneIKSampleApplication : public ozz::sample::Application { ozz::sample::ImGui::OpenClose oc(_im_gui, "Target position", &opened); if (opened) { _im_gui->DoLabel("Target animation extent"); - sprintf(txt, "%.2g", target_extent_); - _im_gui->DoSlider(txt, 0.f, 1.f, &target_extent_); + snprintf(label, sizeof(label), "%.2g", target_extent_); + _im_gui->DoSlider(label, 0.f, 1.f, &target_extent_); _im_gui->DoLabel("Target Offset"); const float kOffsetRange = 1.f; - sprintf(txt, "x %.2g", target_offset_.x); - _im_gui->DoSlider(txt, -kOffsetRange, kOffsetRange, &target_offset_.x); - sprintf(txt, "y %.2g", target_offset_.y); - _im_gui->DoSlider(txt, -kOffsetRange, kOffsetRange, &target_offset_.y); - sprintf(txt, "z %.2g", target_offset_.z); - _im_gui->DoSlider(txt, -kOffsetRange, kOffsetRange, &target_offset_.z); + snprintf(label, sizeof(label), "x %.2g", target_offset_.x); + _im_gui->DoSlider(label, -kOffsetRange, kOffsetRange, &target_offset_.x); + snprintf(label, sizeof(label), "y %.2g", target_offset_.y); + _im_gui->DoSlider(label, -kOffsetRange, kOffsetRange, &target_offset_.y); + snprintf(label, sizeof(label), "z %.2g", target_offset_.z); + _im_gui->DoSlider(label, -kOffsetRange, kOffsetRange, &target_offset_.z); } } { // Root @@ -320,28 +320,28 @@ class TwoBoneIKSampleApplication : public ozz::sample::Application { if (opened) { // Translation _im_gui->DoLabel("Translation"); - sprintf(txt, "x %.2g", root_translation_.x); - _im_gui->DoSlider(txt, -1.f, 1.f, &root_translation_.x); - sprintf(txt, "y %.2g", root_translation_.y); - _im_gui->DoSlider(txt, -1.f, 1.f, &root_translation_.y); - sprintf(txt, "z %.2g", root_translation_.z); - _im_gui->DoSlider(txt, -1.f, 1.f, &root_translation_.z); + snprintf(label, sizeof(label), "x %.2g", root_translation_.x); + _im_gui->DoSlider(label, -1.f, 1.f, &root_translation_.x); + snprintf(label, sizeof(label), "y %.2g", root_translation_.y); + _im_gui->DoSlider(label, -1.f, 1.f, &root_translation_.y); + snprintf(label, sizeof(label), "z %.2g", root_translation_.z); + _im_gui->DoSlider(label, -1.f, 1.f, &root_translation_.z); // Rotation (in euler form) _im_gui->DoLabel("Rotation"); ozz::math::Float3 euler = root_euler_ * ozz::math::kRadianToDegree; - sprintf(txt, "yaw %.3g", euler.x); - _im_gui->DoSlider(txt, -180.f, 180.f, &euler.x); - sprintf(txt, "pitch %.3g", euler.y); - _im_gui->DoSlider(txt, -180.f, 180.f, &euler.y); - sprintf(txt, "roll %.3g", euler.z); - _im_gui->DoSlider(txt, -180.f, 180.f, &euler.z); + snprintf(label, sizeof(label), "yaw %.3g", euler.x); + _im_gui->DoSlider(label, -180.f, 180.f, &euler.x); + snprintf(label, sizeof(label), "pitch %.3g", euler.y); + _im_gui->DoSlider(label, -180.f, 180.f, &euler.y); + snprintf(label, sizeof(label), "roll %.3g", euler.z); + _im_gui->DoSlider(label, -180.f, 180.f, &euler.z); root_euler_ = euler * ozz::math::kDegreeToRadian; // Scale (must be uniform and not 0) _im_gui->DoLabel("Scale"); - sprintf(txt, "%.2g", root_scale_); - _im_gui->DoSlider(txt, -1.f, 1.f, &root_scale_); + snprintf(label, sizeof(label), "%.2g", root_scale_); + _im_gui->DoSlider(label, -1.f, 1.f, &root_scale_); } } { // Display options diff --git a/3rdparty/ozz-animation/src/base/CMakeLists.txt b/3rdparty/ozz-animation/src/base/CMakeLists.txt index 97b069e..8d47242 100644 --- a/3rdparty/ozz-animation/src/base/CMakeLists.txt +++ b/3rdparty/ozz-animation/src/base/CMakeLists.txt @@ -62,6 +62,7 @@ target_compile_definitions(ozz_base PRIVATE $<$:OZZ_BUILD_BASE_LIB>) target_compile_options(ozz_base PUBLIC $<$:/wd4251>) + target_include_directories(ozz_base PUBLIC $ $/include>) diff --git a/3rdparty/ozz-animation/test/animation/runtime/ik_aim_job_tests.cc b/3rdparty/ozz-animation/test/animation/runtime/ik_aim_job_tests.cc index 21bf353..40f827a 100644 --- a/3rdparty/ozz-animation/test/animation/runtime/ik_aim_job_tests.cc +++ b/3rdparty/ozz-animation/test/animation/runtime/ik_aim_job_tests.cc @@ -25,15 +25,13 @@ // // //----------------------------------------------------------------------------// +#include "gtest/gtest.h" #include "ozz/animation/runtime/ik_aim_job.h" - +#include "ozz/base/maths/gtest_math_helper.h" #include "ozz/base/maths/quaternion.h" #include "ozz/base/maths/simd_math.h" #include "ozz/base/maths/simd_quaternion.h" -#include "gtest/gtest.h" -#include "ozz/base/maths/gtest_math_helper.h" - TEST(JobValidity, IKAimJob) { const ozz::math::Float4x4 joint = ozz::math::Float4x4::identity(); ozz::math::SimdQuaternion quat; @@ -428,43 +426,24 @@ TEST(Twist, IKAimJob) { EXPECT_SIMDQUATERNION_EQ_TOL(quat, 0.f, 0.f, 0.f, 1.f, 2e-3f); } - { // Pole y, twist pi + { // Pole y, twist pi / 2 job.pole_vector = ozz::math::simd_float4::y_axis(); - job.twist_angle = ozz::math::kPi; + job.twist_angle = ozz::math::kPi_2; EXPECT_TRUE(job.Run()); const ozz::math::Quaternion x_Pi = ozz::math::Quaternion::FromAxisAngle( - ozz::math::Float3::x_axis(), -ozz::math::kPi); + ozz::math::Float3::x_axis(), ozz::math::kPi_2); EXPECT_SIMDQUATERNION_EQ_TOL(quat, x_Pi.x, x_Pi.y, x_Pi.z, x_Pi.w, 2e-3f); } - { // Pole y, twist -pi + { // Pole y, twist -pi / 2 job.pole_vector = ozz::math::simd_float4::y_axis(); - job.twist_angle = -ozz::math::kPi; + job.twist_angle = -ozz::math::kPi_2; EXPECT_TRUE(job.Run()); const ozz::math::Quaternion x_mPi = ozz::math::Quaternion::FromAxisAngle( - ozz::math::Float3::x_axis(), -ozz::math::kPi); + ozz::math::Float3::x_axis(), -ozz::math::kPi_2); EXPECT_SIMDQUATERNION_EQ_TOL(quat, x_mPi.x, x_mPi.y, x_mPi.z, x_mPi.w, 2e-3f); } - - { // Pole y, twist pi/2 - job.pole_vector = ozz::math::simd_float4::y_axis(); - job.twist_angle = ozz::math::kPi_2; - EXPECT_TRUE(job.Run()); - const ozz::math::Quaternion x_Pi_2 = ozz::math::Quaternion::FromAxisAngle( - ozz::math::Float3::x_axis(), ozz::math::kPi_2); - EXPECT_SIMDQUATERNION_EQ_TOL(quat, x_Pi_2.x, x_Pi_2.y, x_Pi_2.z, x_Pi_2.w, - 2e-3f); - } - - { // Pole z, twist pi/2 - job.pole_vector = ozz::math::simd_float4::z_axis(); - job.twist_angle = ozz::math::kPi_2; - EXPECT_TRUE(job.Run()); - const ozz::math::Quaternion x_Pi = ozz::math::Quaternion::FromAxisAngle( - ozz::math::Float3::x_axis(), ozz::math::kPi); - EXPECT_SIMDQUATERNION_EQ_TOL(quat, x_Pi.x, x_Pi.y, x_Pi.z, x_Pi.w, 2e-3f); - } } TEST(AlignedTargetUp, IKAimJob) { diff --git a/3rdparty/ozz-animation/test/base/containers/CMakeLists.txt b/3rdparty/ozz-animation/test/base/containers/CMakeLists.txt index 6efbbe5..7fb4c0b 100644 --- a/3rdparty/ozz-animation/test/base/containers/CMakeLists.txt +++ b/3rdparty/ozz-animation/test/base/containers/CMakeLists.txt @@ -3,6 +3,8 @@ target_include_directories(test_intrusive_list PUBLIC "${PROJECT_SOURCE_DIR}/include") target_link_libraries(test_intrusive_list gtest) +target_compile_options(test_intrusive_list + PRIVATE $<$:-Wno-unused-result>) target_copy_shared_libraries(test_intrusive_list) add_test(NAME test_intrusive_list COMMAND test_intrusive_list) set_target_properties(test_intrusive_list PROPERTIES FOLDER "ozz/tests/base") @@ -11,6 +13,8 @@ add_executable(test_std_containers std_containers_tests.cc) target_link_libraries(test_std_containers ozz_base gtest) +target_compile_options(test_std_containers + PRIVATE $<$:-Wno-unused-result>) target_copy_shared_libraries(test_std_containers) add_test(NAME test_std_containers COMMAND test_std_containers) set_target_properties(test_std_containers PROPERTIES FOLDER "ozz/tests/base") diff --git a/src/main.cc b/src/main.cc index 477a0cb..b509de4 100644 --- a/src/main.cc +++ b/src/main.cc @@ -160,8 +160,10 @@ struct Viewport { .compare = SG_COMPAREFUNC_LESS_EQUAL, .write_enabled = true }, - .cull_mode = SG_CULLMODE_BACK + .cull_mode = SG_CULLMODE_BACK, + .sample_count = cMSAASampleCount }; +// this->pip = sg_make_pipeline(gl_pipeline_desc); } }; @@ -472,7 +474,7 @@ int main() { glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_COCOA_RETINA_FRAMEBUFFER, GLFW_FALSE); - glfwWindowHint(GLFW_SAMPLES, 16); + glfwWindowHint(GLFW_SAMPLES, cMSAASampleCount); GLFWwindow* w = glfwCreateWindow(Width, Height, "ATP Editor", nullptr, nullptr); glfwMakeContextCurrent(w); @@ -527,7 +529,7 @@ int main() { // setup sokol_gfx and sokol_time stm_setup(); - sg_desc desc = {.logger = {.func = slog_func}}; + sg_desc desc = {.logger = {.func = slog_func}, .context {.sample_count = cMSAASampleCount}}; sg_setup(&desc); assert(sg_isvalid()); @@ -658,6 +660,7 @@ int main() { pip_desc.colors[0].blend.src_factor_rgb = SG_BLENDFACTOR_SRC_ALPHA; pip_desc.colors[0].blend.dst_factor_rgb = SG_BLENDFACTOR_ONE_MINUS_SRC_ALPHA; pip_desc.colors[0].write_mask = SG_COLORMASK_RGB; + pip_desc.sample_count = cMSAASampleCount; pip_desc.label = "imgui-rendering"; pip = sg_make_pipeline(&pip_desc);