129 lines
3.8 KiB
C
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);
|
|
|