SleakEngine 0.1.0
C++23 multi-backend game engine
Loading...
Searching...
No Matches
Graphics Features

A tracker of notable real-time graphics features, the kind found in high-end shader packs and in large commercial engines, checked against what SleakEngine actually ships.

✓ green means implemented in SleakEngine and verified in the source tree. ✓ grey means not implemented. The notes column names the implementing file or class, and records which backends carry the feature when it is not all four.

Backend shorthand: VK (Vulkan), GL (OpenGL), DX11, DX12. Vulkan is the most complete backend; DX11 covers forward rendering with shadows and tonemapping, DX12 covers forward rendering with shadows.

Rendering paths

Status Feature SleakEngine notes
✓ Deferred shading VulkanDeferred.cpp GBuffer + lighting_pass.frag; GL path in OpenGLRenderer.cpp with gbuffer_gl / lighting_pass_gl
✓ Forward rendering Renderer::SetDeferredEnabled, default_shader variants on all four backends
✓ Forward transparent pass VulkanRenderer::BeginForwardTransparentPass, routed by RenderCommandQueue.cpp after lighting
✓ Forward+ / clustered shading -
✓ Visibility buffer -

Geometry

Status Feature SleakEngine notes
✓ Static mesh rendering MeshComponent, Sleak::MeshData
✓ Bulk static geometry batching Sleak::MeshBatch handle pool, BeginBatch / Draw / EndBatch
✓ Model import (FBX, glTF, OBJ) Sleak::ModelLoader, Assimp-backed, builds the GameObject tree
✓ Skeletal skinning Sleak::Skeleton (256 bones), skinned_shader variants, forward pass only
✓ Hardware instancing RenderContext::DrawInstance / DrawIndexedInstance on all four backends; instance data must come from gl_InstanceIndex, there is no per-instance attribute stream
✓ Custom / procedural vertex formats Sleak::VertexLayoutDesc + VertexFormatRegistry::Register, consumed by MeshBatch::CreateMesh
✓ Morph targets / blend shapes -
✓ Mesh LOD no LOD selection; LOD in the tree refers to texture mip levels only
✓ Hierarchical LOD (HLOD) -
✓ Tessellation no hull/domain or tessellation control/evaluation stages
✓ Mesh shaders -
✓ Virtualized geometry (Nanite class) -

Lighting

Status Feature SleakEngine notes
✓ Directional lights Sleak::DirectionalLight, shadow-casting light picked in LightManager::UpdateAndBind
✓ Point lights Sleak::PointLight, UE4-style inverse-square falloff in default_shader_gl.frag
✓ Spot lights Sleak::SpotLight, inner/outer cone smoothstep
✓ Physically based shading Cook-Torrance GGX + Smith + Fresnel-Schlick in lighting_pass.frag and default_shader_gl.frag
✓ Image-based lighting OpenGLIBL.cpp bakes irradiance, prefiltered specular, and the split-sum BRDF LUT; the Vulkan side (VulkanIBL.cpp) allocates 1x1 black stubs with no bake, so GL only
✓ Area lights Sleak::AreaLight packs GPU type 3, but no shader branches on it and it shades as a point light
✓ Baked lightmaps -
✓ Light probes / reflection captures -
✓ Dynamic global illumination (Lumen class) -
✓ Screen space global illumination -
✓ Distance field ambient occlusion -

Shadows

Status Feature SleakEngine notes
✓ Shadow mapping VulkanShadow.cpp, shadow_depth.vert, hardware comparison sampler
✓ Runtime shadow map resolution Renderer::SetShadowMapResolution, deferred apply through ApplyShadowResolutionChange
✓ PCF filtering 12-tap rotated Vogel disk with interleaved gradient noise, PCFFilter in lighting_pass.frag
✓ PCSS / contact hardening blocker search in default_shader.frag, default_shader_gl.frag, skinned_shader.frag; forward path only, deferred uses fixed-radius PCF
✓ Cascaded shadow maps single shadow frustum, no cascade split
✓ Virtual shadow maps -
✓ Ray traced shadows -
✓ Contact shadows (screen space) -
✓ Point / spot light shadows only the directional light casts

Screen space and post processing

