A C++ OpenGL rendering library – pronounced "gee-o-kuh-ro". Uses the forward shading technique and targets the OpenGL 3.3 Core profile.
This project is my journey following the tutorials and guides from Learn OpenGL, along with a slew of other online and print guides, and creating a high-level wrapper around the rendering software.
- Model Loading
- PBR Materials, IBL
- HDR Pipeline
- Fast VFC
For a full feature list and roadmap of planned features, see the list below.
// start the rendering engine
gyo::Engine engine(1920, 1080);
if(!engine.IsRunning()) {
std::cerr << "Gyokuro failed to start!" << std::endl;
return 1;
}
// create our scene
SceneController& sc = engine.sc();
sc.SetEnvironment("brown_photostudio_2k.hdr");
glm::vec3 spotLightColor(1.0f, 0.2f, 0.2f);
LightNode* spotLight = new LightNode(new SpotLight(spotLightColor * 6.0f, 40.0f));
spotLight->Translate(2, 1, -5);
spotLight->Rotate(45, -15, 0);
sc.AddNode(spotLight);
ModelNode* helmet = new ModelNode(Resources::GetModel("DamagedHelmet.glb", true));
sc.AddNode(helmet);
glm::vec3 rotationAxis(0.0f, 1.0f, 0.0f);
sc.AddUpdateFunction([helmet, rotationAxis](float dt) {
helmet->Rotate(dt * 15, rotationAxis);
});
// render the scene to the window
while(engine.IsRunning()) {
engine.Frame();
}For more examples, see the runnable projects in the samples folder.
- Camera
- Perspective/orthagraphic projections
- Free-look, fly camera
- Orbit camera
- 3D Primitives
- Quad
- Cube
- Sphere
- Torus
- Pyramid
- Shaders
- GLSL file loading
- #include ".glsl" support
- #define injection
- Camera matrices UBO
- Scene lighting UBO
- 2D Texture Loading
- Simple Lights
- Directional
- Point
- Spot
- Material Definitions
- Unlit (supports color map)
- Phong (supports diffuse, specular, and normal map)
- Utility Drawables
- Mesh normals/tangents/bitangents viewer (geom shader)
- AABB wireframe renderer
- Frustum wireframe renderer
- Skybox
- Cubemap
- HDR
- View Frustum Culling
- AABB based model culling
- P/N vertex LUT optimization
- Plane coherence optimization
- Scene bounding volume hierarchy
- AABB based model culling
- Blending
- Sorted transparency
- Additive
- Resource Caching
- Shaders
- Textures
- Cubemaps
- Fonts
- UI
- MSDF-based text rendering
- UI images/panels
- HDR
- Render buffer
- Reinhard tone mapping
- Gamma correction
- Model loading
- Separate model/texture file loading
- Embedded texture support (glb)
- PBR
- Material (supports albedo, normal, metallic/roughness, ao, & emission maps)
- Analytic lights
- IBL
- MSAA
- Image effects
- Shadows
- Computer Graphics Programming In OpenGL With C++
- Real-Time Rendering
- Game Engine Architecture
- Learn OpenGL
- 3D Game Engine Programming
- Optimized View Frustum Culling Algorithms for Bounding Boxes
- Fast Extraction of Viewing Frustum Planes from the WorldView-Projection Matrix
- Other Graphics Programming Papers
- "Dice.fbx" 3D model and textures by Josh Cook.
- "Battle Damaged Sci-fi Helmet - PBR" 3D model by "leonardo-carrion" on Sketchfab here.
- "Cerberus" revolver 3D model by Andrew Maximov here.
- PBR Textures and HDRIs from freepbr.com and polyhaven.com

