SleakEngine 1.0.0
C++23 multi-backend game engine
Loading...
Searching...
No Matches
Sleak::RenderEngine::OpenGLRenderer Class Reference

OpenGL 3.3+ backend: deferred GBuffer pipeline, SSAO, shadow mapping, and baked IBL. More...

#include <OpenGLRenderer.hpp>

Inheritance diagram for Sleak::RenderEngine::OpenGLRenderer:

Public Member Functions

 OpenGLRenderer (Window *window)
 Registers this backend's buffer/shader/texture factories with ResourceManager.
virtual ~OpenGLRenderer ()
void ApplyMSAAChange () override
void ApplyVSyncChange () override
virtual void BeginDebugLinePass () override
void BeginRender () override
 Acquires the next frame and prepares it for command recording.
virtual void BindBoneBuffer (RefPtr< BufferBase > buffer) override
virtual void BindConstantBuffer (RefPtr< BufferBase > buffer, uint32_t slot=0) override
virtual void BindIndexBuffer (RefPtr< BufferBase > buffer, uint32_t slot=0) override
virtual void BindTexture (RefPtr< Sleak::Texture > texture, uint32_t slot=0) override
virtual void BindVertexBuffer (RefPtr< BufferBase > buffer, uint32_t slot=0) override
void Cleanup () override
virtual void ClearDepthStencil (bool clearDepth, bool clearStencil, float depth, uint8_t stencil) override
virtual void ClearRenderTarget (float r, float g, float b, float a) override
virtual BufferBaseCreateBuffer (BufferType Type, uint32_t size, void *data) override
 Allocates a backend buffer, optionally seeded with initial data.
TextureCreateCubemapTexture (const std::array< std::string, 6 > &facePaths)
 Loads a cubemap from six face image paths.
TextureCreateCubemapTextureFromPanorama (const std::string &panoramaPath)
 Loads a cubemap by converting a single equirectangular panorama.
virtual bool CreateImGUI () override
 Initializes ImGui integration for this backend.
virtual ShaderCreateShader (const std::string &shaderSource) override
 Compiles a shader program from source or a source-file path.
virtual TextureCreateTexture (const std::string &TexturePath) override
 Loads a texture from disk.
virtual TextureCreateTextureFromData (uint32_t width, uint32_t height, void *data) override
 Creates a texture from an in-memory pixel buffer.
virtual void Draw (uint32_t vertexCount) override
 Non-indexed draw from the currently bound vertex buffer.
virtual void DrawIndexed (uint32_t indexCount) override
 Indexed draw from the currently bound vertex/index buffers.
virtual void DrawIndexedInstance (uint32_t instanceCount, uint32_t indexPerInstance) override
 Indexed instanced draw.
virtual void DrawInstance (uint32_t instanceCount, uint32_t vertexPerInstance) override
 Non-indexed instanced draw.
virtual void EndDebugLinePass () override
void EndRender () override
 Submits recorded commands and presents the frame.
virtual RenderContextGetContext () override
 Returns the backend's command-recording interface.
virtual uint32_t GetFeatureCaps () const override
 Feature capability mask; backends override with the audited truth.
bool Initialize () override
 Creates the device, swapchain, and backend resources.
virtual void Resize (uint32_t width, uint32_t height) override
 Recreates swapchain-dependent resources for a new surface size.
virtual void SetCullEnabled (bool enabled) override
virtual void SetDepthCompare (DepthCompare compare) override
virtual void SetDepthWrite (bool enabled) override
virtual void SetRenderFace (RenderFace face) override
virtual void SetRenderMode (RenderMode mode) override
virtual void SetViewport (float x, float y, float width, float height, float minDepth=0.0f, float maxDepth=1.0f) override
 Sets the active viewport rect and depth range in pixel/NDC units.
Public Member Functions inherited from Sleak::RenderEngine::Renderer
virtual ~Renderer ()=0
virtual void ApplyShadowResolutionChange ()
virtual void FlushPendingTransfers ()
 Flushes any buffered upload/staging transfers still in flight.
