Skip to content
Snippets Groups Projects
user avatar
Patric Schmitz authored
47213f7a
History

Glow Extras

Companion library for glow with convenience and helper functions. Separated into mostly independent sub-libraries.

Libraries

glfw

Efficiently get a Glow application up and running. Features:

  • Context and window creation
  • Input handling
  • Main loop
  • Basic profiling
  • Optional default pipeline and camera setup

Noteworthy classes:

  • GlfwApp - All-in-one Glow application
  • GlfwContext - Used by GlfwApp, encapsulates a Window and its OpenGL context

Dependencies: aion

pipeline

Pre-built, configurable clustered forward renderer. Read the guide for more. Features:

  • Temporal Anti-Aliasing
  • Tube Lights, GPU clustering
  • Cascaded shadow mapping, PCF
  • SSAO
  • Order-independent transparency
  • Bloom, Postprocessing

Noteworthy classes:

  • RenderPipeline - Encapsulates every pipeline stage, used to interface with the pipeline
  • RenderScene - POD-struct with all runtime-configurable pipeline settings

camera

A camera, various controllers and several utility functions. Used by glfw and pipeline. Features:

  • Camera matrix calculation
  • WASD, mouselook and target orbit controllers
  • Optional motion smoothing

Noteworthy classes:

  • Camera - The camera
  • SmoothedCamera - Like Camera but with smoothed movement, intercompatible

geometry

Template-heavy library for generating simple geometry (VertexArrays in particular)

Noteworthy classes: Quad, Cube, UVSphere, FullscreenTriangle

assimp

Import mesh files to create VertexArrays.

Dependency: assimp

timing

Timing and performance profiling.

Noteworthy classes:

  • CpuTimer - High-precision, platform-independent CPU timer
  • GpuTimer - High-precision, non-stalling GPU timer

Dependencies: aion

Smaller libraries

  • colors - Color utilities
  • debugging - GUI OpenGL error log, line drawing helper
  • material - PBR (GGX) shader helpers, IBL precalculation and utilities
  • input - Input handling, used by GlfwApp
  • shader - Miscellaneous shader helpers, WIP
  • viewer - Polymesh Viewer, WIP

Usage

Add git submodule

git submodule add https://www.graphics.rwth-aachen.de:9000/Glow/glow-extras.git
git submodule update --init --recursive

Add to cmake (be sure to do that after glow)

add_subdirectory(path/to/glow-extras)

Choose which libraries you need

# all
target_link_libraries(YourLib PUBLIC glow-extras)

# .. or single ones
target_link_libraries(YourLib PUBLIC glow-extras-camera)
target_link_libraries(YourLib PUBLIC glow-extras-geometry)
target_link_libraries(YourLib PUBLIC glow-extras-pipeline)

CAUTION: If you use extras that require dependencies, you have to add them manually before. E.g. for glow-extras-assimp:

add_subdirectory(path/to/assimp) # https://graphics.rwth-aachen.de:9000/ptrettner/assimp-lean
add_subdirectory(path/to/glow-extras) # AFTER dependencies

target_link_libraries(YourLib PUBLIC glow-extras-assimp) # internally depends on assimp

glow-extras will disable (and tell you) all sub-libs that were disabled due to missing dependencies.