Viewer minimal KTX2 — Affiche une texture PBR/HDR compressée avec tone-mapping.
More...
|
| static bool | gl_context_init (GlContext *ctx, const char *title) |
| | Initialise GLFW et GLAD pour fournir un contexte OpenGL 3.3 Core.
|
| |
| static void | gl_context_destroy (GlContext *ctx) |
| |
| static GLuint | shader_compile (GLenum type, const char *src) |
| | Compile un shader GLSL individuel et vérifie les erreurs.
|
| |
| static bool | shader_program_create (ShaderProg *prog, const char *vs_src, const char *fs_src) |
| | Lie le Vertex et le Fragment shader dans un programme GPU.
|
| |
| static void | shader_program_destroy (ShaderProg *prog) |
| |
| static bool | ktx_asset_load (KtxAsset *asset, const char *filepath) |
| | Charge le fichier KTX2 depuis le disque et le rend exploitable pour OpenGL.
|
| |
| static void | ktx_asset_print_info (const KtxAsset *asset, const char *path) |
| | Affiche un rapport complet sur les métadonnées et l'efficacité de la compression.
|
| |
| static void | ktx_asset_destroy (KtxAsset *asset) |
| |
| static void | ktx_resolve_gl_format (const KtxAsset *asset, GLint *internal_fmt, GLenum *base_fmt, GLenum *gl_type) |
| | Lit le DFD (Data Format Descriptor) pour attribuer les formats OpenGL exacts.
|
| |
| static bool | gl_texture_upload_from_ktx (GlTexture *tex, const KtxAsset *asset) |
| | Envoie les données CPU (décodées) vers la mémoire de la carte graphique (VRAM).
|
| |
| static void | gl_texture_destroy (GlTexture *tex) |
| |
| static void | render_loop (GLFWwindow *window, const ShaderProg *prog, const GlTexture *tex) |
| |
| int | main (int argc, char **argv) |
| |
Viewer minimal KTX2 — Affiche une texture PBR/HDR compressée avec tone-mapping.
Architecture & Pipeline :
- Chargement (Disque -> RAM) : Lecture du fichier .ktx2 via l'API libktx. Si le fichier utilise une supercompression (ex: Zstandard), il est déflaté à la volée.
- Décompression (Blocs -> Pixels) : Les GPU Desktop (Intel/Nvidia/AMD) ne supportent pas le format ASTC HDR matériellement. Le CPU transcode donc les blocs (Basis/UASTC/ASTC) vers un format SFLOAT brut (Half-Float 16-bit).
- Upload (RAM -> VRAM) : Envoi manuel vers GL_TEXTURE_2D. Un soin particulier est apporté à l'alignement mémoire (Row Pitch) car le RGB16F n'est pas un multiple de 4 octets.
- Rendu (GPU) : Un shader "Fullscreen Triangle" (sans VBO) lit la texture, applique un tone-mapping de Reinhard (pour ramener le HDR sur un écran LDR) et une correction Gamma.