float GetCPUUsage () const
bool GetDeferredEnabled () const
float GetExposure () const
int GetFrameRate () const
float GetFrameTime () const
float GetGamma () const
virtual size_t GetGPUMemoryBudget () const
virtual size_t GetGPUMemoryUsed () const
float GetIBLIntensity () const
bool GetImGUIEnabled ()
bool GetIsPerformanceCounter ()
uint32_t GetMaxMSAASampleCount () const
uint32_t GetMSAASampleCount () const
float GetRamUsage () const
RenderMode GetRenderMode () const
uint32_t GetShadowMapResolution () const
float GetSSAOBias () const
float GetSSAOPower () const
float GetSSAORadius () const
int GetTriangles () const
RendererType GetType () const
const char * GetTypeStr () const
int GetVertices () const
bool GetVSync () const
bool IsBloomEnabled () const
bool IsIBLEnabled () const
bool IsPCSSEnabled () const
bool IsShadowPassEnabled () const
bool IsSSAOEnabled () const
bool IsSSREnabled () const
bool IsTAAEnabled () const
bool IsTonemappingEnabled () const
void SetBloomEnabled (bool enabled)
void SetDeferredEnabled (bool enabled)
void SetExposure (float exposure)
void SetGamma (float gamma)
void SetIBLEnabled (bool enabled)
void SetIBLIntensity (float intensity)
void SetImGUI (bool bEnable)
virtual void SetMSAASampleCount (uint32_t samples)
 Requests a new MSAA sample count; rejects invalid values and samples above 1 while deferred shading is on.
void SetPCSSEnabled (bool enabled)
void SetPerformanceCounter (bool value)
void SetRenderCullFace (RenderFace face)
void SetRenderDrawMode (RenderMode mode)
void SetShadowMapResolution (uint32_t res)
 Requests a new shadow map size, clamped to [256, 8192] and queued if resources already exist.
void SetShadowPassEnabled (bool enabled)
void SetSSAOBias (float bias)
void SetSSAOEnabled (bool enabled)
void SetSSAOPower (float power)
void SetSSAORadius (float radius)
void SetSSREnabled (bool enabled)
void SetTAAEnabled (bool enabled)
void SetTonemappingEnabled (bool enabled)
virtual void SetVSync (bool enabled)
virtual void WaitIdle ()
 Blocks until the GPU has finished all outstanding work.
Public Member Functions inherited from Sleak::RenderEngine::RenderContext
virtual void BeginCustomFormatPass (VertexFormatHandle format)
 Binds the pipeline built for a registered vertex layout in the active render pass.
virtual void BeginShadowPass ()
virtual void BeginSkinnedPass ()
virtual void BeginSkyboxPass ()
virtual void BindTextureRaw (Sleak::Texture *texture, uint32_t slot=0)
virtual void EndCustomFormatPass ()
 Restores the pipeline that was active before the custom format draws.
virtual void EndShadowPass ()
virtual void EndSkinnedPass ()
virtual void EndSkyboxPass ()
virtual bool IsShadowPassActive () const

Additional Inherited Members

Protected Member Functions inherited from Sleak::RenderEngine::Renderer
void UpdateFrameMetrics ()
 Rolls up frame count into rate/time/triangle stats once per MetricUpdateInterval.
Protected Attributes inherited from Sleak::RenderEngine::Renderer
bool bEnabledPerformanceCounter = false
bool bImFrameActive = false
bool bImInitialized = false
int DisplayTriangles = 0
int DisplayVertices = 0
int DrawnTriangles = 0
int DrawnVertices = 0
RenderFace Face
int frameRate = 0
float frameTime = 0
bool m_bloomEnabled = true
bool m_deferredEnabled = true
float m_exposure = 1.0f
uint32_t m_frameCount = 0
Timer m_frameTimer
float m_gamma = 2.2f
bool m_iblEnabled = false
float m_iblIntensity = 0.5f
uint32_t m_maxMsaaSampleCount = 1
bool m_msaaChangeRequested = false
uint32_t m_msaaSampleCount = 1
bool m_pcssEnabled = true
uint32_t m_pendingMsaaSampleCount = 1
uint32_t m_pendingShadowMapResolution = 2048
uint32_t m_shadowMapResolution = 2048
bool m_shadowPassEnabled = false
bool m_shadowResChangeRequested = false
bool m_shadowResourcesCreated = false
float m_ssaoBias = 0.025f
bool m_ssaoEnabled = false
float m_ssaoPower = 2.0f
float m_ssaoRadius = 0.8f
bool m_ssrEnabled = false
bool m_taaEnabled = false
bool m_tonemapEnabled = false
bool m_vsync = false
bool m_vsyncChangeRequested = false
RenderMode Mode
RendererType Type
float UsedCPU = 0
float UsedRam = 0
Static Protected Attributes inherited from Sleak::RenderEngine::Renderer
static constexpr float MetricUpdateInterval = 0.5f

