/
Zamar_Terrier
/
TigorEngine
Обзор
Документация
Войти
/
Zamar_Terrier
/
TigorEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
includes/Objects/render_texture.h
147 строк
6 KB
Zamar_Terrier
Офигенное обновление движка
31 июл 2026, 21:03
Верифицирован
31 июл 2026, 21:03
1682686
Код
Авторство
О чём код?
#ifndef RENDER_TEXTURE_H #define RENDER_TEXTURE_H #include "Core/e_camera.h" #include "Core/e_texture.h" #include "Variabels/engine_includes.h" #include "gameObject.h" #define MAX_SURFACES 10 /** * @brief Типы рендеринга для RenderTexture */ typedef enum EngineRenderType{ TIGOR_RENDER_TYPE_WINDOW = 0x1, ///< Окно отображения TIGOR_RENDER_TYPE_IMAGE = 0x2, ///< Изображение TIGOR_RENDER_TYPE_DEPTH = 0x4, ///< Глубина (depth buffer) TIGOR_RENDER_TYPE_CUBEMAP = 0x8, ///< Кубическая карта TIGOR_RENDER_TYPE_GEOMETRY = 0x10, ///< Геометрия TIGOR_RENDER_TYPE_COLORED_IMAGE = 0x20 ///< Цветное изображение } EngineRenderType; /** * @brief Флаги рендеринга для RenderTexture */ typedef enum EngineRenderFlag{ TIGOR_RENDER_FLAG_ONE_SHOT = 0x1, ///< Однократная отрисовка TIGOR_RENDER_FLAG_SHOOTED = 0x2, ///< Снимок сделан TIGOR_RENDER_FLAG_PERSPECTIVE = 0x4, ///< Перспектива TIGOR_RENDER_FLAG_FRUSTRUM = 0x8, ///< Обрезанная пирамида (frustum) TIGOR_RENDER_FLAG_ORTHOGRAPHIC = 0x10, ///< Ортографическая проекция TIGOR_RENDER_FLAG_DEPTH = 0x20, ///< Глубина } EngineRenderFlag; /** * @brief Структура кадра рендеринга * * Содержит текстуры глубины и цвета, а также данные для теней */ typedef struct RenderFrame{ Texture2D depth_texture; ///< Текстура глубины Texture2D render_texture; ///< Текстура рендеринга void **shadowCubeRenderPass; ///< Массив проходов рендеринга кубических теней void **shadowCubeMapFaceImageViews; ///< Массив представлений граней кубической карты теней VkFramebuffer framebufers[6]; ///< Буферы кадров для теней (6 граней куба) uint32_t m_currentLayout; ///< Текущий макет текстуры } RenderFrame; /** * @brief Структура текстуры рендеринга * * Управляет рендерингом в текстуру с поддержкой различных типов рендеринга, * камер и параметров отрисовки */ typedef struct RenderTexture{ RenderFrame frames[8]; ///< Массив кадров (буфер двойной/тройной буферизации) uint32_t num_frames; ///< Количество кадров VkRenderPass render_pass; ///< Vulkan render pass Camera2D cam2D; ///< 2D камера Camera3D cam3D; ///< 3D камера vec3 clear_color; ///< Цвет очистки vec3 up_vector; ///< Вектор "вверх" mat4 view; ///< Матрица вида uint32_t m_currentStage; ///< Текущий этап рендеринга uint32_t currFrame; ///< Текущий кадр uint32_t width; ///< Ширина рендеринга uint32_t height; ///< Высота рендеринга uint32_t mip_levels; ///< Уровни мип-карты VkFormat m_format; ///< Формат Vulkan EngineRenderType type; ///< Тип рендеринга uint32_t indx_descriptor; ///< Индекс дескриптора uint32_t flags; ///< Флаги рендеринга VkClearValue clearValues[2]; ///< Значения очистки (цвет и глубина) } RenderTexture; /** * @brief Инициализирует текстуру рендеринга * @param render Указатель на текстуру рендеринга * @param type Тип рендеринга (из перечисления EngineRenderType) * @param width Ширина текстуры * @param height Высота текстуры * @param flags Флаги рендеринга */ void RenderTextureInit(RenderTexture *render, uint32_t type, uint32_t width, uint32_t height, uint32_t flags); /** * @brief Добавляет поверхность для рендеринга * @param render Указатель на текстуру рендеринга */ void RenderTextureAddSurface(RenderTexture *render); /** * @brief Перезагружает указанную поверхность * @param render Указатель на текстуру рендеринга * @param indx_surf Индекс поверхности */ void RenderTextureReload(RenderTexture *render, uint32_t indx_surf); /** * @brief Устанавливает текущий кадр для рендеринга * @param render Указатель на текстуру рендеринга * @param indx_frame Индекс кадра */ void RenderTextureSetCurrentFrame(RenderTexture *render, uint32_t indx_frame); /** * @brief Начинает процесс рендеринга * @param render Указатель на текстуру рендеринга * @param cmd_buff Буфер команд Vulkan */ void RenderTextureBeginRendering(RenderTexture *render, void *cmd_buff); /** * @brief Пересоздает текстуру рендеринга * @param render Указатель на текстуру рендеринга */ void RenderTextureRecreate(RenderTexture *render); /** * @brief Завершает процесс рендеринга * @param render Указатель на текстуру рендеринга * @param cmd_buff Буфер команд Vulkan */ void RenderTextureEndRendering(RenderTexture *render, void *cmd_buff); /** * @brief Уничтожает текстуру рендеринга и освобождает ресурсы * @param render Указатель на текстуру рендеринга */ void RenderTextureDestroy(RenderTexture *render); #endif // RENDER_TEXTURE_H