gem-graph-client/include/graphics.h

129 lines
3.8 KiB
C

/*
* Gem-graph OpenGL experiments
*
* Desc: OpenGL utils header
*
* Copyright (C) 2023 Arthur Menges <arthur.menges@a-lec.org>
* Copyright (C) 2023 Adrien Bourmault <neox@a-lec.org>
* Copyright (C) 2023 Jean Sirmai <jean@a-lec.org>
*
* 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 <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <unistd.h>
#include <stdbool.h>
#include <GL/glu.h>
/*
* 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);