Detailed Description

OpenGL 3.3+ backend: deferred GBuffer pipeline, SSAO, shadow mapping, and baked IBL.

Definition at line 19 of file OpenGLRenderer.hpp.

Constructor & Destructor Documentation

◆ OpenGLRenderer()

Sleak::RenderEngine::OpenGLRenderer::OpenGLRenderer ( Window * window)

Registers this backend's buffer/shader/texture factories with ResourceManager.

Definition at line 28 of file OpenGLRenderer.cpp.

◆ ~OpenGLRenderer()

Sleak::RenderEngine::OpenGLRenderer::~OpenGLRenderer ( )
virtual

Definition at line 51 of file OpenGLRenderer.cpp.

Member Function Documentation

◆ ApplyMSAAChange()

void Sleak::RenderEngine::OpenGLRenderer::ApplyMSAAChange ( )
overridevirtual

Reimplemented from Sleak::RenderEngine::Renderer.

Definition at line 557 of file OpenGLRenderer.cpp.

◆ ApplyVSyncChange()

void Sleak::RenderEngine::OpenGLRenderer::ApplyVSyncChange ( )
overridevirtual

Reimplemented from Sleak::RenderEngine::Renderer.

Definition at line 569 of file OpenGLRenderer.cpp.

◆ BeginDebugLinePass()

void Sleak::RenderEngine::OpenGLRenderer::BeginDebugLinePass ( )
overridevirtual

Reimplemented from Sleak::RenderEngine::RenderContext.

Definition at line 263 of file OpenGLRenderer.cpp.

◆ BeginRender()

void Sleak::RenderEngine::OpenGLRenderer::BeginRender ( )
overridevirtual

Acquires the next frame and prepares it for command recording.

Implements Sleak::RenderEngine::Renderer.

Definition at line 119 of file OpenGLRenderer.cpp.

◆ BindBoneBuffer()

void Sleak::RenderEngine::OpenGLRenderer::BindBoneBuffer ( RefPtr< BufferBase > buffer)
overridevirtual

Reimplemented from Sleak::RenderEngine::RenderContext.

Definition at line 475 of file OpenGLRenderer.cpp.

◆ BindConstantBuffer()

void Sleak::RenderEngine::OpenGLRenderer::BindConstantBuffer ( RefPtr< BufferBase > buffer,
uint32_t slot = 0 )
overridevirtual

Implements Sleak::RenderEngine::RenderContext.

Definition at line 435 of file OpenGLRenderer.cpp.

◆ BindIndexBuffer()

void Sleak::RenderEngine::OpenGLRenderer::BindIndexBuffer ( RefPtr< BufferBase > buffer,
uint32_t slot = 0 )
overridevirtual

Implements Sleak::RenderEngine::RenderContext.

Definition at line 427 of file OpenGLRenderer.cpp.

◆ BindTexture()

void Sleak::RenderEngine::OpenGLRenderer::BindTexture ( RefPtr< Sleak::Texture > texture,
uint32_t slot = 0 )
overridevirtual

Reimplemented from Sleak::RenderEngine::RenderContext.

Definition at line 336 of file OpenGLRenderer.cpp.

◆ BindVertexBuffer()

void Sleak::RenderEngine::OpenGLRenderer::BindVertexBuffer ( RefPtr< BufferBase > buffer,
uint32_t slot = 0 )
overridevirtual

