# fvlvte/czysta-c-gjerka architecture

> Architecture diagram of the GitHub repository fvlvte/czysta-c-gjerka, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/fvlvte/czysta-c-gjerka
- Repository: https://github.com/fvlvte/czysta-c-gjerka

## Overview

Gjerka is a small Windows/OpenGL game runtime with a menu-driven view loop, a tile-world renderer, and gameplay/editor code in the core. The principal runtime path creates a window and menu, processes window events, updates the active view, and renders frames; gameplay and tile editing are additional domain paths implemented in the core. Bitmap loading, texture upload, and font rendering form the resource/rendering layer. No README is present, and several modules are represented only by the tree, so links to their behavior are omitted where the sampled code does not establish them.

Main entry points: [`gjerka/core.c`](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/core.c) (Core loop and handlers), [`gjerka/render.opengl.c`](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/render.opengl.c) (OpenGL renderer), [`gjerka/window.win32.c`](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/window.win32.c) (Window and events), [`gjerka/view.c`](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/view.c) (View manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Runtime and views"]
  node_core["Core loop and handlers<br/>[core.c]"]
  node_viewmgr["View manager<br/>[view.c]"]
  node_mainmenu["Main menu view<br/>[view_mainMenu.c]"]
end

subgraph group_domain["Game and world"]
  node_game["Game state<br/>[game.h]"]
  node_world["Tile world<br/>[world.c]"]
  node_editor["Editor state<br/>[core.c]"]
end

subgraph group_rendering["Rendering"]
  node_renderer["OpenGL renderer<br/>[render.opengl.c]"]
  node_font["Font manager<br/>[font.c]"]
end

subgraph group_resources["Assets and platform"]
  node_window["Window and events<br/>[window.win32.c]"]
  node_fontdata["Font glyph data<br/>[font_0_64.c]"]
  node_assetmgr["Asset manager<br/>[assetManager.c]"]
  node_image["Bitmap loader<br/>[image.c]"]
  node_system["System services<br/>[system.win32.c]"]
  node_worldbitmap["World bitmap<br/>[aha.bmp]"]
  node_fontbitmap["Font bitmap<br/>[1f32_0.bmp]"]
end

node_user(("Player / user"))
node_windows["Windows OS"]
node_opengl["OpenGL"]

node_user -->|"sends input"| node_window
node_windows -->|"delivers events"| node_window
node_core -->|"creates window"| node_window
node_core -->|"creates manager"| node_viewmgr
node_core -->|"creates view"| node_mainmenu
node_core -->|"sets active view"| node_viewmgr
node_core -->|"binds window"| node_viewmgr
node_core -->|"updates events"| node_window
node_window -->|"stores input"| node_core
node_core -->|"updates view"| node_viewmgr
node_viewmgr -->|"draws callback"| node_mainmenu
node_viewmgr -->|"begins and ends frame"| node_renderer
node_window -->|"creates and polls"| node_windows
node_window -->|"swaps buffers"| node_renderer
node_renderer -->|"issues draw calls"| node_opengl
node_renderer -->|"initializes fonts"| node_font
node_renderer -->|"uses glyph data"| node_fontdata
node_core -->|"updates movement"| node_game
node_core -->|"renders world"| node_world
node_core -->|"draws entities and text"| node_renderer
node_core -->|"handles tile selection"| node_editor
node_core -->|"renders editor"| node_world
node_core -->|"fetches UI asset"| node_assetmgr
node_assetmgr -->|"loads bitmap"| node_image
node_assetmgr -->|"uploads texture"| node_renderer
node_world -->|"loads bitmap"| node_image
node_world -->|"uploads and draws tiles"| node_renderer
node_world -->|"loads image data"| node_worldbitmap
node_image -->|"reads file"| node_system
node_font -->|"loads font page"| node_fontbitmap
node_font -->|"loads bitmap"| node_image
node_font -->|"uses textures"| node_renderer
node_renderer -->|"flushes frame"| node_window
node_window -->|"uses timing and memory"| node_system
node_core -->|"uses timing and memory"| node_system

click node_core "https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/core.c"
click node_viewmgr "https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/view.c"
click node_mainmenu "https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/view_mainMenu.c"
click node_window "https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/window.win32.c"
click node_game "https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/game.h"
click node_world "https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/world.c"
click node_editor "https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/core.c"
click node_renderer "https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/render.opengl.c"
click node_font "https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/font.c"
click node_fontdata "https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/font_0_64.c"
click node_assetmgr "https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/assetManager.c"
click node_image "https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/image.c"
click node_system "https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/system.win32.c"
click node_worldbitmap "https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/asset/aha.bmp"
click node_fontbitmap "https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/asset/fonts/1f32_0.bmp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_core,node_viewmgr,node_mainmenu,node_user toneBlue
class node_game,node_world,node_editor toneAmber
class node_renderer,node_font toneMint
class node_window,node_fontdata,node_assetmgr,node_image,node_system,node_worldbitmap,node_fontbitmap toneRose
class node_windows,node_opengl toneIndigo
```

## Components

### Runtime and views

- [Core loop and handlers](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/core.c): `gjerka/core.c`
- [View manager](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/view.c): `gjerka/view.c`
- [Main menu view](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/view_mainMenu.c): `gjerka/view_mainMenu.c`

### Game and world

- [Game state](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/game.h): `gjerka/game.h`
- [Tile world](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/world.c): `gjerka/world.c`
- [Editor state](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/core.c): `gjerka/core.c`

### Rendering

- [OpenGL renderer](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/render.opengl.c): `gjerka/render.opengl.c`
- [Font manager](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/font.c): `gjerka/font.c`

### Assets and platform

- [Window and events](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/window.win32.c): `gjerka/window.win32.c`
- [Font glyph data](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/font_0_64.c): `gjerka/font_0_64.c`
- [Asset manager](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/assetManager.c): `gjerka/assetManager.c`
- [Bitmap loader](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/image.c): `gjerka/image.c`
- [System services](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/system.win32.c): `gjerka/system.win32.c`
- [World bitmap](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/asset/aha.bmp): `gjerka/asset/aha.bmp`
- [Font bitmap](https://github.com/fvlvte/czysta-c-gjerka/blob/master/gjerka/asset/fonts/1f32_0.bmp): `gjerka/asset/fonts/1f32_0.bmp`

### Other components

- **Player / user**
- **Windows OS**
- **OpenGL**

## Connections

- Player / user → Window and events: sends input
- Windows OS → Window and events: delivers events
- Core loop and handlers → Window and events: creates window
- Core loop and handlers → View manager: creates manager
- Core loop and handlers → Main menu view: creates view
- Core loop and handlers → View manager: sets active view
- Core loop and handlers → View manager: binds window
- Core loop and handlers → Window and events: updates events
- Window and events → Core loop and handlers: stores input
- Core loop and handlers → View manager: updates view
- View manager → Main menu view: draws callback
- View manager → OpenGL renderer: begins and ends frame
- Window and events → Windows OS: creates and polls
- Window and events → OpenGL renderer: swaps buffers
- OpenGL renderer → OpenGL: issues draw calls
- OpenGL renderer → Font manager: initializes fonts
- OpenGL renderer → Font glyph data: uses glyph data
- Core loop and handlers → Game state: updates movement
- Core loop and handlers → Tile world: renders world
- Core loop and handlers → OpenGL renderer: draws entities and text
- Core loop and handlers → Editor state: handles tile selection
- Core loop and handlers → Tile world: renders editor
- Core loop and handlers → Asset manager: fetches UI asset
- Asset manager → Bitmap loader: loads bitmap
- Asset manager → OpenGL renderer: uploads texture
- Tile world → Bitmap loader: loads bitmap
- Tile world → OpenGL renderer: uploads and draws tiles
- Tile world → World bitmap: loads image data
- Bitmap loader → System services: reads file
- Font manager → Font bitmap: loads font page
- Font manager → Bitmap loader: loads bitmap
- Font manager → OpenGL renderer: uses textures
- OpenGL renderer → Window and events: flushes frame
- Window and events → System services: uses timing and memory
- Core loop and handlers → System services: uses timing and memory
