# mansargs/raytracer-minirt architecture

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

- Interactive diagram: https://gitdiagram.com/mansargs/raytracer-minirt
- Repository: https://github.com/mansargs/raytracer-minirt

## Overview

miniRT parses a scene file into in-memory cameras, lights and geometric objects, loads optional texture assets, traces rays and displays the result in an interactive MLX window. The principal path is documented in README and explicit in main.c; sampled code confirms parsing dispatch, keyboard/mouse event actions and cleanup. The rendering, shading, texture loading and window subsystems are included from documented capabilities and source paths, but their internal call wiring was not sampled, so uncertain links are omitted.

Main entry points: [`srcs/main.c`](https://github.com/mansargs/raytracer-minirt/blob/master/srcs/main.c) (Application flow), [`srcs/drawing/events.c`](https://github.com/mansargs/raytracer-minirt/blob/master/srcs/drawing/events.c) (Input events), [`srcs/ray_tracing/ray_trace/ray_trace.c`](https://github.com/mansargs/raytracer-minirt/blob/master/srcs/ray_tracing/ray_trace/ray_trace.c) (Ray tracing), [`srcs/parsing/identifier.c`](https://github.com/mansargs/raytracer-minirt/blob/master/srcs/parsing/identifier.c) (Scene parser)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_scene["Scene input"]
  node_entry["Application flow<br/>[main.c]"]
  node_parser["Scene parser<br/>[identifier.c]"]
  node_elements["Element parsing"]
  node_validation["Input validation"]
  node_scene_data["Scene state<br/>[minirt.h]"]
end

subgraph group_trace["Ray rendering"]
  node_raygen["Ray generation<br/>[ray_generation.c]"]
  node_tracer["Ray tracing<br/>[ray_trace.c]"]
  node_intersections["Primitive intersections"]
  node_lighting["Blinn-Phong lighting"]
  node_textures["Texture mapping"]
end

subgraph group_interactive["Interactive display"]
  node_window["MLX window<br/>[window.c]"]
  node_render["Image rendering<br/>[render.c]"]
  node_events["Input events<br/>[events.c]"]
  node_checker["Checker toggles"]
end

subgraph group_core["Runtime support"]
  node_vectors["Dynamic vectors<br/>[vector.c]"]
  node_math["Vector mathematics"]
  node_cleanup["Scene cleanup<br/>[free.c]"]
end

node_user(("Renderer user"))
node_mlx["MLX display"]

node_user -->|"starts scene"| node_entry
node_entry -->|"parses file"| node_parser
node_parser -->|"validates values"| node_validation
node_parser -->|"dispatches records"| node_elements
node_elements -->|"populates scene"| node_scene_data
node_entry -->|"initializes"| node_scene_data
node_entry -->|"loads scene assets"| node_textures
node_entry -->|"generates rays"| node_raygen
node_entry -->|"renders image"| node_render
node_entry -->|"starts loop"| node_window
node_raygen -->|"traces pixels"| node_tracer
node_tracer -->|"tests primitives"| node_intersections
node_tracer -->|"computes shading"| node_lighting
node_tracer -->|"samples maps"| node_textures
node_render -->|"displays image"| node_mlx
node_window -->|"creates window"| node_mlx
node_window -->|"registers handlers"| node_events
node_events -->|"updates camera mode"| node_scene_data
node_events -->|"deactivates checker"| node_checker
node_events -->|"traces clicked pixel"| node_tracer
node_events -->|"handles input loop"| node_mlx
node_parser -->|"stores scene items"| node_vectors
node_elements -->|"appends records"| node_vectors
node_events -->|"moves camera"| node_math
node_entry -->|"frees scene"| node_cleanup
node_cleanup -->|"destroys texture images"| node_mlx

click node_entry "https://github.com/mansargs/raytracer-minirt/blob/master/srcs/main.c"
click node_parser "https://github.com/mansargs/raytracer-minirt/blob/master/srcs/parsing/identifier.c"
click node_elements "https://github.com/mansargs/raytracer-minirt/tree/master/srcs/parsing/elements"
click node_validation "https://github.com/mansargs/raytracer-minirt/tree/master/srcs/parsing/validation"
click node_scene_data "https://github.com/mansargs/raytracer-minirt/blob/master/hdrs/minirt.h"
click node_raygen "https://github.com/mansargs/raytracer-minirt/blob/master/srcs/ray_tracing/ray_trace/ray_generation.c"
click node_tracer "https://github.com/mansargs/raytracer-minirt/blob/master/srcs/ray_tracing/ray_trace/ray_trace.c"
click node_intersections "https://github.com/mansargs/raytracer-minirt/tree/master/srcs/ray_tracing/intersection"
click node_lighting "https://github.com/mansargs/raytracer-minirt/tree/master/srcs/ray_tracing/blinn_phong_model"
click node_textures "https://github.com/mansargs/raytracer-minirt/tree/master/srcs/ray_tracing/textures"
click node_window "https://github.com/mansargs/raytracer-minirt/blob/master/srcs/drawing/window.c"
click node_render "https://github.com/mansargs/raytracer-minirt/blob/master/srcs/drawing/render.c"
click node_events "https://github.com/mansargs/raytracer-minirt/blob/master/srcs/drawing/events.c"
click node_checker "https://github.com/mansargs/raytracer-minirt/blob/master/srcs/drawing/deactivate_checkerboard.c"
click node_vectors "https://github.com/mansargs/raytracer-minirt/blob/master/srcs/container/vector.c"
click node_math "https://github.com/mansargs/raytracer-minirt/tree/master/srcs/vec_maths"
click node_cleanup "https://github.com/mansargs/raytracer-minirt/blob/master/srcs/utils/free.c"

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_entry,node_parser,node_elements,node_validation,node_scene_data,node_user toneBlue
class node_raygen,node_tracer,node_intersections,node_lighting,node_textures toneAmber
class node_window,node_render,node_events,node_checker toneMint
class node_vectors,node_math,node_cleanup toneRose
class node_mlx toneIndigo
```

## Components

### Scene input

- [Application flow](https://github.com/mansargs/raytracer-minirt/blob/master/srcs/main.c): `srcs/main.c`
- [Scene parser](https://github.com/mansargs/raytracer-minirt/blob/master/srcs/parsing/identifier.c): `srcs/parsing/identifier.c`
- [Element parsing](https://github.com/mansargs/raytracer-minirt/tree/master/srcs/parsing/elements): `srcs/parsing/elements`
- [Input validation](https://github.com/mansargs/raytracer-minirt/tree/master/srcs/parsing/validation): `srcs/parsing/validation`
- [Scene state](https://github.com/mansargs/raytracer-minirt/blob/master/hdrs/minirt.h): `hdrs/minirt.h`

### Ray rendering

- [Ray generation](https://github.com/mansargs/raytracer-minirt/blob/master/srcs/ray_tracing/ray_trace/ray_generation.c): `srcs/ray_tracing/ray_trace/ray_generation.c`
- [Ray tracing](https://github.com/mansargs/raytracer-minirt/blob/master/srcs/ray_tracing/ray_trace/ray_trace.c): `srcs/ray_tracing/ray_trace/ray_trace.c`
- [Primitive intersections](https://github.com/mansargs/raytracer-minirt/tree/master/srcs/ray_tracing/intersection): `srcs/ray_tracing/intersection`
- [Blinn-Phong lighting](https://github.com/mansargs/raytracer-minirt/tree/master/srcs/ray_tracing/blinn_phong_model): `srcs/ray_tracing/blinn_phong_model`
- [Texture mapping](https://github.com/mansargs/raytracer-minirt/tree/master/srcs/ray_tracing/textures): `srcs/ray_tracing/textures`

### Interactive display

- [MLX window](https://github.com/mansargs/raytracer-minirt/blob/master/srcs/drawing/window.c): `srcs/drawing/window.c`
- [Image rendering](https://github.com/mansargs/raytracer-minirt/blob/master/srcs/drawing/render.c): `srcs/drawing/render.c`
- [Input events](https://github.com/mansargs/raytracer-minirt/blob/master/srcs/drawing/events.c): `srcs/drawing/events.c`
- [Checker toggles](https://github.com/mansargs/raytracer-minirt/blob/master/srcs/drawing/deactivate_checkerboard.c): `srcs/drawing/deactivate_checkerboard.c`

### Runtime support

- [Dynamic vectors](https://github.com/mansargs/raytracer-minirt/blob/master/srcs/container/vector.c): `srcs/container/vector.c`
- [Vector mathematics](https://github.com/mansargs/raytracer-minirt/tree/master/srcs/vec_maths): `srcs/vec_maths`
- [Scene cleanup](https://github.com/mansargs/raytracer-minirt/blob/master/srcs/utils/free.c): `srcs/utils/free.c`

### Other components

- **Renderer user**
- **MLX display**

## Connections

- Renderer user → Application flow: starts scene
- Application flow → Scene parser: parses file
- Scene parser → Input validation: validates values
- Scene parser → Element parsing: dispatches records
- Element parsing → Scene state: populates scene
- Application flow → Scene state: initializes
- Application flow → Texture mapping: loads scene assets
- Application flow → Ray generation: generates rays
- Application flow → Image rendering: renders image
- Application flow → MLX window: starts loop
- Ray generation → Ray tracing: traces pixels
- Ray tracing → Primitive intersections: tests primitives
- Ray tracing → Blinn-Phong lighting: computes shading
- Ray tracing → Texture mapping: samples maps
- Image rendering → MLX display: displays image
- MLX window → MLX display: creates window
- MLX window → Input events: registers handlers
- Input events → Scene state: updates camera mode
- Input events → Checker toggles: deactivates checker
- Input events → Ray tracing: traces clicked pixel
- Input events → MLX display: handles input loop
- Scene parser → Dynamic vectors: stores scene items
- Element parsing → Dynamic vectors: appends records
- Input events → Vector mathematics: moves camera
- Application flow → Scene cleanup: frees scene
- Scene cleanup → MLX display: destroys texture images
