Множество источников

This commit is contained in:
2023-10-19 16:15:03 +03:00
committed by re.kovalev
parent 721dc90c0c
commit 94cbecf491
4 changed files with 86 additions and 20 deletions

22
src/Lights.cpp Normal file
View File

@@ -0,0 +1,22 @@
#include "Lights.h"
GLuint Light::count = 0; // количество используемых источников (должно быть <= MAX_LIGHTS)
LightData Light::data[MAX_LIGHTS]; // Массив данных по источникам света
// возвращает размер буфера в байтах
int Light::getUBOsize()
{
return sizeof(LightData) * MAX_LIGHTS + sizeof(GLuint);
}
// Загрузка данных в буфер
void Light::upload(UBO& lights_data)
{
GLuint LightDataSize = sizeof(LightData); // Одного экземпляра структуры LightData
if (count)
lights_data.loadSub(data, sizeof(LightData)*count); // Загрузка данных об источниках
// Загружаем кол-во источников
lights_data.loadSub(&count, sizeof(count), LightDataSize*MAX_LIGHTS);
}

View File

@@ -103,15 +103,20 @@ int main(void)
// Установка цвета очистки буфера цвета
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
// Источник света
LightData light = { {1.0f, 3.0f, 0.0f} // позиция
, {1.0f, 1.0f, 1.0f} // цвет
// Источники света
// Первый способ измений
Light::data[0] = { {0.3f, 0.1f, 0.5f} // позиция
, {1.0f, 0.0f, 0.0f} // цвет
};
Light::count++;
// Второй способ
Light::data[Light::count].position = {-0.3f, -0.1f, 0.5f}; // позиция
Light::data[Light::count++].color = { 0.0f, 0.0f, 1.0f}; // цвет
// Uniform-буферы
UBO cameraUB(sizeof(CameraData), 0);
UBO material_data(sizeof(Material), 1);
UBO light_data(&light, sizeof(LightData), 2);
UBO light_data(Light::getUBOsize(), 2);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); // Использование уменьшенных версий mipmap
@@ -155,6 +160,8 @@ int main(void)
{
// Загрузка данных о камере
cameraUB.loadSub(&Camera::current().getData(), sizeof(CameraData));
// Загрузим информацию об источниках света
Light::upload(light_data);
// Активируем G-кадра
gbuffer.use();