#ifndef LIGHTS_H #define LIGHTS_H #include #include "Model.h" // Максимальное число источников света #define MAX_LIGHTS 300 // Точечный источник света struct LightData { alignas(16) glm::vec3 position; // Позиция alignas(16) glm::vec3 color; // Цвет }; // Источник света class Light : public Node { public: static int getUBOsize(); // Возвращает размер буфера в байтах static void upload(UBO& lights_data); // Загрузка данных в буфер const glm::vec3& c_color() const; // Константный доступ к цвету glm::vec3& e_color(); // Неконстантная ссылка для изменений цвета private: glm::vec3 color; // Цвет int index; // Индекс в массиве отправки (может не совпадать с lights) для дефрагментированного доступа bool uploadReq; // Необходимость загрузки в следствии изменений void check_id(); // Проверка что не взаимодествуем с пустым источником void toData(); // Преобразует информацию об источнике в структуру LightData virtual void recalcMatrices(); // Метод пересчета матрицы трансформации по необходимости, должен сбрасывать флаг changed static GLuint count; // количество используемых источников (должно быть <= MAX_LIGHTS) static LightData data[MAX_LIGHTS]; // Массив данных по источникам света }; #endif // LIGHTS_H