Newer
Older
ForwardPlusRenderer / include / ShaderObjects.h
#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.01f };
  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