diff --git a/dep/stb/CMakeLists.txt b/dep/stb/CMakeLists.txt index 4dcef9346..8206b100c 100644 --- a/dep/stb/CMakeLists.txt +++ b/dep/stb/CMakeLists.txt @@ -10,4 +10,4 @@ set(SRCS add_library(stb ${SRCS}) target_include_directories(stb PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include" "${CMAKE_CURRENT_SOURCE_DIR}/src") target_include_directories(stb INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include") -target_link_libraries(stb Threads::Threads "${CMAKE_DL_LIBS}") +target_link_libraries(stb zlib Threads::Threads "${CMAKE_DL_LIBS}") diff --git a/dep/stb/src/stb_image_write.c b/dep/stb/src/stb_image_write.c index 87c663a58..f454b3088 100644 --- a/dep/stb/src/stb_image_write.c +++ b/dep/stb/src/stb_image_write.c @@ -1,2 +1,28 @@ +#include + +#include "zlib.h" + +// https://github.com/nothings/stb/issues/113 +static unsigned char* compress_for_stbiw(unsigned char* data, int data_len, int* out_len, int quality) +{ + const uLongf bufSize = compressBound(data_len); + + // note that buf will be free'd by stb_image_write.h + // with STBIW_FREE() (plain free() by default) + unsigned char* buf = malloc(bufSize); + if (buf == NULL) + return NULL; + + if (compress2(buf, &bufSize, data, data_len, quality) != Z_OK) + { + free(buf); + return NULL; + } + + *out_len = bufSize; + return buf; +} + +#define STBIW_ZLIB_COMPRESS compress_for_stbiw #define STB_IMAGE_WRITE_IMPLEMENTATION #include "stb_image_write.h" diff --git a/dep/stb/stb.vcxproj b/dep/stb/stb.vcxproj index ec9e5e37e..c45b0be9d 100644 --- a/dep/stb/stb.vcxproj +++ b/dep/stb/stb.vcxproj @@ -22,7 +22,7 @@ TurnOffAllWarnings - $(ProjectDir)include;$(ProjectDir)src;%(AdditionalIncludeDirectories) + $(SolutionDir)dep\zlib\include;$(ProjectDir)include;$(ProjectDir)src;%(AdditionalIncludeDirectories)