Skip to content

tonadr1022/opengl_modern

Repository files navigation

OpenGL Renderer 2 (4.6 AZDO edition)

Rather than using glDrawElements as I did in my previous iteration, my goal with this rendering engine has been to increase performance while desiging a more data oriented architecture. I use the Entt entity component system to manage scene data, rather than my previous object oriented approach that turned into a mess. Another improvement with this renderer has been avoiding premature abstraction with OpenGL concepts and decoupling the renderer from the rest of the app as much as possible, making iteration much simpler than the previous edition. The disorganization and object oriented nature of my previous renderer ultimately prevented me from implementing more techniques, and I realized starting fresh would allow me to make faster progress.

Features

  • Batched rendering using glMultiDrawElementsIndirect
  • Bindless Textures
  • In Progress: PBR

TODO

  • Anti-aliasing: MSAA/TSAA
  • Post-processing
  • Shadow pass
  • Deferred rendering

Dependencies

I use Vcpkg for dependency management, and if Vcpkg is not installed locally when building with CMake, it is fetched and bootstrapped, installing these dependencies local to the repository.

  • GLFW - cross platform window/input
  • GLM - math
  • Glew - OpenGL functions
  • Entt - Fast Entity component system
  • Tracy -Profiler (requires local install to use)
  • ImGui - UI
  • Spdlog - Logging
  • Assimp - model loading

References

random notes:

  • pbr: null texture pointers that I was too dumb to notice due to moving unique pointer when amplacing into unordered map.
  • normal mapping: avoid sending bitangents to the vertex shader reduces sponza memory cost

test

About

OpenGL 4.6 Renderer

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published