sculpto
Static Public Member Functions | List of all members
scl::renderer Class Reference

#include <Renderer.h>

Static Public Member Functions

static void DrawGeometry (const shared< mesh > &Mesh, const matr4 &Transform)
 
static void DrawDepth (const shared< mesh > &Mesh, const matr4 &Transform)
 
static void DrawFullscreenQuad ()
 
static void Initialize ()
 
static void StartPipeline (const camera &Camera, const vec3 &EnviromentAmbiente)
 
static void EndPipeline ()
 
static void SubmitPointLight (const vec3 &Position, const vec3 &Color, float Constant, float Linear, float Quadratic)
 
static void SubmitDirectionalLight (const vec3 &Direction, const vec3 &Color, bool IsShadows=false, const matr4 &ViewProjection={}, const shared< frame_buffer > &ShadowMap=nullptr)
 
static void SubmitSpotLight (const vec3 &Position, const vec3 &Direction, const vec3 &Color, float InnerCutoffCos, float OuterCutoffCos, float Epsilon)
 
static void Submit (const shared< mesh > &Mesh, const vec3 &Scale, const vec3 &Angles, const vec3 &Position)
 
static void Submit (const shared< mesh > &Mesh, const matr4 &Transform)
 

Detailed Description

Renderer class.

Definition at line 21 of file Renderer.h.

Member Function Documentation

◆ DrawDepth()

void scl::renderer::DrawDepth ( const shared< mesh > &  Mesh,
const matr4 Transform 
)
static
  • Draw mesh depth only (for shadow pass, creating shadow mpa of shadow caster) function.
Parameters
Mesh- mesh to draw.
Transform- mesh transformation matrix.
Returns
None.

Definition at line 27 of file Renderer.cpp.

28{
29 if (!Mesh->IsCastingShadow) return;
30
31 Pipeline.ShadowPassShader->Bind();
32 for (auto &submesh : Mesh->SubMeshes)
33 {
34 // Currently local tranform matrix is usless.
35 // matr4 world = submesh.LocalTransform * Transform;
36
37 Pipeline.ShadowPassShader->SetMatr4("u_MatrWVP", Transform * matr4(Pipeline.LightsStorage.DirectionalLight.ViewProjection));
38 render_bridge::DrawIndices(submesh.VertexArray);
39 }
40}
static void DrawIndices(const shared< vertex_array > &VertexArray)
Definition: render_bridge.h:80
math::matr4< float > matr4
Definition: base.h:48
directional_light DirectionalLight
lights_storage LightsStorage
shared< shader_program > ShadowPassShader

◆ DrawFullscreenQuad()

void scl::renderer::DrawFullscreenQuad ( )
static
  • Draw fullscreen quad to call binded shader for each pixel of frame buffer.
Parameters
None.
Returns
None.

Definition at line 57 of file Renderer.cpp.

58{
59 static shared<mesh> quad = mesh::Create(topology::full_screen_quad(), nullptr);
60
61 bool save_is_wireframe = render_bridge::GetWireframeMode();
63 render_bridge::DrawIndices(quad->SubMeshes[0].VertexArray);
64 render_bridge::SetWireframeMode(save_is_wireframe);
65}
static shared< mesh > Create(const Ttopology &TopologyObject, shared< material > Material)
Definition: mesh.h:118
static void SetWireframeMode(bool IsWireframe)
Definition: render_bridge.h:40
static bool GetWireframeMode()
Definition: render_bridge.h:31

◆ DrawGeometry()

void scl::renderer::DrawGeometry ( const shared< mesh > &  Mesh,
const matr4 Transform 
)
static

Helper functions.

  • Draw mesh geometry (for geometry pass) function.
Parameters
Mesh- mesh to draw.
Transform- mesh tranformations matrix.
Returns
None.

Definition at line 42 of file Renderer.cpp.

43{
44 if (!Mesh->IsDrawing) return;
45
46 for (auto &submesh : Mesh->SubMeshes)
47 {
48 // matr4 world = submesh.LocalTransform * Transform;
49 submesh.Material->Bind();
50 submesh.Material->Shader->SetMatr3("u_MatrN", matr3(Transform.Inverse().Transpose()));
51 submesh.Material->Shader->SetMatr4("u_MatrW", Transform);
52 submesh.Material->Shader->SetMatr4("u_MatrWVP", Transform * Pipeline.ViewProjection);
53 render_bridge::DrawIndices(submesh.VertexArray);
54 }
55}
math::matr3< float > matr3
Definition: base.h:46

