diff --git a/README.md b/README.md index bafd76cfd8e137264f8810198ef41de6db46cc23..13d6b5268f96a14973bd0a46db461f8d3e69b68c 100644 --- a/README.md +++ b/README.md @@ -1,168 +1,165 @@ - - -stb -=== - -single-file public domain (or MIT licensed) libraries for C/C++ - -Noteworthy: - -* image loader: [stb_image.h](stb_image.h) -* image writer: [stb_image_write.h](stb_image_write.h) -* image resizer: [stb_image_resize.h](stb_image_resize.h) -* font text rasterizer: [stb_truetype.h](stb_truetype.h) -* typesafe containers: [stb_ds.h](stb_ds.h) - -Most libraries by stb, except: stb_dxt by Fabian "ryg" Giesen, stb_image_resize -by Jorge L. "VinoBS" Rodriguez, and stb_sprintf by Jeff Roberts. - - - -library | lastest version | category | LoC | description ---------------------- | ---- | -------- | --- | -------------------------------- -**[stb_vorbis.c](stb_vorbis.c)** | 1.19 | audio | 5555 | decode ogg vorbis files from file/memory to float/16-bit signed output -**[stb_image.h](stb_image.h)** | 2.25 | graphics | 7656 | image loading/decoding from file/memory: JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC -**[stb_truetype.h](stb_truetype.h)** | 1.24 | graphics | 5011 | parse, decode, and rasterize characters from truetype fonts -**[stb_image_write.h](stb_image_write.h)** | 1.14 | graphics | 1666 | image writing to disk: PNG, TGA, BMP -**[stb_image_resize.h](stb_image_resize.h)** | 0.96 | graphics | 2631 | resize images larger/smaller with good quality -**[stb_rect_pack.h](stb_rect_pack.h)** | 1.00 | graphics | 628 | simple 2D rectangle packer with decent quality -**[stb_ds.h](stb_ds.h)** | 0.64 | utility | 1828 | typesafe dynamic array and hash tables for C, will compile in C++ -**[stb_sprintf.h](stb_sprintf.h)** | 1.08 | utility | 1879 | fast sprintf, snprintf for C/C++ -**[stretchy_buffer.h](stretchy_buffer.h)** | 1.04 | utility | 263 | typesafe dynamic array for C (i.e. approximation to vector<>), doesn't compile as C++ -**[stb_textedit.h](stb_textedit.h)** | 1.13 | user interface | 1404 | guts of a text editor for games etc implementing them from scratch -**[stb_voxel_render.h](stb_voxel_render.h)** | 0.89 | 3D graphics | 3807 | Minecraft-esque voxel rendering "engine" with many more features -**[stb_dxt.h](stb_dxt.h)** | 1.09 | 3D graphics | 730 | Fabian "ryg" Giesen's real-time DXT compressor -**[stb_perlin.h](stb_perlin.h)** | 0.5 | 3D graphics | 428 | revised Perlin noise (3D input, 1D output) -**[stb_easy_font.h](stb_easy_font.h)** | 1.1 | 3D graphics | 305 | quick-and-dirty easy-to-deploy bitmap font for printing frame rate, etc -**[stb_tilemap_editor.h](stb_tilemap_editor.h)** | 0.41 | game dev | 4161 | embeddable tilemap editor -**[stb_herringbone_wa...](stb_herringbone_wang_tile.h)** | 0.7 | game dev | 1221 | herringbone Wang tile map generator -**[stb_c_lexer.h](stb_c_lexer.h)** | 0.11 | parsing | 966 | simplify writing parsers for C-like languages -**[stb_divide.h](stb_divide.h)** | 0.93 | math | 430 | more useful 32-bit modulus e.g. "euclidean divide" -**[stb_connected_comp...](stb_connected_components.h)** | 0.96 | misc | 1049 | incrementally compute reachability on grids -**[stb.h](stb.h)** | 2.35 | misc | 14455 | helper functions for C, mostly redundant in C++; basically author's personal stuff -**[stb_leakcheck.h](stb_leakcheck.h)** | 0.6 | misc | 194 | quick-and-dirty malloc/free leak-checking -**[stb_include.h](stb_include.h)** | 0.02 | misc | 295 | implement recursive #include support, particularly for GLSL - -Total libraries: 22 -Total lines of C code: 56562 - - -FAQ ---- - -#### What's the license? - -These libraries are in the public domain. You can do anything you -want with them. You have no legal obligation -to do anything else, although I appreciate attribution. - -They are also licensed under the MIT open source license, if you have lawyers -who are unhappy with public domain. Every source file includes an explicit -dual-license for you to choose from. - -#### Are there other single-file public-domain/open source libraries with minimal dependencies out there? - -[Yes.](https://github.com/nothings/single_file_libs) - -#### If I wrap an stb library in a new library, does the new library have to be public domain/MIT? - -No, because it's public domain you can freely relicense it to whatever license your new -library wants to be. - -#### What's the deal with SSE support in GCC-based compilers? - -stb_image will either use SSE2 (if you compile with -msse2) or -will not use any SIMD at all, rather than trying to detect the -processor at runtime and handle it correctly. As I understand it, -the approved path in GCC for runtime-detection require -you to use multiple source files, one for each CPU configuration. -Because stb_image is a header-file library that compiles in only -one source file, there's no approved way to build both an -SSE-enabled and a non-SSE-enabled variation. - -While we've tried to work around it, we've had multiple issues over -the years due to specific versions of gcc breaking what we're doing, -so we've given up on it. See https://github.com/nothings/stb/issues/280 -and https://github.com/nothings/stb/issues/410 for examples. - -#### Some of these libraries seem redundant to existing open source libraries. Are they better somehow? - -Generally they're only better in that they're easier to integrate, -easier to use, and easier to release (single file; good API; no -attribution requirement). They may be less featureful, slower, -and/or use more memory. If you're already using an equivalent -library, there's probably no good reason to switch. - -#### Can I link directly to the table of stb libraries? - -You can use [this URL](https://github.com/nothings/stb#stb_libs) to link directly to that list. - -#### Why do you list "lines of code"? It's a terrible metric. - -Just to give you some idea of the internal complexity of the library, -to help you manage your expectations, or to let you know what you're -getting into. While not all the libraries are written in the same -style, they're certainly similar styles, and so comparisons between -the libraries are probably still meaningful. - -Note though that the lines do include both the implementation, the -part that corresponds to a header file, and the documentation. - -#### Why single-file headers? - -Windows doesn't have standard directories where libraries -live. That makes deploying libraries in Windows a lot more -painful than open source developers on Unix-derivates generally -realize. (It also makes library dependencies a lot worse in Windows.) - -There's also a common problem in Windows where a library was built -against a different version of the runtime library, which causes -link conflicts and confusion. Shipping the libs as headers means -you normally just compile them straight into your project without -making libraries, thus sidestepping that problem. - -Making them a single file makes it very easy to just -drop them into a project that needs them. (Of course you can -still put them in a proper shared library tree if you want.) - -Why not two files, one a header and one an implementation? -The difference between 10 files and 9 files is not a big deal, -but the difference between 2 files and 1 file is a big deal. -You don't need to zip or tar the files up, you don't have to -remember to attach *two* files, etc. - -#### Why "stb"? Is this something to do with Set-Top Boxes? - -No, they are just the initials for my name, Sean T. Barrett. -This was not chosen out of egomania, but as a moderately sane -way of namespacing the filenames and source function names. - -#### Will you add more image types to stb_image.h? - -No. As stb_image use has grown, it has become more important -for us to focus on security of the codebase. Adding new image -formats increases the amount of code we need to secure, so it -is no longer worth adding new formats. - -#### Do you have any advice on how to create my own single-file library? - -Yes. https://github.com/nothings/stb/blob/master/docs/stb_howto.txt - -#### Why public domain? - -I prefer it over GPL, LGPL, BSD, zlib, etc. for many reasons. -Some of them are listed here: -https://github.com/nothings/stb/blob/master/docs/why_public_domain.md - -#### Why C? - -Primarily, because I use C, not C++. But it does also make it easier -for other people to use them from other languages. - -#### Why not C99? stdint.h, declare-anywhere, etc. - -I still use MSVC 6 (1998) as my IDE because it has better human factors -for me than later versions of MSVC. - - - + + +stb +=== + +single-file public domain (or MIT licensed) libraries for C/C++ + +Noteworthy: + +* image loader: [stb_image.h](stb_image.h) +* image writer: [stb_image_write.h](stb_image_write.h) +* image resizer: [stb_image_resize.h](stb_image_resize.h) +* font text rasterizer: [stb_truetype.h](stb_truetype.h) +* typesafe containers: [stb_ds.h](stb_ds.h) + +Most libraries by stb, except: stb_dxt by Fabian "ryg" Giesen, stb_image_resize +by Jorge L. "VinoBS" Rodriguez, and stb_sprintf by Jeff Roberts. + + + +library | lastest version | category | LoC | description +--------------------- | ---- | -------- | --- | -------------------------------- +**[stb_vorbis.c](stb_vorbis.c)** | 1.20 | audio | 5563 | decode ogg vorbis files from file/memory to float/16-bit signed output +**[stb_image.h](stb_image.h)** | 2.26 | graphics | 7762 | image loading/decoding from file/memory: JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC +**[stb_truetype.h](stb_truetype.h)** | 1.24 | graphics | 5011 | parse, decode, and rasterize characters from truetype fonts +**[stb_image_write.h](stb_image_write.h)** | 1.15 | graphics | 1690 | image writing to disk: PNG, TGA, BMP +**[stb_image_resize.h](stb_image_resize.h)** | 0.96 | graphics | 2631 | resize images larger/smaller with good quality +**[stb_rect_pack.h](stb_rect_pack.h)** | 1.00 | graphics | 628 | simple 2D rectangle packer with decent quality +**[stb_ds.h](stb_ds.h)** | 0.65 | utility | 1880 | typesafe dynamic array and hash tables for C, will compile in C++ +**[stb_sprintf.h](stb_sprintf.h)** | 1.09 | utility | 1879 | fast sprintf, snprintf for C/C++ +**[stretchy_buffer.h](stretchy_buffer.h)** | 1.04 | utility | 263 | typesafe dynamic array for C (i.e. approximation to vector<>), doesn't compile as C++ +**[stb_textedit.h](stb_textedit.h)** | 1.13 | user interface | 1404 | guts of a text editor for games etc implementing them from scratch +**[stb_voxel_render.h](stb_voxel_render.h)** | 0.89 | 3D graphics | 3807 | Minecraft-esque voxel rendering "engine" with many more features +**[stb_dxt.h](stb_dxt.h)** | 1.10 | 3D graphics | 753 | Fabian "ryg" Giesen's real-time DXT compressor +**[stb_perlin.h](stb_perlin.h)** | 0.5 | 3D graphics | 428 | revised Perlin noise (3D input, 1D output) +**[stb_easy_font.h](stb_easy_font.h)** | 1.1 | 3D graphics | 305 | quick-and-dirty easy-to-deploy bitmap font for printing frame rate, etc +**[stb_tilemap_editor.h](stb_tilemap_editor.h)** | 0.41 | game dev | 4161 | embeddable tilemap editor +**[stb_herringbone_wa...](stb_herringbone_wang_tile.h)** | 0.7 | game dev | 1221 | herringbone Wang tile map generator +**[stb_c_lexer.h](stb_c_lexer.h)** | 0.11 | parsing | 966 | simplify writing parsers for C-like languages +**[stb_divide.h](stb_divide.h)** | 0.93 | math | 430 | more useful 32-bit modulus e.g. "euclidean divide" +**[stb_connected_comp...](stb_connected_components.h)** | 0.96 | misc | 1049 | incrementally compute reachability on grids +**[stb.h](stb.h)** | 2.37 | misc | 14454 | helper functions for C, mostly redundant in C++; basically author's personal stuff +**[stb_leakcheck.h](stb_leakcheck.h)** | 0.6 | misc | 194 | quick-and-dirty malloc/free leak-checking +**[stb_include.h](stb_include.h)** | 0.02 | misc | 295 | implement recursive #include support, particularly for GLSL + +Total libraries: 22 +Total lines of C code: 56774 + + +FAQ +--- + +#### What's the license? + +These libraries are in the public domain. You can do anything you +want with them. You have no legal obligation +to do anything else, although I appreciate attribution. + +They are also licensed under the MIT open source license, if you have lawyers +who are unhappy with public domain. Every source file includes an explicit +dual-license for you to choose from. + +#### Are there other single-file public-domain/open source libraries with minimal dependencies out there? + +[Yes.](https://github.com/nothings/single_file_libs) + +#### If I wrap an stb library in a new library, does the new library have to be public domain/MIT? + +No, because it's public domain you can freely relicense it to whatever license your new +library wants to be. + +#### What's the deal with SSE support in GCC-based compilers? + +stb_image will either use SSE2 (if you compile with -msse2) or +will not use any SIMD at all, rather than trying to detect the +processor at runtime and handle it correctly. As I understand it, +the approved path in GCC for runtime-detection require +you to use multiple source files, one for each CPU configuration. +Because stb_image is a header-file library that compiles in only +one source file, there's no approved way to build both an +SSE-enabled and a non-SSE-enabled variation. + +While we've tried to work around it, we've had multiple issues over +the years due to specific versions of gcc breaking what we're doing, +so we've given up on it. See https://github.com/nothings/stb/issues/280 +and https://github.com/nothings/stb/issues/410 for examples. + +#### Some of these libraries seem redundant to existing open source libraries. Are they better somehow? + +Generally they're only better in that they're easier to integrate, +easier to use, and easier to release (single file; good API; no +attribution requirement). They may be less featureful, slower, +and/or use more memory. If you're already using an equivalent +library, there's probably no good reason to switch. + +#### Can I link directly to the table of stb libraries? + +You can use [this URL](https://github.com/nothings/stb#stb_libs) to link directly to that list. + +#### Why do you list "lines of code"? It's a terrible metric. + +Just to give you some idea of the internal complexity of the library, +to help you manage your expectations, or to let you know what you're +getting into. While not all the libraries are written in the same +style, they're certainly similar styles, and so comparisons between +the libraries are probably still meaningful. + +Note though that the lines do include both the implementation, the +part that corresponds to a header file, and the documentation. + +#### Why single-file headers? + +Windows doesn't have standard directories where libraries +live. That makes deploying libraries in Windows a lot more +painful than open source developers on Unix-derivates generally +realize. (It also makes library dependencies a lot worse in Windows.) + +There's also a common problem in Windows where a library was built +against a different version of the runtime library, which causes +link conflicts and confusion. Shipping the libs as headers means +you normally just compile them straight into your project without +making libraries, thus sidestepping that problem. + +Making them a single file makes it very easy to just +drop them into a project that needs them. (Of course you can +still put them in a proper shared library tree if you want.) + +Why not two files, one a header and one an implementation? +The difference between 10 files and 9 files is not a big deal, +but the difference between 2 files and 1 file is a big deal. +You don't need to zip or tar the files up, you don't have to +remember to attach *two* files, etc. + +#### Why "stb"? Is this something to do with Set-Top Boxes? + +No, they are just the initials for my name, Sean T. Barrett. +This was not chosen out of egomania, but as a moderately sane +way of namespacing the filenames and source function names. + +#### Will you add more image types to stb_image.h? + +No. As stb_image use has grown, it has become more important +for us to focus on security of the codebase. Adding new image +formats increases the amount of code we need to secure, so it +is no longer worth adding new formats. + +#### Do you have any advice on how to create my own single-file library? + +Yes. https://github.com/nothings/stb/blob/master/docs/stb_howto.txt + +#### Why public domain? + +I prefer it over GPL, LGPL, BSD, zlib, etc. for many reasons. +Some of them are listed here: +https://github.com/nothings/stb/blob/master/docs/why_public_domain.md + +#### Why C? + +Primarily, because I use C, not C++. But it does also make it easier +for other people to use them from other languages. + +#### Why not C99? stdint.h, declare-anywhere, etc. + +I still use MSVC 6 (1998) as my IDE because it has better human factors +for me than later versions of MSVC. diff --git a/stb.h b/stb.h index 75a9127cf5d7c49b473371f2fddea79363be7c95..3d4e2c74d7f0f494900d952ffb0e1c18004be37e 100644 --- a/stb.h +++ b/stb.h @@ -1,4 +1,4 @@ -/* stb.h - v2.35 - Sean's Tool Box -- public domain -- http://nothings.org/stb.h +/* stb.h - v2.37 - Sean's Tool Box -- public domain -- http://nothings.org/stb.h no warranty is offered or implied; use this code at your own risk This is a single header file with a bunch of useful utilities diff --git a/stb_ds.h b/stb_ds.h index a9c54104ef8c5523516ce0e046259c36ad4ef384..d1e0c75c6d91220959f5f4bc33c2fdc6c6670049 100644 --- a/stb_ds.h +++ b/stb_ds.h @@ -1,4 +1,4 @@ -/* stb_ds.h - v0.64 - public domain data structures - Sean Barrett 2019 +/* stb_ds.h - v0.65 - public domain data structures - Sean Barrett 2019 This is a single-header-file library that provides easy-to-use dynamic arrays and hash tables for C (also works in C++). diff --git a/stb_dxt.h b/stb_dxt.h index dbd0c600b91b449d738274405a7ee2355eb906fa..04666de9966980ed5804b32bc879618216984398 100644 --- a/stb_dxt.h +++ b/stb_dxt.h @@ -1,4 +1,4 @@ -// stb_dxt.h - v1.09 - DXT1/DXT5 compressor - public domain +// stb_dxt.h - v1.10 - DXT1/DXT5 compressor - public domain // original by fabian "ryg" giesen - ported to C by stb // use '#define STB_DXT_IMPLEMENTATION' before including to create the implementation // @@ -10,6 +10,7 @@ // You can turn on dithering and "high quality" using mode. // // version history: +// v1.10 - (i.c) various small quality improvements // v1.09 - (stb) update documentation re: surprising alpha channel requirement // v1.08 - (stb) fix bug in dxt-with-alpha block // v1.07 - (stb) bc4; allow not using libc; add STB_DXT_STATIC diff --git a/stb_image.h b/stb_image.h index 8c34993e18cecd5a583a32c276fb7b5cec7bb456..c1f044effb00323cd953f31bc48c225d9241ce8d 100644 --- a/stb_image.h +++ b/stb_image.h @@ -1,4 +1,4 @@ -/* stb_image - v2.25 - public domain image loader - http://nothings.org/stb +/* stb_image - v2.26 - public domain image loader - http://nothings.org/stb no warranty implied; use at your own risk Do this: @@ -48,6 +48,7 @@ LICENSE RECENT REVISION HISTORY: + 2.26 (2020-07-13) many minor fixes 2.25 (2020-02-02) fix warnings 2.24 (2020-02-02) fix warnings; thread-local failure_reason and flip_vertically 2.23 (2019-08-11) fix clang static analysis warning diff --git a/stb_image_write.h b/stb_image_write.h index d12860ab976798a622295a79e5a791060789e1c6..95943eb607b831cd41b1b83c5ad547abdc6f249b 100644 --- a/stb_image_write.h +++ b/stb_image_write.h @@ -1,4 +1,4 @@ -/* stb_image_write - v1.14 - public domain - http://nothings.org/stb +/* stb_image_write - v1.15 - 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 diff --git a/stb_sprintf.h b/stb_sprintf.h index fe4d773dddd7ec45cadfd22b8e4796057b2c5eb3..0635360ed7a354da24c6bbd373afcf52bbdbd6f5 100644 --- a/stb_sprintf.h +++ b/stb_sprintf.h @@ -1,4 +1,4 @@ -// stb_sprintf - v1.08 - public domain snprintf() implementation +// stb_sprintf - v1.09 - public domain snprintf() implementation // originally by Jeff Roberts / RAD Game Tools, 2015/10/20 // http://github.com/nothings/stb // diff --git a/stb_vorbis.c b/stb_vorbis.c index e7af3e13fbb42205724bbd48c40de7ce9a364946..a8cbfa6c23aaaf0209fd5dafda1ca8960e5416a5 100644 --- a/stb_vorbis.c +++ b/stb_vorbis.c @@ -1,4 +1,4 @@ -// Ogg Vorbis audio decoder - v1.19 - public domain +// Ogg Vorbis audio decoder - v1.20 - public domain // http://nothings.org/stb_vorbis/ // // Original version written by Sean Barrett in 2007. @@ -35,6 +35,7 @@ // github:Clownacy Pedro J. Estebanez Remi Verschelde // // Partial history: +// 1.20 - 2020-07-11 - several small fixes // 1.19 - 2020-02-05 - warnings // 1.18 - 2020-02-02 - fix seek bugs; parse header comments; misc warnings etc. // 1.17 - 2019-07-08 - fix CVE-2019-13217..CVE-2019-13223 (by ForAllSecure) diff --git a/tools/README.footer.md b/tools/README.footer.md index f2f8f7ef707a96830181b6cc78bb62164f962ae7..6ef5e1f748308470b34e71597391f579d55d637c 100644 --- a/tools/README.footer.md +++ b/tools/README.footer.md @@ -115,6 +115,3 @@ for other people to use them from other languages. I still use MSVC 6 (1998) as my IDE because it has better human factors for me than later versions of MSVC. - - - diff --git a/tools/make_readme.c b/tools/make_readme.c index b28c4ff720545a6818e9ca8a93af5b135d84557f..524a34ee41eb43894a3c4fed61d6bf1d65ad0319 100644 --- a/tools/make_readme.c +++ b/tools/make_readme.c @@ -9,7 +9,7 @@ int main(int argc, char **argv) char *footer = stb_file("README.footer.md", &flen); // stb_file - read file into malloc()ed buffer char **list = stb_stringfile("README.list", &listlen); // stb_stringfile - read file lines into malloced array of strings - FILE *f = fopen("../README.md", "wb"); + FILE *f = fopen("../README.md", "w"); fprintf(f, "\n\n"); fwrite(header, 1, hlen, f);