Параллельный источник

This commit is contained in:
2022-12-20 16:02:31 +03:00
parent 7793d7c05c
commit ac1d6be8c4
4 changed files with 103 additions and 0 deletions

View File

@@ -8,6 +8,9 @@ GLuint Light::count = 0; // количество используемых ист
LightData Light::data[MAX_LIGHTS]; // Массив данных по источникам света
Light Light::lights[MAX_LIGHTS]; // Массив источников-узлов сцены
Sun Sun::instance; // Экземпляр синглтона
bool Sun::uploadReq = true; // Необходимость загрузки в следствии изменений
// возвращает размер буфера в байтах
int Light::getUBOsize()
{
@@ -245,3 +248,54 @@ float& Light::e_angle()
return angle;
}
// Конструктор направленного источника с параметрами направления и цвета
Sun::Sun(const glm::vec3 &dir, const glm::vec3 &c) : direction(dir), color(c)
{
}
// Доступ к синглтону
Sun& Sun::get()
{
return instance;
}
// Загрузка данных об источнике на шейдер
void Sun::upload(UBO& sun_data)
{
if (uploadReq)
{
sun_data.loadSub(&instance, sizeof(instance));
uploadReq = false;
}
}
// Константный доступ к направлению лучей источника
const glm::vec3& Sun::c_direction() const
{
return instance.direction;
}
// Неконстантная ссылка для изменений направления лучей источника
glm::vec3& Sun::e_direction()
{
uploadReq = true;
return instance.direction;
}
// Константный доступ к цвету
const glm::vec3& Sun::c_color() const
{
return instance.color;
}
// Неконстантная ссылка для изменений цвета
glm::vec3& Sun::e_color()
{
uploadReq = true;
return instance.color;
}

View File

@@ -145,6 +145,7 @@ int main(void)
UBO cameraUB(sizeof(CameraData), 0);
UBO material_data(sizeof(Material), 1);
UBO light_data(Light::getUBOsize(), 2);
UBO sun_data(sizeof(Sun), 3);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); // Использование уменьшенных версий mipmap
@@ -204,6 +205,8 @@ int main(void)
cameraUB.loadSub(&Camera::current().getData(), sizeof(CameraData));
// Загрузим информацию об источниках света
Light::upload(light_data);
// Загружаем информацию о направленном источнике
Sun::upload(sun_data);
// Активируем G-кадра
gbuffer.use();