◆ EndPipeline()

void scl::renderer::EndPipeline ( )
static
  • End render pass function. Flush render_pass_submission quque and draw all meshes to specified frame buffer function.
Parameters
Destination- destination frame buffer to draw in.
Returns
None.

Definition at line 198 of file Renderer.cpp.

199{
200 if (Pipeline.LightsStorage.IsDirectionalLight && Pipeline.LightsStorage.DirectionalLight.IsShadows) ComputeDepth(); // Shadow pass
201 ComputeGeometry(); // Geometry pass
202 ComputateLighting(); // Lighting pass
203
204 if (Pipeline.Data.IsHDR && Pipeline.Data.IsBloom) ComputeBloom(); // Bloom pass
205 if (Pipeline.Data.IsHDR) ComputeToneMapping(); // Tone mapping pass
206
207 Pipeline.Clear();
208}

◆ Initialize()

void scl::renderer::Initialize ( )
static

Renderer API functions.

  • Renderer initialization function.
Parameters
None.
Returns
None.

Definition at line 169 of file Renderer.cpp.

170{
171 Pipeline.Initalize();
172}

◆ StartPipeline()

void scl::renderer::StartPipeline ( const camera Camera,
const vec3 EnviromentAmbiente 
)
static
  • Begin render pass function. Updates renderer pipeline data buffer.
Parameters
Camera- camera to render in.
EnviromantAmbient- rendering scene enviroment ambient color.
Returns
None.

Definition at line 174 of file Renderer.cpp.

175{
176 if (!Pipeline.IsInitialized) Pipeline.Initalize();
177
178 Pipeline.Data.Time = timer::GetTime();
179 Pipeline.Data.EnviromentAmbient = EnviromentAmbient;
180
181 Pipeline.Data.ViewportWidth = Camera.GetViewportWidth();
182 Pipeline.Data.ViewportHeight = Camera.GetViewportHeight();
183 Pipeline.Data.CameraPosition = Camera.GetPosition();
184 Pipeline.Data.CameraDirection = Camera.GetDirection();
185 Pipeline.ViewProjection = Camera.GetViewProjection();
186 Pipeline.Data.Exposure = Camera.Effects.Exposure;
187 Pipeline.Data.IsHDR = Camera.Effects.HDR;
188 Pipeline.Data.IsBloom = Camera.Effects.Bloom;
189 Pipeline.Data.BloomAmount = Camera.Effects.BloomAmount;
190
191 Pipeline.MainFrameBuffer = Camera.GetMainFrameBuffer();
192 Pipeline.GBuffer = Camera.GetGBuffer();
193 Pipeline.HDRFrameBuffer = Camera.GetHDRFrameBuffer();
194 Pipeline.BlurFrameBuffers0 = Camera.GetBlurFrameBuffers(0);
195 Pipeline.BlurFrameBuffers1 = Camera.GetBlurFrameBuffers(1);
196}
static float GetTime()
Definition: timer.h:40
shared< frame_buffer > BlurFrameBuffers0
shared< frame_buffer > BlurFrameBuffers1
shared< frame_buffer > GBuffer
shared< frame_buffer > HDRFrameBuffer
shared< frame_buffer > MainFrameBuffer

◆ Submit() [1/2]

void scl::renderer::Submit ( const shared< mesh > &  Mesh,
const matr4 Transform 
)
static
  • Submit mesh to render_pass_submission queue (rendered while flush call) function.
Parameters
Mesh- mesh to submit to queue.
Transform- mesh tranformations matrix.
Returns
None.

Definition at line 262 of file Renderer.cpp.

263{
264 Pipeline.SubmissionsList.emplace_back<submission>({ Mesh, Transform });
265}
std::vector< submission > SubmissionsList

◆ Submit() [2/2]

void scl::renderer::Submit ( const shared< mesh > &  Mesh,
const vec3 Scale,
const vec3 Angles,
const vec3 Position 
)
static
  • Calculate mesh transorm matrix and submit to queue (rendered while flush call) function.
