Параллельный источник
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user