diff --git a/CMakeLists.txt b/CMakeLists.txt index aa5dd27005..d59560964e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,10 +24,6 @@ if (OPENAL_SOFT_VCPKG) list(APPEND VCPKG_MANIFEST_FEATURES "vcpkg-openal-soft") endif() -if (NOT DEFINED JPEG_XL OR JPEG_XL) - list(APPEND VCPKG_MANIFEST_FEATURES "vcpkg-libjxl") -endif() - if (CMAKE_SYSTEM_NAME STREQUAL "Windows" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")) # Force static triplet on Windows set(VCPKG_TARGET_TRIPLET "x64-windows-static") @@ -47,10 +43,6 @@ if (NOT VCPKG_TOOLCHAIN) set(VCPKG_MANIFEST_FEATURES) endif() -option(JPEG_XL "Enable JPEG XL support" ON) - -include ( FindPkgConfig ) - set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) @@ -227,9 +219,7 @@ find_package( VPX ) find_package( ZLIB ) find_package( WebP ) if (NOT WebP_FOUND) - if (NOT PKG_CONFIG_FOUND) - message(SEND_ERROR "pkgconfig not found") - endif() + include(FindPkgConfig) pkg_check_modules(libwebp IMPORTED_TARGET libwebp) if (NOT TARGET PkgConfig::libwebp) message(SEND_ERROR "libwebp not found") @@ -242,10 +232,6 @@ if (NOT WebP_FOUND) add_library(WebP::libwebpmux ALIAS PkgConfig::libwebpmux) endif() -if (PKG_CONFIG_FOUND AND JPEG_XL) - pkg_check_modules( libjxl IMPORTED_TARGET libjxl ) -endif() - include( TargetArch ) target_architecture(TARGET_ARCHITECTURE) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c72db95dce..35587dfa87 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -320,11 +320,6 @@ add_custom_target( revision_check ALL # required libraries set( PROJECT_LIBRARIES ${PROJECT_LIBRARIES} "${ZLIB_LIBRARIES}" "${JPEG_LIBRARIES}" "${BZIP2_LIBRARIES}" "${CMAKE_DL_LIBS}" "${DRPC_LIBRARIES}") - -if (TARGET PkgConfig::libjxl AND JPEG_XL) - list( APPEND PROJECT_LIBRARIES PkgConfig::libjxl ) -endif() - if (HAVE_VULKAN) list( APPEND PROJECT_LIBRARIES "zvulkan" ) endif() @@ -1245,12 +1240,6 @@ set_source_files_properties( common/engine/sc_man.cpp PROPERTIES OBJECT_DEPENDS set_source_files_properties( ${NOT_COMPILED_SOURCE_FILES} PROPERTIES HEADER_FILE_ONLY TRUE ) set_source_files_properties( ${ZDOOM_NONPCH_SOURCES} common/textures/hires/hqresize.cpp PROPERTIES SKIP_PRECOMPILE_HEADERS TRUE ) -if (TARGET PkgConfig::libjxl AND JPEG_XL) - target_compile_definitions(zdoom PRIVATE -DHAVE_JPEGXL=1) - target_sources(zdoom PRIVATE common/textures/formats/jpegxltexture.cpp) -else() - message( STATUS "Compiling without JPEG XL support" ) -endif() if(${CMAKE_SYSTEM_NAME} STREQUAL "SunOS") # [BL] Solaris requires these to be explicitly linked. diff --git a/src/common/textures/formats/jpegxltexture.cpp b/src/common/textures/formats/jpegxltexture.cpp deleted file mode 100644 index 01e798cbcd..0000000000 --- a/src/common/textures/formats/jpegxltexture.cpp +++ /dev/null @@ -1,220 +0,0 @@ -/* -** jpegxltexture.cpp -** Texture class for JPEG XL images -** -**--------------------------------------------------------------------------- -** Copyright 2023 Cacodemon345 -** All rights reserved. -** -** Permission is hereby granted, free of charge, to any person obtaining a copy -** of this software and associated documentation files (the "Software"), to deal -** in the Software without restriction, including without limitation the rights -** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -** copies of the Software, and to permit persons to whom the Software is -** furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in all -** copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -** SOFTWARE. -**--------------------------------------------------------------------------- -** -** -*/ - -#include - -#include "files.h" -#include "filesystem.h" -#include "bitmap.h" -#include "imagehelpers.h" -#include "image.h" - -class FJPEGXLTexture : public FImageSource -{ - -public: - FJPEGXLTexture (int lumpnum, int w, int h, int xoffset, int yoffset, bool transparent = true); - PalettedPixels CreatePalettedPixels(int conversion) override; - int CopyPixels(FBitmap *bmp, int conversion) override; -}; - -FImageSource *JPEGXLImage_TryCreate(FileReader & file, int lumpnum) -{ - JxlBasicInfo info; - file.Seek(0, FileReader::SeekSet); - auto array = file.Read(); - int width = 0, height = 0, xoffset = 0, yoffset = 0; - // TODO: Revisit this again when the box decoding API is well understood. - (void)xoffset; - (void)yoffset; - - auto jxlDecoder = JxlDecoderMake(nullptr); - if (!jxlDecoder) - { - return nullptr; - } - - auto jxlDecoderPtr = jxlDecoder.get(); - if (JxlDecoderSubscribeEvents(jxlDecoderPtr, JXL_DEC_BASIC_INFO) != JXL_DEC_SUCCESS) - { - return nullptr; - } - JxlDecoderSetInput(jxlDecoderPtr, array.data(), array.size()); - JxlDecoderCloseInput(jxlDecoderPtr); - - for (;;) - { - JxlDecoderStatus status = JxlDecoderProcessInput(jxlDecoderPtr); - - switch (status) - { - case JXL_DEC_ERROR: - return nullptr; - - case JXL_DEC_SUCCESS: - case JXL_DEC_BASIC_INFO: - { - if (JxlDecoderGetBasicInfo(jxlDecoderPtr, &info) != JXL_DEC_SUCCESS) - return nullptr; - - width = info.xsize; - height = info.ysize; - if (width && height) - return new FJPEGXLTexture(lumpnum, width, height, xoffset, yoffset, !!info.alpha_bits); - else - return nullptr; - break; - } - } - } - - return nullptr; -} - -FJPEGXLTexture::FJPEGXLTexture (int lumpnum, int w, int h, int xoffset, int yoffset, bool transparent) - : FImageSource(lumpnum) -{ - Width = w; - Height = h; - LeftOffset = xoffset; - TopOffset = yoffset; - if (!transparent) - bMasked = bTranslucent = false; -} - -PalettedPixels FJPEGXLTexture::CreatePalettedPixels(int conversion) -{ - FBitmap bitmap; - bitmap.Create(Width, Height); - CopyPixels(&bitmap, conversion); - const uint8_t *data = bitmap.GetPixels(); - - uint8_t *dest_p; - int dest_adv = Height; - int dest_rew = Width * Height - 1; - - PalettedPixels Pixels(Width * Height); - dest_p = Pixels.Data(); - - bool doalpha = conversion == luminance; - // Convert the source image from row-major to column-major format and remap it - for (int y = Height; y != 0; --y) - { - for (int x = Width; x != 0; --x) - { - int b = *data++; - int g = *data++; - int r = *data++; - int a = *data++; - if (a < 128) - *dest_p = 0; - else - *dest_p = ImageHelpers::RGBToPalette(doalpha, r, g, b); - dest_p += dest_adv; - } - dest_p -= dest_rew; - } - return Pixels; -} - -int FJPEGXLTexture::CopyPixels(FBitmap *bmp, int conversion) -{ - JxlBasicInfo info; - int width = 0, height = 0; - uint8_t* pixels = nullptr; - JxlPixelFormat format = {4, JXL_TYPE_UINT8, JXL_NATIVE_ENDIAN, 0}; - auto jxlDecoder = JxlDecoderMake(nullptr); - if (!jxlDecoder) - { - return 0; - } - - auto jxlDecoderPtr = jxlDecoder.get(); - if (JxlDecoderSubscribeEvents(jxlDecoderPtr, JXL_DEC_BASIC_INFO | JXL_DEC_FULL_IMAGE) != JXL_DEC_SUCCESS) - { - return 0; - } - - auto lump = fileSystem.OpenFileReader(SourceLump); - auto array = lump.Read(); - JxlDecoderSetInput(jxlDecoderPtr, array.data(), array.size()); - JxlDecoderCloseInput(jxlDecoderPtr); - - for (;;) - { - JxlDecoderStatus status = JxlDecoderProcessInput(jxlDecoderPtr); - - switch (status) - { - case JXL_DEC_ERROR: - return 0; - - case JXL_DEC_BASIC_INFO: - { - if (JxlDecoderGetBasicInfo(jxlDecoderPtr, &info) != JXL_DEC_SUCCESS) - return 0; - - width = info.xsize; - height = info.ysize; - if (width != Width && height != Height) - return 0; - break; - } - - case JXL_DEC_NEED_IMAGE_OUT_BUFFER: - { - size_t bufferSize = 0; - if (JxlDecoderImageOutBufferSize(jxlDecoderPtr, &format, &bufferSize) != JXL_DEC_SUCCESS) - return 0; - - if (bufferSize != (Width * Height * 4)) - return 0; - - pixels = new uint8_t[Width * Height * 4]; - - if (JxlDecoderSetImageOutBuffer(jxlDecoderPtr, &format, pixels, bufferSize) != JXL_DEC_SUCCESS) - return 0; - break; - } - - case JXL_DEC_FULL_IMAGE: - { - break; - } - - case JXL_DEC_SUCCESS: - { - bmp->CopyPixelDataRGB(0, 0, pixels, Width, Height, 4, Width * 4, 0, CF_RGBA); - - return bMasked ? -1 : 0; - } - } - } -} diff --git a/src/common/textures/image.cpp b/src/common/textures/image.cpp index bd6b9d2852..dcd1f28d3a 100644 --- a/src/common/textures/image.cpp +++ b/src/common/textures/image.cpp @@ -324,9 +324,6 @@ FImageSource *TGAImage_TryCreate(FileReader &, int lumpnum); FImageSource *StbImage_TryCreate(FileReader &, int lumpnum); FImageSource *QOIImage_TryCreate(FileReader &, int lumpnum); FImageSource *WebPImage_TryCreate(FileReader &, int lumpnum); -#ifdef HAVE_JPEGXL -FImageSource *JPEGXLImage_TryCreate(FileReader &, int lumpnum); -#endif FImageSource *AnmImage_TryCreate(FileReader &, int lumpnum); FImageSource *RawPageImage_TryCreate(FileReader &, int lumpnum); FImageSource *FlatImage_TryCreate(FileReader &, int lumpnum); @@ -349,9 +346,6 @@ FImageSource * FImageSource::GetImage(int lumpnum, bool isflat) { StbImage_TryCreate, false }, { QOIImage_TryCreate, false }, { WebPImage_TryCreate, false }, -#ifdef HAVE_JPEGXL - { JPEGXLImage_TryCreate, false }, -#endif { TGAImage_TryCreate, false }, { AnmImage_TryCreate, false }, { StartupPageImage_TryCreate, false }, diff --git a/vcpkg.json b/vcpkg.json index 998fceab7c..d89c12d124 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -24,17 +24,6 @@ "platform": "!windows | (windows & static & staticcrt)" } ] - }, - "vcpkg-libjxl": - { - "description": "Use libjxl provided by vcpkg.", - "dependencies": [ - { - "name": "libjxl", - "default-features": false, - "platform": "!windows | (windows & static & staticcrt)" - } - ] } }, "dependencies": [