Skip to content

OpenGL rendering practice. It's pronounced "glen jin".

Notifications You must be signed in to change notification settings

Kevinsomnia/GLenjhin

Repository files navigation

GLenjhin

Some C++/OpenGL rendering practice. It's pronounced "glen jin".

Compiled with MSVC v143, C++17. Using OpenGL 4.6 Core. The rendering pipeline is very object-oriented, which should make the rendering pipeline flexible at the cost of some performance.

It's recommended to compile in Release mode for the fastest performance.

Supports Windows 64-bit only.

render

Dependencies

Features

  • Lighting
    • Physically-Based Rendering (PBR): Lambertian (diffuse term) / GGX + Cook-Torrance (specular term) / Schlick (fresnel approximation)
      • Albedo, Normalmaps, MSA (Metallic/Smoothness/AO), Parallax Occlusion Mapping
    • Real-time shadows with 4x4 PCF (soft filtering)
    • Directional lights
  • HDR and post processing effects pipeline
    • FXAA (Fast Approximate Anti-Aliasing)
    • Motion Blur (via motion vectors)
    • Deferred SSAO (Screen Space Ambient Occlusion)
    • Bloom
    • Sun Shafts (God Rays)
    • Tonemapping
    • Fullscreen Gaussian blur
    • Fog
  • Shaders
    • Skybox rendered from fullscreen triangle via equirectangular projection
  • I/O
    • Custom memory/binary stream implementation with bit-level serialization/deserialization support
    • Custom image library
      • PNG support (WIP; RGB/RGBA, 8-bit support only)
      • Custom DEFLATE/zlib implementation
    • Custom asset cache implementation powered by xxHash. Subsequent app startups will be faster if cache is present.
    • Model import pipeline powered by Assimp
  • Primitive meshes generated at runtime (mostly trigonometry): cubes, spheres, capsules, cylinders, quads