#pragma once #include <stdafx.h> #define FPR_MAX_LIGHTS 4098 #define FPR_MAX_LIGHTS_PER_TILE 1024 namespace fpr { static constexpr unsigned int MAX_LIGHTS = FPR_MAX_LIGHTS; struct ViewportConstants { alignas(16) glm::vec4 ambient_light = { 1.0, 0.8, 0.3, 0.1f }; alignas(8) glm::ivec2 viewport_size = {}; alignas(8) glm::ivec2 tile_size; alignas(4) unsigned int horizontal_tile_count; alignas(4) unsigned int vertical_tile_count; alignas(4) unsigned int MAX_LIGHTS_PER_TILE = FPR_MAX_LIGHTS_PER_TILE; alignas(4) unsigned int MAX_LIGHTS = FPR_MAX_LIGHTS; }; struct LightCullingData { unsigned int visible_light_indices[FPR_MAX_LIGHTS_PER_TILE]; unsigned int total_visible_lights; }; struct PointLightData { alignas(16) glm::vec3 color; alignas(4) float luminance; alignas(16) glm::vec3 position; }; struct PointLightUBO { PointLightData lights[FPR_MAX_LIGHTS]; alignas(4) unsigned int light_count; }; struct UBOPerFrame { alignas(16) glm::mat4 projection_matrix; alignas(16) glm::mat4 view_matrix; alignas(16) glm::vec3 camera_position; }; } // namespace fpr