stb
Коллекция однофайловых библиотек для языков C/C++. Каждая библиотека представляет собой один заголовочный файл, который решает конкретную, часто востребованную задачу, от загрузки изображений до рендеринга вокселей. Благодаря своей простоте, лёгкости интеграции и кроссплатформенности, stb широко используется в игровой индустрии, графических приложениях и других проектах, где важна минимизация зависимостей.
Особенности
- Каждая библиотека представляет собой один
.hфайл, что предельно упрощает интеграцию в проект; - Код доступен без лицензионных отчислений и может использоваться в любых целях, включая коммерческие;
- API спроектирован интуитивно понятным и лёгким в освоении;
- Каждая библиотека выполняет одну задачу и не имеет внешних зависимостей.
Основные компоненты
Проект stb состоит из множества независимых библиотек, каждая из которых решает конкретную задачу. Наиболее популярные из них перечислены ниже. (подробнее с документацией можно ознакомиться здесь).
Графика и обработка изображений
Эта группа библиотек является самой известной и широко используемой частью проекта stb. Они предоставляют базовые, но критически важные функции для работы с графикой.
- stb_image.h — загрузчик изображений. Основные функции:
stbi_load()— загрузка изображения из файла (поддерживает JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC);stbi_load_from_memory()— загрузка изображения из буфера в памяти;stbi_loadf()— загрузка HDR-изображений с плавающей точкой;stbi_image_free()— освобождение памяти, выделенной под загруженное изображение.
- stb_image_write.h — сохранение изображений. Основные функции:
stbi_write_png(),stbi_write_bmp(),stbi_write_tga(),stbi_write_jpg()— запись изображения в файл соответствующего формата;
- stb_image_resize.h — масштабирование изображений. Основные функции:
stbir_resize_uint8(),stbir_resize_float()— изменение размеров изображения с хорошим качеством;
- stb_truetype.h — растеризация шрифтов TrueType. Основные функции:
stbtt_BakeFontBitmap()— создание растрового атласа символов для последующего рендеринга текста;stbtt_GetGlyphQuad()— получение геометрии глифа в виде квадратов для рендеринга в 3D-сценах.
Аудио
Эта категория включает библиотеки для работы со звуком.
- stb_vorbis.c — декодер аудиоформата Ogg Vorbis. Основные функции:
stb_vorbis_open_filename()— открытие Vorbis-файла;stb_vorbis_get_samples_short_interleaved()— декодирование аудио в 16-битный целочисленный буфер;stb_vorbis_close()— закрытие файла и освобождение ресурсов.
Структуры данных и утилиты
- stb_ds.h — типизированные динамические контейнеры для C. Основные макросы:
arrput()— добавление элемента в динамический массив;shput()— вставка ключа и значения в хеш-таблицу;hmdefault()— установка значения по умолчанию для хеш-таблицы;
- stb_sprintf.h — быстрая реализация функций форматирования строк. Основные функции:
stbsp_sprintf(),stbsp_snprintf()— аналоги стандартных функцийsprintf/snprintf, но с более высокой производительностью.
Разработка игр и пользовательские интерфейсы
- stb_textedit.h — "движок" текстового редактора для встраивания в игровые поля ввода. Предоставляет логику обработки ввода, но не отрисовку;
- stb_voxel_render.h — "движок" для рендеринга воксельных миров в стиле Minecraft с поддержкой освещения и текстур.
Механизм реализации
Важной особенностью stb является то, что по умолчанию заголовочный файл работает как обычный заголовок (только объявления). Для включения реализации конкретной библиотеки в проект необходимо определить специальный макрос ровно в одном .c или .cpp файле перед включением заголовка.
Пример для stb_image:
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"