CGL (C Graphics Library) is a multipurpose library mainly for recreational coding / demoscenes / proptotyping / small games / experementation. This has a lot of utilities for graphics. And best of all all of it is inside a single header file cgl.h
. Also CGL is made purely in C but is also compatible with C++.
NOTE: Do not think that header only means its going to increase compile time as the implementation needs be enabled only for 1 file using #define CGL_IMPLEMENTATION
-
Windowing library
- This windowing library is primarily a wrapper GLFW along with a few extra functionalities. For example in case you are using some library like
nuklear
for gui it will mess up allglfw
callbacks so with CGL you can restore the CGL callbacks with a call toCGL_window_resecure_callbacks
- This windowing library is primarily a wrapper GLFW along with a few extra functionalities. For example in case you are using some library like
-
Utility functionalities
- Reading/Writing files
- Random float/int/bool/vec2/vec3/color generation
- TODO: add more
-
Data structures
- List(dynamic array) + Stack (implemented together)
- Hashtable (TODO)
-
Cross platform threading
- Threads
- Mutex
- Condition Variables (TODO)
- NOTE: Implmented using
Win32 Threads
on Windows andpthread
on linux. (on linux you need to linkpthread
to build)
-
Math library
- vec2/vec3/vec4
- mat3/mat4
- add/sub/mul/div/scale/length/normalize/lerm/min/max/equal for vec2/vec3/vec4
- rotate_x/rotate_y/rotate_z for vec3
- scale/translate/rotate_x/rotate_y/rotate_z/add/sub/mul for mat4
- perspective for mat4
- transpose for mat4/ (mat3 TODO)
- look_at matrix
- NOTE: Most of math functions are implemented via macros so wil be totally inlined and quite fast without any unnecessary function calls
-
High Level OpenGL API for
- Texture (2D / 2D Array) (3D & Cubemap TODO)
- Framebuffers
- SSBO (Shader Storge Buffer Object)
- Shaders (Geometry shader TODO)
-
CGL Mesh API
- CGL has a higl level api for handling meshes
- 2 types of meshes are there
- CPU mesh -> stores the data also used for mesh operations like
- generate triangle
- generate quad
- load obj (beta)
- generate cube
- calculate normals (TODO)
- GPU mesh -> the pointer to the data stored on GPU side (internally handles the Vertex buffer, Index buffer, Vertex Array) and can used for
- render
- render instanced
- render wireframe
- reander wireframe instanced
- CPU mesh -> stores the data also used for mesh operations like
-
CGL camera
- CGL provides a proper camera abstraction
- Perspective & Orthographic
- It internally handles all matrix calculations (just input the position and rotation)
- Auto calculates the Up, Right, Front vectors
-
Phong Renderer (Optional)
- You can disable it via
#define CGL_EXCLUDE_PHONG_RENDERER
- It has:
- Phone Pipeline -> it is the pipeline holding shader data and global engine data. Options available are
- enable/disable blinn correction
- enable/disable depth test
- enable/disable gamma correction
- setup ambient lighting
- add/remove lights
- Phong Light -> It can be of 3 types:
- Directional -> it takes (direction, color, intensity)
- Point -> it takes (position, color, itensity, constant, linear, quadratic)
- Spot (TODO)
- Phong Material
- dissuse texture/color
- specular texture/color
- shininess
- normal maps (TODO)
- Phone Pipeline -> it is the pipeline holding shader data and global engine data. Options available are
- You can disable it via
-
Tilemap Renderer (Optional)
- You can disable it with
#define CGL_EXCLUDE_TILEMAP_RENDERER
- Renders a NxN tilemap with a single line of code
- Each tile can have following states
- clear (transparent or disabled)
- solid color
- texture -> Texture can be supplied via:
- texture 2d array -> you need to provide depth for each tile
- tileset or texture atlas -> you have to provide bounds (normalized 0.0-1.0) of the area of the alas to be used on tile
- NOTE: this tile render renders only 4 vertices and has only 1 draw call (not a instanced call so its quite fast
- You can disable it with
- cubemaps and skybox + skysphere
- procedural sky (refer here )
- text rendering (static and dynamic) (optional) (requires stb_truetype)
- PBR renderer (optional)
- IBL (optional)
- GLFW
- Glad