Implements Sleak::RenderEngine::RenderContext.

Definition at line 341 of file OpenGLRenderer.cpp.

◆ Cleanup()

void Sleak::RenderEngine::OpenGLRenderer::Cleanup ( )
overridevirtual

Implements Sleak::RenderEngine::Renderer.

Definition at line 190 of file OpenGLRenderer.cpp.

◆ ClearDepthStencil()

void Sleak::RenderEngine::OpenGLRenderer::ClearDepthStencil ( bool clearDepth,
bool clearStencil,
float depth,
uint8_t stencil )
overridevirtual

Implements Sleak::RenderEngine::RenderContext.

Definition at line 296 of file OpenGLRenderer.cpp.

◆ ClearRenderTarget()

void Sleak::RenderEngine::OpenGLRenderer::ClearRenderTarget ( float r,
float g,
float b,
float a )
overridevirtual

Implements Sleak::RenderEngine::RenderContext.

Definition at line 290 of file OpenGLRenderer.cpp.

◆ CreateBuffer()

BufferBase * Sleak::RenderEngine::OpenGLRenderer::CreateBuffer ( BufferType Type,
uint32_t size,
void * data )
overridevirtual

Allocates a backend buffer, optionally seeded with initial data.

Implements Sleak::RenderEngine::RenderContext.

Definition at line 479 of file OpenGLRenderer.cpp.

◆ CreateCubemapTexture()

Texture * Sleak::RenderEngine::OpenGLRenderer::CreateCubemapTexture ( const std::array< std::string, 6 > & facePaths)

Loads a cubemap from six face image paths.

Definition at line 613 of file OpenGLRenderer.cpp.

◆ CreateCubemapTextureFromPanorama()

Texture * Sleak::RenderEngine::OpenGLRenderer::CreateCubemapTextureFromPanorama ( const std::string & panoramaPath)

Loads a cubemap by converting a single equirectangular panorama.

Definition at line 622 of file OpenGLRenderer.cpp.

◆ CreateImGUI()

bool Sleak::RenderEngine::OpenGLRenderer::CreateImGUI ( )
overridevirtual

Initializes ImGui integration for this backend.

Implements Sleak::RenderEngine::Renderer.

Definition at line 631 of file OpenGLRenderer.cpp.

◆ CreateShader()

Shader * Sleak::RenderEngine::OpenGLRenderer::CreateShader ( const std::string & shaderSource)
overridevirtual

Compiles a shader program from source or a source-file path.

Implements Sleak::RenderEngine::RenderContext.

Definition at line 489 of file OpenGLRenderer.cpp.

◆ CreateTexture()

Texture * Sleak::RenderEngine::OpenGLRenderer::CreateTexture ( const std::string & TexturePath)
overridevirtual

Loads a texture from disk.

Implements Sleak::RenderEngine::RenderContext.

Definition at line 498 of file OpenGLRenderer.cpp.

◆ CreateTextureFromData()

Texture * Sleak::RenderEngine::OpenGLRenderer::CreateTextureFromData ( uint32_t width,
uint32_t height,
void * data )
overridevirtual

Creates a texture from an in-memory pixel buffer.

Implements Sleak::RenderEngine::RenderContext.

Definition at line 507 of file OpenGLRenderer.cpp.

◆ Draw()

void Sleak::RenderEngine::OpenGLRenderer::Draw ( uint32_t vertexCount)
overridevirtual

Non-indexed draw from the currently bound vertex buffer.

Implements Sleak::RenderEngine::RenderContext.

Definition at line 231 of file OpenGLRenderer.cpp.

◆ DrawIndexed()

void Sleak::RenderEngine::OpenGLRenderer::DrawIndexed ( uint32_t indexCount)
overridevirtual

Indexed draw from the currently bound vertex/index buffers.

Implements Sleak::RenderEngine::RenderContext.

Definition at line 238 of file OpenGLRenderer.cpp.

◆ DrawIndexedInstance()

void Sleak::RenderEngine::OpenGLRenderer::DrawIndexedInstance ( uint32_t instanceCount,
uint32_t indexPerInstance )
overridevirtual

