11class LowLevelRenderer;
15class GraphicsPipeline;
86 void BinLights(
CommandBuffer& commandBuffer,
const std::vector<DirectionalLight>& directionalLights,
const std::vector<Light>& lights,
const glm::mat4& projectionMatrix,
float zNear,
float zFar);
97 void Tiling(
CommandBuffer& commandBuffer,
const glm::mat4& projectionMatrix);
102 bool conservativeRasterization;
104 static const uint32_t MAX_DIRECTIONAL_LIGHTS = 128;
107 static const uint32_t MAX_LIGHTS = 2048;
108 Light lightData[MAX_LIGHTS];
110 static const uint32_t TILE_MASK_BUFFER_SIZE = 8 * 1024 * 1024;
115 uint32_t pipelineCount = 0u;
117 Shader* tilingVertexShader;
118 Shader* tilingFragmentShader;
123 struct TilingMatricesData {
124 glm::mat4 projectionMatrix;
126 float invIsocahedronError;
129 struct TilingUniformData {
135 glm::uvec2 screenSize;
136 glm::uvec2 tilingSize;
139 uint32_t msaaScale = 1u;
A buffer containing GPU accessible data.
Definition: Buffer.hpp:8
A buffer into which rendering commands are recorded.
Definition: CommandBuffer.hpp:24
A compute pipeline.
Definition: ComputePipeline.hpp:11
A graphics pipeline.
Definition: GraphicsPipeline.hpp:11
An isocahedron used as proxy light geometry.
Definition: Isocahedron.hpp:13
Low level renderer abstracting the underlaying graphics API (OpenGL or Vulkan).
Definition: LowLevelRenderer.hpp:27
Compiles and handles a shader. Shaders should be linked together into a ShaderProgram.
Definition: Shader.hpp:8
A shader program.
Definition: ShaderProgram.hpp:11
Handles binning and tiling of lights.
Definition: ZBinning.hpp:20
~ZBinning()
Destructor.
Definition: ZBinning.cpp:74
ZBinning(LowLevelRenderer *lowLevelRenderer, const glm::uvec2 &screenSize)
Create new Z binning.
Definition: ZBinning.cpp:18
const LightInfo & GetLightInfo()
Get the light info.
Definition: ZBinning.cpp:150
void BinLights(CommandBuffer &commandBuffer, const std::vector< DirectionalLight > &directionalLights, const std::vector< Light > &lights, const glm::mat4 &projectionMatrix, float zNear, float zFar)
Bin and tile the lights.
Definition: ZBinning.cpp:105
void SetRenderSurfaceSize(const glm::uvec2 &size)
Configure tiles based on screen size.
Definition: ZBinning.cpp:91
Definition: Editor.hpp:18
A directional light used for lighting the scene.
Definition: Light.hpp:7
A light used for lighting the scene.
Definition: Light.hpp:16
Information about the lights in a scene.
Definition: ZBinning.hpp:23
Buffer * directionalLightBuffer
Buffer containing the directional light data.
Definition: ZBinning.hpp:28
float zFar
The far plane.
Definition: ZBinning.hpp:58
Buffer * tileMaskBuffer
Buffer containing light masks for the tiles.
Definition: ZBinning.hpp:46
Buffer * zMaskBuffer
Buffer containing light masks for the z bins.
Definition: ZBinning.hpp:52
Buffer * lightBuffer
Buffer containing the spot and point light data.
Definition: ZBinning.hpp:34
uint32_t directionalLightCount
The number of directional lights.
Definition: ZBinning.hpp:25
uint32_t lightCount
The number of spot and point lights.
Definition: ZBinning.hpp:31
uint32_t zBins
The number of z-bins.
Definition: ZBinning.hpp:49
uint32_t maskCount
The number of bitmasks per z-bin/tile.
Definition: ZBinning.hpp:37
uint32_t tileSize
The size of a tile in pixels. Tiles are always square.
Definition: ZBinning.hpp:40
glm::uvec2 tiles
The number of tiles in each dimension.
Definition: ZBinning.hpp:43
float zNear
The near plane.
Definition: ZBinning.hpp:55