/* * Gem-graph OpenGL experiments * * Desc: OpenGL utils header * * Copyright (C) 2023 Arthur Menges * Copyright (C) 2023 Adrien Bourmault * Copyright (C) 2023 Jean Sirmai * * This file is part of Gem-graph. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ #pragma once #include #include #include /* * Structure describing a gl_area and its parameters, used to create a table * of Gem-graph client current gl_areas */ struct gl_area_entry { char name[16]; GLuint vao; // init_buffers GLuint position_buffer; // shutdown, draw GLuint color_buffer; // shutdown, draw GLuint program; // shutdown, init_shaders, draw GLuint m; // init_shaders, draw GLuint v; // init_shaders, draw GLuint p; // init_shaders, draw // GLuint line_indices_nb; // now : graphics.c > int buffer_lines_ndx // GLuint plan_indices_nb; // now : graphics.c > int buffer_plans_ndx }; /* * Initializes a gl_area * * @param gl_area, ptr to the gl_area widget * * @return true if initialized */ bool graphics_init(const char *gl_area); /* * Draws the current buffer to a gl_area * * @param gl_area, ptr to the gl_area widget * * @return void */ void graphics_draw(const void *gl_area); /* * Shutdowns a gl_area * * @param gl_area, ptr to the gl_area widget * * @return true if success */ bool graphics_shutdown(const void *gl_area); /* * Initializes the shaders of a gl_area and link them to a program * * @param gl_area, ptr to the gl_area widget * * * @return true if initialized */ bool graphics_init_shaders(const void *gl_area); /* * Initializes the buffer of a gl_area * * @param gl_area, ptr to the gl_area widget * * Note : indices[] is defined in graphics_cube.h * * @return void */ void graphics_init_buffers(const void *gl_area); /* * 2023-09-05 Sur la branche dev/graphics2 * >>> Restructuration [state // arrows] * * Le calcul du nombre et de la position des vertex et des couleurs * est fait au début de chaque session de travail en fonction de : * - x,y,z * - user preferences * * Le premier but de la restructuration est que : * le calcul des valeurs des vertex départ/arrivée des lignes * et l'allocation du buffer lignes (! LIGNES ! <> pas vertex) * soit fait par des realloc(), * (une realloc à chaque écriture (ou effacement) d'une flèche) * et non, comme actuellement, en une seule fois lors de l'initialisation * bdad3857a9ede7f96dac430505c4f3c5da39744f * * Cette restructuration sera plus lisible si le code qui décrit les flèches * est nettement séparé de celui qui décrit l'espace. * * Certaines fonctions des actuels fichiers '/graphics' et '/buffers' * doivent donc être transférées vers deux nouveaux fichiers : * '/space' et '/arrows' * * La fonction draw_line(a,b) sera utilisée pour tracer toutes les lignes * (qu'elles décrivent l'espace ou les flèches). * Elle calcule les adresses mémoire des vertex (a) et (b) * en fonction de leur position dans l'espace * et réalloue le buffer lines avant d'y écrire : */ void draw_line (int a, int b);