Indexed instanced draw.

Implements Sleak::RenderEngine::RenderContext.

Definition at line 254 of file OpenGLRenderer.cpp.

◆ DrawInstance()

void Sleak::RenderEngine::OpenGLRenderer::DrawInstance ( uint32_t instanceCount,
uint32_t vertexPerInstance )
overridevirtual

Non-indexed instanced draw.

Implements Sleak::RenderEngine::RenderContext.

Definition at line 245 of file OpenGLRenderer.cpp.

◆ EndDebugLinePass()

void Sleak::RenderEngine::OpenGLRenderer::EndDebugLinePass ( )
overridevirtual

Reimplemented from Sleak::RenderEngine::RenderContext.

Definition at line 267 of file OpenGLRenderer.cpp.

◆ EndRender()

void Sleak::RenderEngine::OpenGLRenderer::EndRender ( )
overridevirtual

Submits recorded commands and presents the frame.

Implements Sleak::RenderEngine::Renderer.

Definition at line 165 of file OpenGLRenderer.cpp.

◆ GetContext()

virtual RenderContext * Sleak::RenderEngine::OpenGLRenderer::GetContext ( )
inlineoverridevirtual

Returns the backend's command-recording interface.

Implements Sleak::RenderEngine::Renderer.

Definition at line 40 of file OpenGLRenderer.hpp.

◆ GetFeatureCaps()

virtual uint32_t Sleak::RenderEngine::OpenGLRenderer::GetFeatureCaps ( ) const
inlineoverridevirtual

Feature capability mask; backends override with the audited truth.

Reimplemented from Sleak::RenderEngine::Renderer.

Definition at line 29 of file OpenGLRenderer.hpp.

◆ Initialize()

bool Sleak::RenderEngine::OpenGLRenderer::Initialize ( )
overridevirtual

Creates the device, swapchain, and backend resources.

Implements Sleak::RenderEngine::Renderer.

Definition at line 55 of file OpenGLRenderer.cpp.

◆ Resize()

void Sleak::RenderEngine::OpenGLRenderer::Resize ( uint32_t width,
uint32_t height )
overridevirtual

Recreates swapchain-dependent resources for a new surface size.

Implements Sleak::RenderEngine::Renderer.

Definition at line 218 of file OpenGLRenderer.cpp.

◆ SetCullEnabled()

void Sleak::RenderEngine::OpenGLRenderer::SetCullEnabled ( bool enabled)
overridevirtual

Reimplemented from Sleak::RenderEngine::RenderContext.

Definition at line 329 of file OpenGLRenderer.cpp.

◆ SetDepthCompare()

void Sleak::RenderEngine::OpenGLRenderer::SetDepthCompare ( DepthCompare compare)
overridevirtual

Reimplemented from Sleak::RenderEngine::RenderContext.

Definition at line 314 of file OpenGLRenderer.cpp.

◆ SetDepthWrite()

void Sleak::RenderEngine::OpenGLRenderer::SetDepthWrite ( bool enabled)
overridevirtual

Reimplemented from Sleak::RenderEngine::RenderContext.

Definition at line 310 of file OpenGLRenderer.cpp.

◆ SetRenderFace()

void Sleak::RenderEngine::OpenGLRenderer::SetRenderFace ( RenderFace face)
overridevirtual

Implements Sleak::RenderEngine::RenderContext.

Definition at line 271 of file OpenGLRenderer.cpp.

◆ SetRenderMode()

void Sleak::RenderEngine::OpenGLRenderer::SetRenderMode ( RenderMode mode)
overridevirtual

Implements Sleak::RenderEngine::RenderContext.

Definition at line 276 of file OpenGLRenderer.cpp.

◆ SetViewport()

void Sleak::RenderEngine::OpenGLRenderer::SetViewport ( float x,
float y,
float width,
float height,
float minDepth = 0.0f,
float maxDepth = 1.0f )
overridevirtual

Sets the active viewport rect and depth range in pixel/NDC units.

Implements Sleak::RenderEngine::RenderContext.

Definition at line 281 of file OpenGLRenderer.cpp.