/
Zamar_Terrier
/
TigorEngine
Обзор
Документация
Войти
/
Zamar_Terrier
/
TigorEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
includes/Core/e_postprocessing.h
235 строк
9 KB
Zamar_Terrier
Офигенное обновление движка
31 июл 2026, 21:03
Верифицирован
31 июл 2026, 21:03
1682686
Код
Авторство
О чём код?
/** * @file e_postprocessing.h * @brief Заголовочный файл системы пост-обработки TigorEngine * @details Определяет структуры и функции для создания и управления пост-обработкой, * основанную на стандартных объектах движка (RenderTexture + ShapeObject). */ #ifndef E_POSTPROCESSING_H #define E_POSTPROCESSING_H #include <vulkan/vulkan.h> #include <stdint.h> #include <stdbool.h> #include "Objects/render_texture.h" #include "Objects/shape_object.h" #ifdef __cplusplus extern "C" { #endif // ============================================================================ // Константы и макросы // ============================================================================ #define MAX_POST_PROCESSING_EFFECTS 8 // ============================================================================ // Типы эффектов пост-обработки // ============================================================================ typedef enum { POST_PROCESSING_EFFECT_COLOR_GRADING = (1u << 0), POST_PROCESSING_EFFECT_TONEMAP = (1u << 1), POST_PROCESSING_EFFECT_BLUR = (1u << 2), POST_PROCESSING_EFFECT_VIGNETTE = (1u << 3), POST_PROCESSING_EFFECT_BLOOM = (1u << 4), POST_PROCESSING_EFFECT_SHARPEN = (1u << 5), POST_PROCESSING_EFFECT_PIXELATE = (1u << 6), POST_PROCESSING_EFFECT_GRAIN = (1u << 7), POST_PROCESSING_EFFECT_SEPIA = (1u << 8), POST_PROCESSING_EFFECT_GRAYSCALE = (1u << 9), POST_PROCESSING_EFFECT_EDGE = (1u << 10), POST_PROCESSING_EFFECT_CHROMATIC = (1u << 11) } PostProcessingEffectType; // ============================================================================ // Структуры параметров эффектов // ============================================================================ typedef struct { float threshold; float strength; float radius; int iterations; } BloomParams; typedef struct { float blur_size; int blur_passes; float blur_direction; } BlurParams; typedef struct { float brightness; float contrast; float saturation; float hue_shift; } ColorGradingParams; typedef struct { float exposure; float white_point; float black_point; float gamma; } TonemapParams; /** Объединённые Uniform-данные для шейдера (должны совпадать со структурой в шейдере) */ #pragma pack(push, 1) typedef struct { float uScreenWidth; float uScreenHeight; float uTime; float uThreshold; float uStrength; float uRadius; int32_t uIterations; float uBlurSize; int32_t uBlurPasses; float uBlurDirectionX; float uBlurDirectionY; float uBrightness; float uContrast; float uSaturation; float uHueShift; float uExposure; float uWhitePoint; float uBlackPoint; float uGamma; uint32_t uEffectFlags; // ----- НОВЫЕ ПОЛЯ ----- float uPixelSize; // размер пикселя для Pixelate (по умолчанию 4.0) float uGrainIntensity; // интенсивность зерна (0-1, по умолчанию 0.1) float uSepiaIntensity; // интенсивность сепии (0-1, по умолчанию 1.0) float uTemperature; // цветовая температура (-1..1, отрицательное = холоднее, положительное = теплее) float uEdgeThreshold; // порог для детекции границ (0.01-0.5) float uChromaticAberration; // сила аберрации (пикселей, 0-5) float uPadding[2]; // для выравнивания (чтобы размер был кратен 16) } PostProcessingUniforms; #pragma pack(pop) // ============================================================================ // Основная структура пайплайна пост-обработки // ============================================================================ typedef struct { // Offscreen-рендер (сцена рендерится сюда) RenderTexture sceneRender; // Полноэкранный квад для отображения результата с применёнными эффектами ShapeObject fullscreenQuad; // Uniform-буфер (будет создан через BluePrint) // Указатель на данные, которые будут обновляться каждый кадр PostProcessingUniforms uniforms; // Флаг инициализации bool initialized; // Хранение индекса шейдерного пакета (для обновления uniform) uint32_t shaderPackIndex; } PostProcessingPipeline; // ============================================================================ // Функции управления пайплайном пост-обработки // ============================================================================ /** * @brief Создаёт пайплайн пост-обработки с заданными размерами. * @param pp Указатель на структуру PostProcessingPipeline. * @param width Ширина выходного изображения. * @param height Высота выходного изображения. * @return 0 при успехе, иначе -1. */ int PostProcessingCreate(PostProcessingPipeline* pp, int width, int height); /** * @brief Уничтожает пайплайн пост-обработки и освобождает все ресурсы. * @param pp Указатель на PostProcessingPipeline. */ void PostProcessingDestroy(PostProcessingPipeline* pp); /** * @brief Пересоздаёт пайплайн с новыми размерами (для ресайза). * @param pp Указатель на PostProcessingPipeline. * @param newWidth Новая ширина. * @param newHeight Новая высота. * @return 0 при успехе, иначе -1. */ int PostProcessingRecreate(PostProcessingPipeline* pp, int newWidth, int newHeight); /** * @brief Обновляет uniform-буфер текущими параметрами эффектов. * @param pp Указатель на PostProcessingPipeline. */ void PostProcessingUpdateUniforms(PostProcessingPipeline* pp); /** * @brief Возвращает указатель на offscreen-рендер (для рендеринга сцены). * @param pp Указатель на PostProcessingPipeline. * @return Указатель на RenderTexture. */ RenderTexture* PostProcessingGetRenderTarget(PostProcessingPipeline* pp); /** * @brief Возвращает указатель на полноэкранный квад (для отображения). * @param pp Указатель на PostProcessingPipeline. * @return Указатель на ShapeObject. */ ShapeObject* PostProcessingGetQuad(PostProcessingPipeline* pp); // ============================================================================ // Управление эффектами // ============================================================================ /** * @brief Устанавливает параметры Bloom. */ void PostProcessingSetBloomParams(PostProcessingPipeline* pp, float threshold, float strength, float radius, int iterations); /** * @brief Устанавливает параметры Blur. */ void PostProcessingSetBlurParams(PostProcessingPipeline* pp, float blurSize, int blurPasses, float blurDirection); /** * @brief Устанавливает параметры Color Grading. */ void PostProcessingSetColorGradingParams(PostProcessingPipeline* pp, float brightness, float contrast, float saturation, float hueShift); /** * @brief Устанавливает параметры Tonemap. */ void PostProcessingSetTonemapParams(PostProcessingPipeline* pp, float exposure, float whitePoint, float blackPoint, float gamma); /** * @brief Включает/выключает эффект по флагу. * @param pp Указатель на PostProcessingPipeline. * @param effect Флаг эффекта (POST_PROCESSING_EFFECT_*). * @param enabled true – включить, false – выключить. */ void PostProcessingSetEffectEnabled(PostProcessingPipeline* pp, PostProcessingEffectType effect, bool enabled); /** * @brief Проверяет, включён ли эффект. */ bool PostProcessingIsEffectEnabled(PostProcessingPipeline* pp, PostProcessingEffectType effect); void PostProcessingSetPixelateParams(PostProcessingPipeline* pp, float pixelSize); void PostProcessingSetGrainParams(PostProcessingPipeline* pp, float intensity); void PostProcessingSetSepiaParams(PostProcessingPipeline* pp, float intensity); void PostProcessingSetGrayscaleEnabled(PostProcessingPipeline* pp, bool enabled); void PostProcessingSetEdgeParams(PostProcessingPipeline* pp, float threshold); void PostProcessingSetChromaticParams(PostProcessingPipeline* pp, float amount); #ifdef __cplusplus } #endif #endif // E_POSTPROCESSING_H