Status Feature SleakEngine notes
✓ SSAO VulkanSSAO.cpp and ExecuteSSAOPass in OpenGLRenderer.cpp, hemisphere kernel from SSAOKernel.hpp, separate blur pass
✓ Screen space reflections VulkanSSR.cpp, ssr.frag; VK only
✓ Temporal anti-aliasing VulkanTAA.cpp, taa.frag, Halton sub-pixel jitter applied to the WVP push constant; VK only
✓ MSAA Renderer::SetMSAASampleCount, VK pipelines and GL m_msaaFBO; forward only, the deferred path silently forces 1 sample because a multisampled GBuffer is too expensive
✓ Bloom VulkanBloom.cpp, threshold + downsample + upsample + composite chain at half resolution; VK only
✓ Tone mapping ACES filmic (Narkowicz fit) in tonemap.frag, tonemap_gl.frag, tonemap.hlsl, tonemap_dx12.hlsl
✓ Exposure and gamma control PostProcessUBO, Renderer::SetExposure / SetGamma
✓ HDR render target CapHDRTarget, RGBA16F scene image through the lighting, bloom, and tonemap chain
✓ FXAA GraphicsConfig::fxaaEnabled exists but no backend reads it
✓ Upscaling (TSR / DLSS / FSR class) -
✓ Render scale GraphicsConfig::renderScale is declared but unread
✓ HDR display output (HDR10 / scRGB) swapchain selects VK_COLOR_SPACE_SRGB_NONLINEAR_KHR only
✓ Auto exposure / eye adaptation config fields only, no luminance histogram or reduction pass
✓ Color grading / LUT -
✓ Motion blur -
✓ Depth of field -
✓ Vignette config field only, unread
✓ Chromatic aberration -
✓ Film grain config field only, unread
✓ Lens flare -
✓ Velocity / motion vector buffer CapVelocity is declared but no backend produces one; TAA reprojects from dilated depth

Atmosphere and environment

Status Feature SleakEngine notes
✓ Cubemap skybox Sleak::Skybox six-face constructor, skybox.frag
✓ Equirectangular panorama sky SkyboxMode::Panorama
✓ Procedural gradient sky SkyboxMode::Gradient, three-color vertical blend
✓ Distance fog LightManager::SetFogDistances, ApplyFog in lighting_pass.frag
✓ Exponential height fog LightManager::SetHeightFogDensity / SetHeightFogFalloff, stacks with distance fog
✓ Physical sky / atmospheric scattering gradient sky only, no Rayleigh or Mie model
✓ Volumetric fog analytic fog only, no froxel volume
✓ Volumetric clouds -
✓ God rays / light shafts CapLightShaft and the lightShaft* config fields are declared, no backend implements the pass
✓ Water rendering game side; the engine supplies the transparent pass hook via transparentShaderStem
✓ Planar reflections -
✓ Rain and weather effects -
✓ Wind / foliage animation -

Materials and texturing

Status Feature SleakEngine notes
✓ Normal mapping TBN basis in gbuffer.frag with Z reconstruction for two-channel compressed normals
✓ Metallic / roughness workflow Sleak::Material factors and maps, packed into GBuffer RT1 and RT2
✓ Ambient occlusion maps texAO sampled in gbuffer.frag, combined with SSAO in the lighting pass
✓ Emissive maps texEmissive times emissiveFactor, HDR intensity
✓ Alpha cutout MaterialRenderMode::Cutout with SetAlphaCutoff
✓ Alpha-blended transparency MaterialRenderMode::Transparent, routed to the forward transparent pass
✓ Mipmap generation VulkanTexture::GenerateMipmaps blit chain, glGenerateMipmap on GL
✓ Parallax occlusion mapping -
✓ Subsurface scattering -
✓ Refraction / translucency alpha blending only, no scene-color refraction
✓ Deferred decals -
✓ Virtual texturing -
✓ Texture streaming textures upload whole at load time
✓ Texture atlasing game side
✓ Anisotropic filtering samplers use linear filtering without an anisotropy request

Ray tracing

Status Feature SleakEngine notes
✓ Ray traced reflections no acceleration structures in any backend
✓ Ray traced global illumination -
✓ Ray traced ambient occlusion -
✓ Ray traced shadows -
✓ Path tracing -

Performance and culling

Status Feature SleakEngine notes
✓ View frustum culling Sleak::CullingSystem::IsVisible, planes from Sleak::ViewFrustum
✓ CPU software occlusion culling CullingSystem.cpp rasterizes submitted occluder volumes into a low-res depth buffer
✓ Data-driven quality presets GraphicsConfig::Preset, applied in one shot by Application::ApplyGraphicsConfig
✓ Debug wireframe visualization Sleak::DebugLineRenderer lines, AABBs, and spheres
✓ GPU occlusion queries -
✓ GPU-driven rendering / indirect draw no indirect draw entry points on RenderContext

Particles and effects

Status Feature SleakEngine notes
✓ CPU particle system -
✓ GPU particle system -