Skip to content

snej55/opengl_engine

Repository files navigation

OpenGL engine

time

An OpenGL rendering system to use for my projects, made largely to replace my old OpenGL wrapper.

screenshot


Installation instructions

Important

CMake and Ninja are required to be installed, as well as a working c++ compiler.

  1. Clone the repo:
git clone --depth 1 https://github.com/snej55/opengl_engine
cd opengl_engine
  1. Build:
# generate cmake files
cmake -S . -B build -G Ninja
# build it
cmake --build build/ -j4

Note

Certain libraries will need to be installed via your distro's package manager in order to link the binary successfully (mainly glfw3 and assimp). Depending on your distro, you may need to install additional opengl libs (e.g mesa-libGLU for fedora).

  1. Run:
# either run it automatically via the build script:
chmod +x ./run.sh
./run.sh

# or do it manually (recommended)
cd build
./main

Note

Please make sure to run the compiled binary from the build folder, so that it has access to the required assets (shaders, models, etc).


To do:

Target:

Make a basic OpenGL rendering framework that can handle PBR lighting & stuff, as well as basic game engine stuff (e.g. physics, audio, window management, level-editor, multi-platform exports)

v2:

  • Set up engine object type
  • Set up engine manager
  • Window management
  • IOHandler
  • Main loop
  • Clock
  • Set up arena
  • Shaders
  • Shader manager
  • Automatic shader loading
  • Camera
  • Set up G-Buffer (PBR data)
  • Deffered shading (PBR)
  • Integrate forward renderer alongside deffered shading
  • Extend deffered shading to deffered lighting (MSAA & blending)
  • Set up renderer class
  • Set up render queue
  • Config file loading?
  • README
  • Font rendering
  • UI framebuffer
  • Texture manager
  • Texture loading and rendering
  • Screen coordinate rendering
  • Rect rendering
  • Draw a cube
  • Add timers
  • Add fps counter
  • Default shaders
  • Post processor with framebuffers
  • Blinn-phong lighting
  • Ambient lighting (SSAO)
  • PBR lighting
  • PBR material rendering
  • PBR materials on models
  • Add support for embedded materials in models
  • Model loading
  • Mesh class
  • Model manager
  • Model animations (skeletal)
  • Colour functions (lerp, different blending functions)
  • Box2D vs Chipmunk physics
  • Tesselation
  • Terrain generator
  • Level editor
  • Vim-style keybindings for level editor
  • Particles
  • ImGui ui
  • Audio loading (SoLoud?)
  • Asset manager singleton
  • 2D rendering
  • 2D tile map
  • 2D particles
  • 2D basic physics
  • WebAssembly builds (emscripten)
  • Separate Windowing api (SDL vs GLFW)
  • Vulkan?

v1:

  • Set up engine objects
  • Add app component
  • Add window component
  • Add IOHandler
  • Fix initialization and termination
  • Add logs
  • Give engine objects names
  • Tracking
  • Add clock object
  • Finish setting up main loop
  • Set up renderer class
  • Draw a cube
  • Add timers
  • REFACTOR!
  • Memory arena
  • Uniform buffer object for render matrices
  • Add camera ..
  • Shader uniforms
  • Add line draw mode
  • Geometry shader option
  • Default shaders
  • Shader templates
  • Custom shaders
  • Basic lighting shaders (Phong & Blinn-Phong)
  • Point lights, directional lights, spot-lights
  • Model loading with assimp
  • Material system
  • Render queue
  • Postprocessing (framebuffer system)
  • Shadows
  • PBR
  • Model animations (Bones system)
  • Physics system
  • Physics mesh generation
  • Texture loading
  • Texture rendering
  • Audio loading
  • Audio playback
  • Scene system
  • Objects
  • Items
  • Entities
  • Item manager
  • Entity manager
  • Level editor
  • Level loading
  • World data object
  • Octrees for world map physics data
  • UI
  • FPS Counter
  • Debug popup
  • Fonts
  • Screen coordinates rendering
  • 2D mode
  • Loading assets splash screen
  • Proper fullscreen
  • Add README
  • Add README to media
  • Add vfx demos + screenshots

About

OpenGL rendering framework

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published