src/util/draw/gl.c: draw a red GL area
This commit is contained in:
parent
0862038597
commit
f7f8c5be98
4
Makefile
4
Makefile
|
@ -6,8 +6,8 @@ CPUS ?= $(shell (nproc --all || sysctl -n hw.ncpu) 2>/dev/null || echo 1)
|
||||||
MAKEFLAGS += --jobs=$(CPUS)
|
MAKEFLAGS += --jobs=$(CPUS)
|
||||||
|
|
||||||
CC=gcc
|
CC=gcc
|
||||||
CFLAGS=`pkg-config --cflags gtk4 gl glib-2.0 libxml-2.0`
|
CFLAGS=`pkg-config --cflags gtk4 epoxy glib-2.0 libxml-2.0`
|
||||||
LDFLAGS=`pkg-config --libs gtk4 gl glib-2.0 libxml-2.0` -lGL -lGLU -lm -lepoxy -lX11 -lGLEW
|
LDFLAGS=`pkg-config --libs gtk4 epoxy glib-2.0 libxml-2.0` -lGL -lGLU -lm -lepoxy -lX11 -lGLEW
|
||||||
WARNINGS = -Wall
|
WARNINGS = -Wall
|
||||||
DEBUG = -ggdb -fno-omit-frame-pointer #-fdiagnostics-color=always -fsanitize=bounds -fstack-check
|
DEBUG = -ggdb -fno-omit-frame-pointer #-fdiagnostics-color=always -fsanitize=bounds -fstack-check
|
||||||
OPTIMIZE = -O3
|
OPTIMIZE = -O3
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
"libxml2"
|
"libxml2"
|
||||||
"glu"
|
"glu"
|
||||||
"glew"
|
"glew"
|
||||||
;; "glfw"
|
|
||||||
"cglm"
|
"cglm"
|
||||||
"libepoxy"
|
"libepoxy"
|
||||||
"pango@1.90.0"
|
"pango@1.90.0"
|
||||||
|
@ -25,6 +24,7 @@
|
||||||
"glib"
|
"glib"
|
||||||
"mesa-headers"
|
"mesa-headers"
|
||||||
"mesa"
|
"mesa"
|
||||||
|
"mesa-utils"
|
||||||
"libadwaita"
|
"libadwaita"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#include "../../../include/graphics.h"
|
#include "../../../include/graphics.h"
|
||||||
#include "../../../include/signal.h"
|
#include "../../../include/signal.h"
|
||||||
|
|
||||||
#define GL_AREA_1000 1000
|
#define GL_AREA_SIZE 400
|
||||||
|
|
||||||
struct stack_index_t {
|
struct stack_index_t {
|
||||||
long stack_id;
|
long stack_id;
|
||||||
|
@ -101,18 +101,18 @@ long util_gl_is_ready(void *container_widget)
|
||||||
*/
|
*/
|
||||||
bool util_gl_init_stack(void *container_widget, GError *error_buffer)
|
bool util_gl_init_stack(void *container_widget, GError *error_buffer)
|
||||||
{
|
{
|
||||||
g_printerr("[debug] util_gl_init_util_gl_stack()\n");
|
g_message("[debug] util_gl_init_util_gl_stack()\n");
|
||||||
|
|
||||||
g_printerr("[debug] util_gl_init_util_gl_stack() : target is %p\n", container_widget);
|
g_message("[debug] util_gl_init_util_gl_stack() : target is %p\n", container_widget);
|
||||||
|
|
||||||
// look for stack_index entry
|
// look for stack_index entry
|
||||||
for (int i = 0; i < stack_index_size; i++) {
|
for (int i = 0; i < stack_index_size; i++) {
|
||||||
g_printerr("[debug] util_gl_init_util_gl_stack() : i is %d\n", i);
|
g_message("[debug] util_gl_init_util_gl_stack() : i is %d\n", i);
|
||||||
g_printerr("[debug] util_gl_init_util_gl_stack() : target would be %p\n",
|
g_message("[debug] util_gl_init_util_gl_stack() : target would be %p\n",
|
||||||
stack_index[i].container_widget);
|
stack_index[i].container_widget);
|
||||||
if (stack_index[i].container_widget == (void *)container_widget) {
|
if (stack_index[i].container_widget == (void *)container_widget) {
|
||||||
stack_index[i].stack_id = graphics_init(&error_buffer);
|
stack_index[i].stack_id = graphics_init(&error_buffer);
|
||||||
g_printerr("[debug] util_gl_init_util_gl_stack() : stack_id is %ld\n",
|
g_message("[debug] util_gl_init_util_gl_stack() : stack_id is %ld\n",
|
||||||
stack_index[i].stack_id);
|
stack_index[i].stack_id);
|
||||||
if (stack_index[i].stack_id >= 0)
|
if (stack_index[i].stack_id >= 0)
|
||||||
return true;
|
return true;
|
||||||
|
@ -273,11 +273,11 @@ GtkWidget *create_axis_slider(int axis)
|
||||||
/* { */
|
/* { */
|
||||||
/* GtkWidget *gl_area; */
|
/* GtkWidget *gl_area; */
|
||||||
|
|
||||||
/* g_printerr("[debug] util_gl_setup_glarea()\n"); */
|
/* g_message("[debug] util_gl_setup_glarea()\n"); */
|
||||||
|
|
||||||
/* assert(target_widget); */
|
/* assert(target_widget); */
|
||||||
|
|
||||||
/* g_printerr("[debug] util_gl_setup_glarea() : target is %p\n", target_widget); */
|
/* g_message("[debug] util_gl_setup_glarea() : target is %p\n", target_widget); */
|
||||||
|
|
||||||
/* if (stack_index == NULL) { */
|
/* if (stack_index == NULL) { */
|
||||||
/* stack_index = g_malloc(sizeof(struct stack_index_t)); */
|
/* stack_index = g_malloc(sizeof(struct stack_index_t)); */
|
||||||
|
@ -315,9 +315,9 @@ GtkWidget *create_axis_slider(int axis)
|
||||||
|
|
||||||
/* stack_index[stack_index_size-1].gl_area = (void*)gl_area; */
|
/* stack_index[stack_index_size-1].gl_area = (void*)gl_area; */
|
||||||
|
|
||||||
/* g_printerr("[debug] util_gl_setup_glarea() : set target to %p\n", target_widget); */
|
/* g_message("[debug] util_gl_setup_glarea() : set target to %p\n", target_widget); */
|
||||||
|
|
||||||
/* g_printerr("[debug] util_gl_setup_glarea() : stack_index (@0x%p) had %ld elements\n", */
|
/* g_message("[debug] util_gl_setup_glarea() : stack_index (@0x%p) had %ld elements\n", */
|
||||||
/* stack_index, */
|
/* stack_index, */
|
||||||
/* stack_index_size); */
|
/* stack_index_size); */
|
||||||
|
|
||||||
|
@ -332,31 +332,52 @@ GtkWidget *create_axis_slider(int axis)
|
||||||
/* } */
|
/* } */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
on_realize_debug (GtkGLArea *area) {
|
on_realize_debug (GtkGLArea *area)
|
||||||
// Initialisation du contexte OpenGL
|
{
|
||||||
gdk_gl_context_make_current(gtk_gl_area_get_context(area));
|
gdk_gl_context_make_current(gtk_gl_area_get_context(area));
|
||||||
|
if (gtk_gl_area_get_error(area) != NULL) {
|
||||||
// Si nécessaire, ajouter d'autres initialisations OpenGL ici
|
g_message("Failed to create OpenGL context");
|
||||||
|
}
|
||||||
|
gtk_gl_area_set_has_depth_buffer(GTK_GL_AREA(area), TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
on_render_debug (GtkGLArea *area, GdkGLContext *context) {
|
on_render_debug (GtkGLArea *area, GdkGLContext *context)
|
||||||
// Ici vous pouvez dessiner avec OpenGL
|
{
|
||||||
glClearColor(0.0, 1.0, 0.0, 1.0); // Effacer en vert
|
GLenum err;
|
||||||
|
while ((err = glGetError()) != GL_NO_ERROR) {
|
||||||
|
g_warning("OpenGL error: %d", err);
|
||||||
|
}
|
||||||
|
|
||||||
|
int width, height;
|
||||||
|
width = gtk_widget_get_allocated_width(GTK_WIDGET(area));
|
||||||
|
height = gtk_widget_get_allocated_height(GTK_WIDGET(area));
|
||||||
|
g_message("GtkGLArea size: %d x %d", width, height);
|
||||||
|
|
||||||
|
glViewport(0, 0, width, height);
|
||||||
|
glClearColor(1.0, 0.0, 0.0, 1.0);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool util_gl_setup_glarea(int target_mode, GtkWidget *target_widget) {
|
bool util_gl_setup_glarea (int target_mode, GtkWidget *target_widget)
|
||||||
|
{
|
||||||
|
g_message("[debug] util_gl_setup_glarea()\n");
|
||||||
GtkWidget *gl_area = gtk_gl_area_new();
|
GtkWidget *gl_area = gtk_gl_area_new();
|
||||||
|
|
||||||
g_signal_connect(gl_area, "realize", G_CALLBACK(on_realize_debug), NULL);
|
g_signal_connect(gl_area, "realize", G_CALLBACK(on_realize_debug), NULL);
|
||||||
g_signal_connect(gl_area, "render", G_CALLBACK(on_render_debug), NULL);
|
g_signal_connect(gl_area, "render", G_CALLBACK(on_render_debug), NULL);
|
||||||
|
|
||||||
gtk_box_append(GTK_BOX(target_widget), gl_area);
|
gtk_widget_set_size_request(gl_area, GL_AREA_SIZE, GL_AREA_SIZE);
|
||||||
|
gtk_gl_area_set_auto_render(GTK_GL_AREA(gl_area), true);
|
||||||
|
gtk_widget_set_hexpand(gl_area, TRUE);
|
||||||
|
gtk_widget_set_vexpand(gl_area, TRUE);
|
||||||
|
gtk_widget_set_halign(gl_area, GTK_ALIGN_CENTER);
|
||||||
|
gtk_widget_set_valign(gl_area, GTK_ALIGN_CENTER);
|
||||||
|
|
||||||
gtk_widget_show(gl_area);
|
gtk_box_append (GTK_BOX (target_widget), gl_area);
|
||||||
|
gtk_widget_set_visible (GTK_WIDGET (gl_area), TRUE);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue