externals: stb: Add image write
This commit is contained in:
		
							
								
								
									
										2
									
								
								externals/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								externals/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							@@ -168,7 +168,7 @@ if (NOT TARGET LLVM::Demangle)
 | 
			
		||||
    add_library(LLVM::Demangle ALIAS demangle)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
add_library(stb stb/stb_dxt.cpp stb/stb_image.cpp stb/stb_image_resize.cpp)
 | 
			
		||||
add_library(stb stb/stb_dxt.cpp stb/stb_image.cpp stb/stb_image_resize.cpp stb/stb_image_write.cpp)
 | 
			
		||||
target_include_directories(stb PUBLIC ./stb)
 | 
			
		||||
 | 
			
		||||
add_library(bc_decoder bc_decoder/bc_decoder.cpp)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1677
									
								
								externals/stb/stb_image_write.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1677
									
								
								externals/stb/stb_image_write.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										297
									
								
								externals/stb/stb_image_write.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										297
									
								
								externals/stb/stb_image_write.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,297 @@
 | 
			
		||||
// SPDX-FileCopyrightText: stb http://nothings.org/stb
 | 
			
		||||
// SPDX-License-Identifier: MIT
 | 
			
		||||
 | 
			
		||||
/* stb_image_write - v1.16 - public domain - http://nothings.org/stb
 | 
			
		||||
   writes out PNG/BMP/TGA/JPEG/HDR images to C stdio - Sean Barrett 2010-2015
 | 
			
		||||
                                     no warranty implied; use at your own risk
 | 
			
		||||
 | 
			
		||||
   Before #including,
 | 
			
		||||
 | 
			
		||||
       #define STB_IMAGE_WRITE_IMPLEMENTATION
 | 
			
		||||
 | 
			
		||||
   in the file that you want to have the implementation.
 | 
			
		||||
 | 
			
		||||
   Will probably not work correctly with strict-aliasing optimizations.
 | 
			
		||||
 | 
			
		||||
ABOUT:
 | 
			
		||||
 | 
			
		||||
   This header file is a library for writing images to C stdio or a callback.
 | 
			
		||||
 | 
			
		||||
   The PNG output is not optimal; it is 20-50% larger than the file
 | 
			
		||||
   written by a decent optimizing implementation; though providing a custom
 | 
			
		||||
   zlib compress function (see STBIW_ZLIB_COMPRESS) can mitigate that.
 | 
			
		||||
   This library is designed for source code compactness and simplicity,
 | 
			
		||||
   not optimal image file size or run-time performance.
 | 
			
		||||
 | 
			
		||||
BUILDING:
 | 
			
		||||
 | 
			
		||||
   You can #define STBIW_ASSERT(x) before the #include to avoid using assert.h.
 | 
			
		||||
   You can #define STBIW_MALLOC(), STBIW_REALLOC(), and STBIW_FREE() to replace
 | 
			
		||||
   malloc,realloc,free.
 | 
			
		||||
   You can #define STBIW_MEMMOVE() to replace memmove()
 | 
			
		||||
   You can #define STBIW_ZLIB_COMPRESS to use a custom zlib-style compress function
 | 
			
		||||
   for PNG compression (instead of the builtin one), it must have the following signature:
 | 
			
		||||
   unsigned char * my_compress(unsigned char *data, int data_len, int *out_len, int quality);
 | 
			
		||||
   The returned data will be freed with STBIW_FREE() (free() by default),
 | 
			
		||||
   so it must be heap allocated with STBIW_MALLOC() (malloc() by default),
 | 
			
		||||
 | 
			
		||||
UNICODE:
 | 
			
		||||
 | 
			
		||||
   If compiling for Windows and you wish to use Unicode filenames, compile
 | 
			
		||||
   with
 | 
			
		||||
       #define STBIW_WINDOWS_UTF8
 | 
			
		||||
   and pass utf8-encoded filenames. Call stbiw_convert_wchar_to_utf8 to convert
 | 
			
		||||
   Windows wchar_t filenames to utf8.
 | 
			
		||||
 | 
			
		||||
USAGE:
 | 
			
		||||
 | 
			
		||||
   There are five functions, one for each image file format:
 | 
			
		||||
 | 
			
		||||
     int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes);
 | 
			
		||||
     int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data);
 | 
			
		||||
     int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data);
 | 
			
		||||
     int stbi_write_jpg(char const *filename, int w, int h, int comp, const void *data, int quality);
 | 
			
		||||
     int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data);
 | 
			
		||||
 | 
			
		||||
     void stbi_flip_vertically_on_write(int flag); // flag is non-zero to flip data vertically
 | 
			
		||||
 | 
			
		||||
   There are also five equivalent functions that use an arbitrary write function. You are
 | 
			
		||||
   expected to open/close your file-equivalent before and after calling these:
 | 
			
		||||
 | 
			
		||||
     int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data, int stride_in_bytes);
 | 
			
		||||
     int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data);
 | 
			
		||||
     int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data);
 | 
			
		||||
     int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data);
 | 
			
		||||
     int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality);
 | 
			
		||||
 | 
			
		||||
   where the callback is:
 | 
			
		||||
      void stbi_write_func(void *context, void *data, int size);
 | 
			
		||||
 | 
			
		||||
   You can configure it with these global variables:
 | 
			
		||||
      int stbi_write_tga_with_rle;             // defaults to true; set to 0 to disable RLE
 | 
			
		||||
      int stbi_write_png_compression_level;    // defaults to 8; set to higher for more compression
 | 
			
		||||
      int stbi_write_force_png_filter;         // defaults to -1; set to 0..5 to force a filter mode
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   You can define STBI_WRITE_NO_STDIO to disable the file variant of these
 | 
			
		||||
   functions, so the library will not use stdio.h at all. However, this will
 | 
			
		||||
   also disable HDR writing, because it requires stdio for formatted output.
 | 
			
		||||
 | 
			
		||||
   Each function returns 0 on failure and non-0 on success.
 | 
			
		||||
 | 
			
		||||
   The functions create an image file defined by the parameters. The image
 | 
			
		||||
   is a rectangle of pixels stored from left-to-right, top-to-bottom.
 | 
			
		||||
   Each pixel contains 'comp' channels of data stored interleaved with 8-bits
 | 
			
		||||
   per channel, in the following order: 1=Y, 2=YA, 3=RGB, 4=RGBA. (Y is
 | 
			
		||||
   monochrome color.) The rectangle is 'w' pixels wide and 'h' pixels tall.
 | 
			
		||||
   The *data pointer points to the first byte of the top-left-most pixel.
 | 
			
		||||
   For PNG, "stride_in_bytes" is the distance in bytes from the first byte of
 | 
			
		||||
   a row of pixels to the first byte of the next row of pixels.
 | 
			
		||||
 | 
			
		||||
   PNG creates output files with the same number of components as the input.
 | 
			
		||||
   The BMP format expands Y to RGB in the file format and does not
 | 
			
		||||
   output alpha.
 | 
			
		||||
 | 
			
		||||
   PNG supports writing rectangles of data even when the bytes storing rows of
 | 
			
		||||
   data are not consecutive in memory (e.g. sub-rectangles of a larger image),
 | 
			
		||||
   by supplying the stride between the beginning of adjacent rows. The other
 | 
			
		||||
   formats do not. (Thus you cannot write a native-format BMP through the BMP
 | 
			
		||||
   writer, both because it is in BGR order and because it may have padding
 | 
			
		||||
   at the end of the line.)
 | 
			
		||||
 | 
			
		||||
   PNG allows you to set the deflate compression level by setting the global
 | 
			
		||||
   variable 'stbi_write_png_compression_level' (it defaults to 8).
 | 
			
		||||
 | 
			
		||||
   HDR expects linear float data. Since the format is always 32-bit rgb(e)
 | 
			
		||||
   data, alpha (if provided) is discarded, and for monochrome data it is
 | 
			
		||||
   replicated across all three channels.
 | 
			
		||||
 | 
			
		||||
   TGA supports RLE or non-RLE compressed data. To use non-RLE-compressed
 | 
			
		||||
   data, set the global variable 'stbi_write_tga_with_rle' to 0.
 | 
			
		||||
 | 
			
		||||
   JPEG does ignore alpha channels in input data; quality is between 1 and 100.
 | 
			
		||||
   Higher quality looks better but results in a bigger image.
 | 
			
		||||
   JPEG baseline (no JPEG progressive).
 | 
			
		||||
 | 
			
		||||
CREDITS:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   Sean Barrett           -    PNG/BMP/TGA
 | 
			
		||||
   Baldur Karlsson        -    HDR
 | 
			
		||||
   Jean-Sebastien Guay    -    TGA monochrome
 | 
			
		||||
   Tim Kelsey             -    misc enhancements
 | 
			
		||||
   Alan Hickman           -    TGA RLE
 | 
			
		||||
   Emmanuel Julien        -    initial file IO callback implementation
 | 
			
		||||
   Jon Olick              -    original jo_jpeg.cpp code
 | 
			
		||||
   Daniel Gibson          -    integrate JPEG, allow external zlib
 | 
			
		||||
   Aarni Koskela          -    allow choosing PNG filter
 | 
			
		||||
 | 
			
		||||
   bugfixes:
 | 
			
		||||
      github:Chribba
 | 
			
		||||
      Guillaume Chereau
 | 
			
		||||
      github:jry2
 | 
			
		||||
      github:romigrou
 | 
			
		||||
      Sergio Gonzalez
 | 
			
		||||
      Jonas Karlsson
 | 
			
		||||
      Filip Wasil
 | 
			
		||||
      Thatcher Ulrich
 | 
			
		||||
      github:poppolopoppo
 | 
			
		||||
      Patrick Boettcher
 | 
			
		||||
      github:xeekworx
 | 
			
		||||
      Cap Petschulat
 | 
			
		||||
      Simon Rodriguez
 | 
			
		||||
      Ivan Tikhonov
 | 
			
		||||
      github:ignotion
 | 
			
		||||
      Adam Schackart
 | 
			
		||||
      Andrew Kensler
 | 
			
		||||
 | 
			
		||||
LICENSE
 | 
			
		||||
 | 
			
		||||
  See end of file for license information.
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef INCLUDE_STB_IMAGE_WRITE_H
 | 
			
		||||
#define INCLUDE_STB_IMAGE_WRITE_H
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
// if STB_IMAGE_WRITE_STATIC causes problems, try defining STBIWDEF to 'inline' or 'static inline'
 | 
			
		||||
#ifndef STBIWDEF
 | 
			
		||||
#ifdef STB_IMAGE_WRITE_STATIC
 | 
			
		||||
#define STBIWDEF  static
 | 
			
		||||
#else
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
#define STBIWDEF  extern "C"
 | 
			
		||||
#else
 | 
			
		||||
#define STBIWDEF  extern
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef STB_IMAGE_WRITE_STATIC  // C++ forbids static forward declarations
 | 
			
		||||
STBIWDEF int stbi_write_tga_with_rle;
 | 
			
		||||
STBIWDEF int stbi_write_png_compression_level;
 | 
			
		||||
STBIWDEF int stbi_write_force_png_filter;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef STBI_WRITE_NO_STDIO
 | 
			
		||||
STBIWDEF int stbi_write_png(char const *filename, int w, int h, int comp, const void  *data, int stride_in_bytes);
 | 
			
		||||
STBIWDEF int stbi_write_bmp(char const *filename, int w, int h, int comp, const void  *data);
 | 
			
		||||
STBIWDEF int stbi_write_tga(char const *filename, int w, int h, int comp, const void  *data);
 | 
			
		||||
STBIWDEF int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data);
 | 
			
		||||
STBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const void  *data, int quality);
 | 
			
		||||
 | 
			
		||||
#ifdef STBIW_WINDOWS_UTF8
 | 
			
		||||
STBIWDEF int stbiw_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input);
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef void stbi_write_func(void *context, void *data, int size);
 | 
			
		||||
 | 
			
		||||
STBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data, int stride_in_bytes);
 | 
			
		||||
STBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data);
 | 
			
		||||
STBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data);
 | 
			
		||||
STBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data);
 | 
			
		||||
STBIWDEF int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void  *data, int quality);
 | 
			
		||||
STBIWDEF unsigned char *stbi_write_png_to_mem(const unsigned char *pixels, int stride_bytes, int x, int y, int n, int *out_len);
 | 
			
		||||
 | 
			
		||||
STBIWDEF void stbi_flip_vertically_on_write(int flip_boolean);
 | 
			
		||||
 | 
			
		||||
#endif//INCLUDE_STB_IMAGE_WRITE_H
 | 
			
		||||
 | 
			
		||||
/* Revision history
 | 
			
		||||
      1.16  (2021-07-11)
 | 
			
		||||
             make Deflate code emit uncompressed blocks when it would otherwise expand
 | 
			
		||||
             support writing BMPs with alpha channel
 | 
			
		||||
      1.15  (2020-07-13) unknown
 | 
			
		||||
      1.14  (2020-02-02) updated JPEG writer to downsample chroma channels
 | 
			
		||||
      1.13
 | 
			
		||||
      1.12
 | 
			
		||||
      1.11  (2019-08-11)
 | 
			
		||||
 | 
			
		||||
      1.10  (2019-02-07)
 | 
			
		||||
             support utf8 filenames in Windows; fix warnings and platform ifdefs
 | 
			
		||||
      1.09  (2018-02-11)
 | 
			
		||||
             fix typo in zlib quality API, improve STB_I_W_STATIC in C++
 | 
			
		||||
      1.08  (2018-01-29)
 | 
			
		||||
             add stbi__flip_vertically_on_write, external zlib, zlib quality, choose PNG filter
 | 
			
		||||
      1.07  (2017-07-24)
 | 
			
		||||
             doc fix
 | 
			
		||||
      1.06 (2017-07-23)
 | 
			
		||||
             writing JPEG (using Jon Olick's code)
 | 
			
		||||
      1.05   ???
 | 
			
		||||
      1.04 (2017-03-03)
 | 
			
		||||
             monochrome BMP expansion
 | 
			
		||||
      1.03   ???
 | 
			
		||||
      1.02 (2016-04-02)
 | 
			
		||||
             avoid allocating large structures on the stack
 | 
			
		||||
      1.01 (2016-01-16)
 | 
			
		||||
             STBIW_REALLOC_SIZED: support allocators with no realloc support
 | 
			
		||||
             avoid race-condition in crc initialization
 | 
			
		||||
             minor compile issues
 | 
			
		||||
      1.00 (2015-09-14)
 | 
			
		||||
             installable file IO function
 | 
			
		||||
      0.99 (2015-09-13)
 | 
			
		||||
             warning fixes; TGA rle support
 | 
			
		||||
      0.98 (2015-04-08)
 | 
			
		||||
             added STBIW_MALLOC, STBIW_ASSERT etc
 | 
			
		||||
      0.97 (2015-01-18)
 | 
			
		||||
             fixed HDR asserts, rewrote HDR rle logic
 | 
			
		||||
      0.96 (2015-01-17)
 | 
			
		||||
             add HDR output
 | 
			
		||||
             fix monochrome BMP
 | 
			
		||||
      0.95 (2014-08-17)
 | 
			
		||||
             add monochrome TGA output
 | 
			
		||||
      0.94 (2014-05-31)
 | 
			
		||||
             rename private functions to avoid conflicts with stb_image.h
 | 
			
		||||
      0.93 (2014-05-27)
 | 
			
		||||
             warning fixes
 | 
			
		||||
      0.92 (2010-08-01)
 | 
			
		||||
             casts to unsigned char to fix warnings
 | 
			
		||||
      0.91 (2010-07-17)
 | 
			
		||||
             first public release
 | 
			
		||||
      0.90   first internal release
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
------------------------------------------------------------------------------
 | 
			
		||||
This software is available under 2 licenses -- choose whichever you prefer.
 | 
			
		||||
------------------------------------------------------------------------------
 | 
			
		||||
ALTERNATIVE A - MIT License
 | 
			
		||||
Copyright (c) 2017 Sean Barrett
 | 
			
		||||
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.
 | 
			
		||||
------------------------------------------------------------------------------
 | 
			
		||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
 | 
			
		||||
This is free and unencumbered software released into the public domain.
 | 
			
		||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
 | 
			
		||||
software, either in source code form or as a compiled binary, for any purpose,
 | 
			
		||||
commercial or non-commercial, and by any means.
 | 
			
		||||
In jurisdictions that recognize copyright laws, the author or authors of this
 | 
			
		||||
software dedicate any and all copyright interest in the software to the public
 | 
			
		||||
domain. We make this dedication for the benefit of the public at large and to
 | 
			
		||||
the detriment of our heirs and successors. We intend this dedication to be an
 | 
			
		||||
overt act of relinquishment in perpetuity of all present and future rights to
 | 
			
		||||
this software under copyright law.
 | 
			
		||||
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 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.
 | 
			
		||||
------------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
		Reference in New Issue
	
	Block a user