Появился SDL_gp — минимальный и быстрый 2D-рисовальщик, порт sokol_gp на SDL3. Главное отличие от оригинала в том, что sokol_gp полагался на внутреннее управление ресурсами фреймворка sokol, а SDL_gpu сам по себе такого не даёт. Поэтому SDL_gp пришлось обзавестись собственной системой управления ресурсами, очень похожей на ту, что была в sokol.
Библиотека умеет рисовать примитивы, прямоугольники, спрайты и управлять режимами смешивания. Код остаётся лаконичным. Вот простейший пример на C: захватываем командный буфер кадра через SDL_AcquireGPUCommandBuffer, начинаем новый кадр с SDL_GPBegin, очищаем экран чёрным, выставляем красный цвет через SDL_GPSetColor, вызываем SDL_GPDrawFilledRect — и получаем залитый прямоугольник. Затем SDL_GPFlush выплёвывает записанные команды в текстуру цепочки свопинга, а SDL_GPEnd завершает кадр. Ничего лишнего.
Автор продумал удобную обработку ошибок. SDL_GPGetLastError возвращает код последней ошибки (или SDL_GP_ERROR_NONE, если всё чисто), а SDL_GPGetErrorMessage превращает код в читаемую строку. Это помогает быстро понять, что пошло не так при создании ресурсов или записи команд.
Для работы с изображениями есть SDL_GPCreateImage, который принимает SDL_Surface и выдаёт объект SDL_GPImage. Его можно потом привязать к текстурному каналу, запросить связанную SDL_GPUTexture, узнать ширину или высоту, а когда надоест — уничтожить через SDL_GPDestroyImage. Шейдеры создаются парой вершинного и фрагментного описаний через SDL_GPCreateShader, отдают внутренний SDL_GPUShader и тоже уничтожаются отдельно. Собранные из шейдеров пайплайны — SDL_GPPipeline — дополнительно принимают тип примитива и режим смешивания.
Основной «рисовательный» API прячется в группе Painter API. Функции SDL_GPBegin и SDL_GPEnd обрамляют кадр, SDL_GPFlush отправляет команды в GPU. Есть трансформации: сдвиг, поворот и масштабирование, в том числе вокруг произвольной точки. Состояние можно класть в стек (SDL_GPPushTransform/SDL_GPPopTransform), сбрасывать до дефолта или менять проекцию. Текущие цвет, изображение, семплер, пайплайн и режим смешивания задаются сеттерами, а любой параметр легко откатить к исходному значению через семейство SDL_GPReset*. Вьюпорт и ножницы обрезают область вывода. Рисовать можно отдельные точки, линии, треугольники, прямоугольники — залитые и текстурированные — хоть поштучно, хоть пачками.
Автор SDL_gp, инди-разработчик с ником nsix, выложил проект под лицензией MIT и просит поддержки через GitHub Sponsors — хочет зарабатывать на жизнь своей работой. Заглянуть в детали и посмотреть примеры можно в папке samples репозитория или в блоге www.nsix.blog. В числе благодарностей — Edubart, создатель оригинального sokol_gp, который и вдохновил на порт, и команда SDL, поддерживающая SDL3.