Parameters
Mesh- mesh to submit to queue.
Scale- mesh scale factor along 3 axies.
Angles- mesh rotation angles factor along 3 axies.
Position- mesh world position.
Returns
None.

Definition at line 251 of file Renderer.cpp.

252{
253 matr4 transform =
254 matr4::Scale(Scale) *
255 matr4::RotateX(Angles.X) *
256 matr4::RotateY(Angles.Y) *
257 matr4::RotateZ(Angles.Z) *
258 matr4::Translate(Position);
259 Pipeline.SubmissionsList.emplace_back<submission>({ Mesh, transform });
260}
static matr4 RotateY(degrees< float > Angle)
Definition: matr4.h:323
static matr4 Scale(vec3< float > S)
Definition: matr4.h:272
static matr4 RotateZ(degrees< float > Angle)
Definition: matr4.h:340
static matr4 RotateX(degrees< float > Angle)
Definition: matr4.h:306
static matr4 Translate(const vec3< float > &Transform)
Definition: matr4.h:257

◆ SubmitDirectionalLight()

void scl::renderer::SubmitDirectionalLight ( const vec3 Direction,
const vec3 Color,
bool  IsShadows = false,
const matr4 ViewProjection = {},
const shared< frame_buffer > &  ShadowMap = nullptr 
)
static
  • Submit point light function.
Parameters
Direction- light direction.
Color- light color.
IsShadows- is directional light casts shadows flag.
ViewProjection- shadow caster view projection matrix.
ShadowMap- shadow caster shadow map frame buffer.
Returns
None.

Definition at line 222 of file Renderer.cpp.

224{
225 if (Pipeline.LightsStorage.IsDirectionalLight) return;
226
227 Pipeline.LightsStorage.DirectionalLight.Direction = Direction;
228 Pipeline.LightsStorage.DirectionalLight.Color = Color;
229 if (IsShadows)
230 {
231 Pipeline.LightsStorage.DirectionalLight.IsShadows = IsShadows;
232 Pipeline.LightsStorage.DirectionalLight.ViewProjection = ViewProjection;
233 Pipeline.ShadowMap = ShadowMap;
234 }
235 Pipeline.LightsStorage.IsDirectionalLight = true;
236}
shared< frame_buffer > ShadowMap

◆ SubmitPointLight()

void scl::renderer::SubmitPointLight ( const vec3 Position,
const vec3 Color,
float  Constant,
float  Linear,
float  Quadratic 
)
static
  • Submit point light function.
Parameters
Position- light possition.
Color- light color.
Constant- light attenutation constant coefficient.
Linear- light attenuation liear coefficient.
Quadratic- light attenuation quadratic coefficient.
Returns
None.

Definition at line 210 of file Renderer.cpp.

◆ SubmitSpotLight()

void scl::renderer::SubmitSpotLight ( const vec3 Position,
const vec3 Direction,
const vec3 Color,
float  InnerCutoffCos,
float  OuterCutoffCos,
float  Epsilon 
)
static
  • Submit point light function.
Parameters
Position- light possition.
Direction- light direction
Color- light color.
InnerCutoffCos- cosine of inner spot light cone angle.
OuterCutoffCos- cosine of outer spot light cone angle.
Epsilon- (OuterCutoffCos - InnerCutoffCos), for optimization.

Definition at line 238 of file Renderer.cpp.

239{
241
242 Pipeline.LightsStorage.SpotLights[Pipeline.LightsStorage.SpotLightsCount].Position = Position;
243 Pipeline.LightsStorage.SpotLights[Pipeline.LightsStorage.SpotLightsCount].Direction = Direction;
245 Pipeline.LightsStorage.SpotLights[Pipeline.LightsStorage.SpotLightsCount].InnerCutoffCos = InnerCutoffCos;
246 Pipeline.LightsStorage.SpotLights[Pipeline.LightsStorage.SpotLightsCount].OuterCutoffCos = OuterCutoffCos;
247 Pipeline.LightsStorage.SpotLights[Pipeline.LightsStorage.SpotLightsCount].Epsilon = Epsilon;
249}
static const int LIGHTS_MAX_SPOT
spot_light SpotLights[50]

The documentation for this class was generated from the following files: