Множество источников
This commit is contained in:
22
src/Lights.cpp
Normal file
22
src/Lights.cpp
Normal 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);
|
||||
}
|
||||
17
src/main.cpp
17
src/main.cpp
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user