Pārlūkot izejas kodu

Merge branch 'master' into MakeFBXParserResilientToMissingStreams

Kim Kulling 3 gadi atpakaļ
vecāks
revīzija
981677d4b9

+ 3 - 0
.github/workflows/ccpp.yml

@@ -6,6 +6,9 @@ on:
   pull_request:
     branches: [ master ]
 
+permissions:
+  contents: read # to fetch code (actions/checkout)
+
 jobs:
   job:
     name: ${{ matrix.name }}-build-and-test

+ 3 - 0
.github/workflows/sanitizer.yml

@@ -6,6 +6,9 @@ on:
   pull_request:
     branches: [ master ]
 
+permissions:
+  contents: read # to fetch code (actions/checkout)
+
 jobs:
   job1:
     name: adress-sanitizer

+ 7 - 5
code/Common/Assimp.cpp

@@ -1273,11 +1273,13 @@ ASSIMP_API void aiQuaternionInterpolate(
 #define ASSIMP_HAS_PBRT_EXPORT (!ASSIMP_BUILD_NO_EXPORT && !ASSIMP_BUILD_NO_PBRT_EXPORTER)
 #define ASSIMP_HAS_M3D ((!ASSIMP_BUILD_NO_EXPORT && !ASSIMP_BUILD_NO_M3D_EXPORTER) || !ASSIMP_BUILD_NO_M3D_IMPORTER)
 
-#if ASSIMP_HAS_PBRT_EXPORT
-#   define ASSIMP_NEEDS_STB_IMAGE 1
-#elif ASSIMP_HAS_M3D
-#   define ASSIMP_NEEDS_STB_IMAGE 1
-#   define STBI_ONLY_PNG
+#ifndef STB_USE_HUNTER
+#   if ASSIMP_HAS_PBRT_EXPORT
+#       define ASSIMP_NEEDS_STB_IMAGE 1
+#   elif ASSIMP_HAS_M3D
+#       define ASSIMP_NEEDS_STB_IMAGE 1
+#       define STBI_ONLY_PNG
+#   endif
 #endif
 
 // Ensure all symbols are linked correctly

+ 58 - 0
code/Common/StbCommon.h

@@ -48,6 +48,64 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #pragma GCC diagnostic ignored "-Wunused-function"
 #endif
 
+#ifndef STB_USE_HUNTER
+/*  Use prefixed names for the symbols from stb_image as it is a very commonly embedded library.
+    Including vanilla stb_image symbols causes duplicate symbol problems if assimp is linked
+    statically together with another library or executable that also embeds stb_image.
+
+    Symbols are not prefixed if using Hunter because in such case there exists a single true
+    stb_image library on the system that is used by assimp and can be used by all the other
+    libraries and executables.
+
+    The list can be regenerated using the following:
+
+    cat <path/to/stb/stb_image.h> | fgrep STBIDEF | fgrep '(' | sed -E 's/\*|\(.+//g' | \
+        awk '{print "#define " $(NF) " assimp_" $(NF) }' | sort | uniq"
+*/
+#define stbi_convert_iphone_png_to_rgb assimp_stbi_convert_iphone_png_to_rgb
+#define stbi_convert_wchar_to_utf8 assimp_stbi_convert_wchar_to_utf8
+#define stbi_failure_reason assimp_stbi_failure_reason
+#define stbi_hdr_to_ldr_gamma assimp_stbi_hdr_to_ldr_gamma
+#define stbi_hdr_to_ldr_scale assimp_stbi_hdr_to_ldr_scale
+#define stbi_image_free assimp_stbi_image_free
+#define stbi_info assimp_stbi_info
+#define stbi_info_from_callbacks assimp_stbi_info_from_callbacks
+#define stbi_info_from_file assimp_stbi_info_from_file
+#define stbi_info_from_memory assimp_stbi_info_from_memory
+#define stbi_is_16_bit assimp_stbi_is_16_bit
+#define stbi_is_16_bit_from_callbacks assimp_stbi_is_16_bit_from_callbacks
+#define stbi_is_16_bit_from_file assimp_stbi_is_16_bit_from_file
+#define stbi_is_16_bit_from_memory assimp_stbi_is_16_bit_from_memory
+#define stbi_is_hdr assimp_stbi_is_hdr
+#define stbi_is_hdr_from_callbacks assimp_stbi_is_hdr_from_callbacks
+#define stbi_is_hdr_from_file assimp_stbi_is_hdr_from_file
+#define stbi_is_hdr_from_memory assimp_stbi_is_hdr_from_memory
+#define stbi_ldr_to_hdr_gamma assimp_stbi_ldr_to_hdr_gamma
+#define stbi_ldr_to_hdr_scale assimp_stbi_ldr_to_hdr_scale
+#define stbi_load_16 assimp_stbi_load_16
+#define stbi_load_16_from_callbacks assimp_stbi_load_16_from_callbacks
+#define stbi_load_16_from_memory assimp_stbi_load_16_from_memory
+#define stbi_load assimp_stbi_load
+#define stbi_loadf assimp_stbi_loadf
+#define stbi_loadf_from_callbacks assimp_stbi_loadf_from_callbacks
+#define stbi_loadf_from_file assimp_stbi_loadf_from_file
+#define stbi_loadf_from_memory assimp_stbi_loadf_from_memory
+#define stbi_load_from_callbacks assimp_stbi_load_from_callbacks
+#define stbi_load_from_file_16 assimp_stbi_load_from_file_16
+#define stbi_load_from_file assimp_stbi_load_from_file
+#define stbi_load_from_memory assimp_stbi_load_from_memory
+#define stbi_load_gif_from_memory assimp_stbi_load_gif_from_memory
+#define stbi_set_flip_vertically_on_load assimp_stbi_set_flip_vertically_on_load
+#define stbi_set_flip_vertically_on_load_thread assimp_stbi_set_flip_vertically_on_load_thread
+#define stbi_set_unpremultiply_on_load assimp_stbi_set_unpremultiply_on_load
+#define stbi_zlib_decode_buffer assimp_stbi_zlib_decode_buffer
+#define stbi_zlib_decode_malloc assimp_stbi_zlib_decode_malloc
+#define stbi_zlib_decode_malloc_guesssize assimp_stbi_zlib_decode_malloc_guesssize
+#define stbi_zlib_decode_malloc_guesssize_headerflag assimp_stbi_zlib_decode_malloc_guesssize_headerflag
+#define stbi_zlib_decode_noheader_buffer assimp_stbi_zlib_decode_noheader_buffer
+#define stbi_zlib_decode_noheader_malloc assimp_stbi_zlib_decode_noheader_malloc
+#endif
+
 #include "stb/stb_image.h"
 
 #if _MSC_VER

+ 12 - 6
test/unit/utglTF2ImportExport.cpp

@@ -753,12 +753,18 @@ TEST_F(utglTF2ImportExport, wrongTypes) {
     // Deliberately broken version of the BoxTextured.gltf asset.
     using tup_T = std::tuple<std::string, std::string, std::string, std::string>;
     std::vector<tup_T> wrongTypes = {
-        { "/glTF2/wrongTypes/badArray.gltf", "array", "primitives", "meshes[0]" },
-        { "/glTF2/wrongTypes/badString.gltf", "string", "name", "scenes[0]" },
-        { "/glTF2/wrongTypes/badUint.gltf", "uint", "index", "materials[0]" },
-        { "/glTF2/wrongTypes/badNumber.gltf", "number", "scale", "materials[0]" },
-        { "/glTF2/wrongTypes/badObject.gltf", "object", "pbrMetallicRoughness", "materials[0]" },
-        { "/glTF2/wrongTypes/badExtension.gltf", "object", "KHR_texture_transform", "materials[0]" }
+#ifdef __cpp_lib_constexpr_tuple
+    #define TUPLE(x, y, z, w) {x, y, z, w}
+#else
+    #define TUPLE(x, y, z, w) tup_T(x, y, z, w)
+#endif
+        TUPLE("/glTF2/wrongTypes/badArray.gltf", "array", "primitives", "meshes[0]"),
+        TUPLE("/glTF2/wrongTypes/badString.gltf", "string", "name", "scenes[0]"),
+        TUPLE("/glTF2/wrongTypes/badUint.gltf", "uint", "index", "materials[0]"),
+        TUPLE("/glTF2/wrongTypes/badNumber.gltf", "number", "scale", "materials[0]"),
+        TUPLE("/glTF2/wrongTypes/badObject.gltf", "object", "pbrMetallicRoughness", "materials[0]"),
+        TUPLE("/glTF2/wrongTypes/badExtension.gltf", "object", "KHR_texture_transform", "materials[0]")
+#undef TUPLE
     };
     for (const auto& tuple : wrongTypes)
     {