# louisforestier/opengles2learningproject architecture

> Architecture diagram of the GitHub repository louisforestier/opengles2learningproject, 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/louisforestier/opengles2learningproject
- Repository: https://github.com/louisforestier/opengles2learningproject

## Overview

This Android OpenGL ES 2 learning app lets a user navigate a 3D scene with on-screen multitouch controls, then renders its objects with materials, lighting, and a directional-light shadow pass. The scene uses a Unity-inspired GameObject/component model; geometry comes from procedural meshes or imported OBJ models. The map follows the README and sampled lifecycle, scene, mesh, and shader code. Some render-pass wiring is omitted where excerpts do not establish the caller.

Main entry points: [`app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/gameobject/GameObject.java`](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/gameobject/GameObject.java) (Game Objects), [`app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/Scene.java`](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/Scene.java) (Scene), [`app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/mesh/Mesh.java`](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/mesh/Mesh.java) (Mesh Data), [`app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/MyGLRenderer.java`](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/MyGLRenderer.java) (GL Renderer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and Controls"]
  node_activity["MainActivity<br/>[MainActivity.java]"]
  node_surface["GL Surface"]
  node_renderer["GL Renderer<br/>[MyGLRenderer.java]"]
end

subgraph group_scene["Scene and Objects"]
  node_sceneenv["Scene<br/>[Scene.java]"]
  node_objects["Game Objects<br/>[GameObject.java]"]
  node_transforms["Transforms<br/>[Transform.java]"]
  node_components["Components<br/>[Component.java]"]
end

subgraph group_geometry["Geometry and Materials"]
  node_meshfilter["Mesh Filter<br/>[MeshFilter.java]"]
  node_meshrenderer["Mesh Renderer<br/>[MeshRenderer.java]"]
  node_mesh["Mesh Data<br/>[Mesh.java]"]
  node_primitives["Primitive Meshes"]
  node_material["Materials<br/>[Material.java]"]
  node_objimporter["OBJ Importer<br/>[OBJImporter.java]"]
end

subgraph group_rendering["Rendering and Shaders"]
  node_light["Light Component<br/>[Light.java]"]
  node_shaderregistry["Shader Manager<br/>[ShaderManager.java]"]
  node_lighting["Lighting Shaders"]
  node_shaderfamilies["Shader Families"]
  node_shadow["Depth and Shadows<br/>[ShadowShaders.java]"]
end

node_user(("User"))

node_user -->|"touches"| node_surface
node_activity -->|"creates"| node_sceneenv
node_activity -->|"hosts"| node_surface
node_surface -->|"renders with"| node_renderer
node_surface -.->|"forwards controls"| node_sceneenv
node_renderer -->|"initializes"| node_sceneenv
node_renderer -->|"registers shaders"| node_shaderregistry
node_renderer -->|"sets shadow pass"| node_shadow
node_sceneenv -->|"updates"| node_objects
node_objects -->|"updates"| node_components
node_objects -->|"uses"| node_transforms
node_objects -->|"attaches"| node_meshfilter
node_objects -->|"attaches"| node_meshrenderer
node_objects -.->|"attaches"| node_light
node_sceneenv -->|"imports models"| node_objimporter
node_objimporter -->|"builds"| node_mesh
node_sceneenv -->|"creates geometry"| node_primitives
node_primitives -->|"produces"| node_mesh
node_meshfilter -->|"holds"| node_mesh
node_meshrenderer -->|"uses"| node_material
node_mesh -->|"draws with"| node_lighting
node_mesh -->|"draws depth with"| node_shadow
node_shaderregistry -->|"stores"| node_lighting
node_shaderregistry -->|"stores depth shader"| node_shadow
node_lighting -->|"sets light uniforms"| node_light
node_shaderfamilies -.->|"includes"| node_lighting

click node_activity "https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/MainActivity.java"
click node_surface "https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/MyGLSurfaceView.java"
click node_renderer "https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/MyGLRenderer.java"
click node_sceneenv "https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/Scene.java"
click node_objects "https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/gameobject/GameObject.java"
click node_transforms "https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/gameobject/Transform.java"
click node_components "https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/gameobject/Component.java"
click node_light "https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/shaders/Light.java"
click node_meshfilter "https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/mesh/MeshFilter.java"
click node_meshrenderer "https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/mesh/MeshRenderer.java"
click node_mesh "https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/mesh/Mesh.java"
click node_primitives "https://github.com/louisforestier/opengles2learningproject/tree/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/mesh"
click node_material "https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/mesh/Material.java"
click node_objimporter "https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/objimporter/OBJImporter.java"
click node_shaderregistry "https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/shaders/ShaderManager.java"
click node_lighting "https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/shaders/MultipleLightingShaders.java"
click node_shaderfamilies "https://github.com/louisforestier/opengles2learningproject/tree/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/shaders"
click node_shadow "https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/shaders/ShadowShaders.java"

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_activity,node_surface,node_renderer,node_user toneBlue
class node_sceneenv,node_objects,node_transforms,node_components toneAmber
class node_meshfilter,node_meshrenderer,node_mesh,node_primitives,node_material,node_objimporter toneMint
class node_light,node_shaderregistry,node_lighting,node_shaderfamilies,node_shadow toneRose
```

## Components

### App and Controls

- [MainActivity](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/MainActivity.java): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/MainActivity.java`
- [GL Surface](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/MyGLSurfaceView.java): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/MyGLSurfaceView.java`
- [GL Renderer](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/MyGLRenderer.java): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/MyGLRenderer.java`

### Scene and Objects

- [Scene](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/Scene.java): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/Scene.java`
- [Game Objects](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/gameobject/GameObject.java): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/gameobject/GameObject.java`
- [Transforms](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/gameobject/Transform.java): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/gameobject/Transform.java`
- [Components](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/gameobject/Component.java): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/gameobject/Component.java`

### Geometry and Materials

- [Mesh Filter](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/mesh/MeshFilter.java): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/mesh/MeshFilter.java`
- [Mesh Renderer](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/mesh/MeshRenderer.java): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/mesh/MeshRenderer.java`
- [Mesh Data](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/mesh/Mesh.java): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/mesh/Mesh.java`
- [Primitive Meshes](https://github.com/louisforestier/opengles2learningproject/tree/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/mesh): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/mesh`
- [Materials](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/mesh/Material.java): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/mesh/Material.java`
- [OBJ Importer](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/objimporter/OBJImporter.java): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/objimporter/OBJImporter.java`

### Rendering and Shaders

- [Light Component](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/shaders/Light.java): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/shaders/Light.java`
- [Shader Manager](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/shaders/ShaderManager.java): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/shaders/ShaderManager.java`
- [Lighting Shaders](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/shaders/MultipleLightingShaders.java): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/shaders/MultipleLightingShaders.java`
- [Shader Families](https://github.com/louisforestier/opengles2learningproject/tree/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/shaders): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/shaders`
- [Depth and Shadows](https://github.com/louisforestier/opengles2learningproject/blob/main/app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/shaders/ShadowShaders.java): `app/src/main/java/fr/univ_poitiers/dptinfo/algo3d/shaders/ShadowShaders.java`

### Other components

- **User**

## Connections

- User → GL Surface: touches
- MainActivity → Scene: creates
- MainActivity → GL Surface: hosts
- GL Surface → GL Renderer: renders with
- GL Surface → Scene: forwards controls
- GL Renderer → Scene: initializes
- GL Renderer → Shader Manager: registers shaders
- GL Renderer → Depth and Shadows: sets shadow pass
- Scene → Game Objects: updates
- Game Objects → Components: updates
- Game Objects → Transforms: uses
- Game Objects → Mesh Filter: attaches
- Game Objects → Mesh Renderer: attaches
- Game Objects → Light Component: attaches
- Scene → OBJ Importer: imports models
- OBJ Importer → Mesh Data: builds
- Scene → Primitive Meshes: creates geometry
- Primitive Meshes → Mesh Data: produces
- Mesh Filter → Mesh Data: holds
- Mesh Renderer → Materials: uses
- Mesh Data → Lighting Shaders: draws with
- Mesh Data → Depth and Shadows: draws depth with
- Shader Manager → Lighting Shaders: stores
- Shader Manager → Depth and Shadows: stores depth shader
- Lighting Shaders → Light Component: sets light uniforms
- Shader Families → Lighting Shaders: includes
