Skip to content

An exploration into GPU rendering with OpenGL, starting from window creation and context setup to advanced real-time techniques. This project builds a foundation in modern graphics programming and may grow into a full renderer, game engine, or visual sandbox.

RushikeshIche/GPU-Renderer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GPU Renderer

A exploration into the world of GPU rendering using OpenGL — from the fundamentals of window creation and context management, to advanced real-time rendering techniques.

This project serves as a foundation for learning and experimenting with modern graphics programming concepts.
Over time, it may evolve into a full-fledged rendering engine, game framework, or a playground for visual experiments.


Project Goals

  • Understand how the GPU pipeline works.
  • Learn to set up and manage OpenGL contexts with GLFW.
  • Use GLAD to load modern OpenGL functions.
  • Explore the essentials of shaders, textures, buffers, and framebuffers.
  • Build toward real-time rendering features such as:
    • Lighting & materials
    • Post-processing effects
    • Physically based rendering (PBR)
    • Scene management
    • Deferred rendering
    • GPU compute techniques

🧩 Structure Overview


GPU-Renderer/
├─ include/        # Header files (GLAD, GLFW, etc.)
├─ lib/            # Linked libraries
├─ src/            # Source code (main.cpp, glad.c, etc.)
├─ run/            # Build & run environment (build scripts, README, executables)
├─ .vscode/        # VS Code tasks and launch configurations
└─ README.md       # Project overview (this file)


⚙️ Tech Stack

  • Language: C++17
  • Graphics API: OpenGL 3.3 Core Profile
  • Libraries:
    • GLFW – window/context management
    • GLAD – OpenGL function loader
  • Tools:
    • MinGW / MSYS2 toolchain
    • Visual Studio Code (for development & debugging)

Setup and Run - Setup Docs

🚀 Learning Roadmap

  1. Initialization
    • Setting up OpenGL, GLFW, and GLAD
    • Understanding the rendering loop
  2. Drawing Basics
    • Buffers (VBO, VAO, EBO)
    • Simple shaders
    • Triangle rendering
  3. Lighting & Materials
    • Ambient, diffuse, and specular lighting
    • Normal mapping and Phong shading
  4. Textures & Models
    • Texture mapping and image loading
    • OBJ/GLTF model rendering
  5. Advanced Rendering
    • Framebuffers and post-processing
    • Shadow mapping
    • Environment maps
    • Deferred rendering
  6. Beyond Rasterization
    • Compute shaders
    • GPU particles
    • Real-time global illumination experiments

🧩 Future Vision

This repository is designed to grow organically — from a minimal OpenGL setup into a modular renderer capable of powering small games, visualizers, or GPU-based simulations.

The goal isn’t just to render graphics, but to understand every layer of the process — how data flows from CPU to GPU, how shaders transform geometry, and how real-time graphics engines are built from the ground up.


Current Progress

  • ✅ Window creation with GLFW
  • ✅ OpenGL context initialization via GLAD
  • ⏳ Next step: rendering primitives and learning about VAOs/VBOs

Inspiration

  • OpenGL SuperBible
  • LearnOpenGL.com
  • The Cherno’s “Game Engine” series
  • Real-Time Rendering (4th Edition)

🧰 Contributing

This is an educational and experimental project — contributions, discussions, and suggestions for learning resources are always welcome.


📜 License

This project is open-source and free for learning, modification, and experimentation.


"The best way to learn graphics programming is to build your own renderer, one line of code at a time."

About

An exploration into GPU rendering with OpenGL, starting from window creation and context setup to advanced real-time techniques. This project builds a foundation in modern graphics programming and may grow into a full renderer, game engine, or visual sandbox.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published