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)
|
||||
|
||||
CC=gcc
|
||||
CFLAGS=`pkg-config --cflags gtk4 gl glib-2.0 libxml-2.0`
|
||||
LDFLAGS=`pkg-config --libs gtk4 gl glib-2.0 libxml-2.0` -lGL -lGLU -lm -lepoxy -lX11 -lGLEW
|
||||
CFLAGS=`pkg-config --cflags gtk4 epoxy glib-2.0 libxml-2.0`
|
||||
LDFLAGS=`pkg-config --libs gtk4 epoxy glib-2.0 libxml-2.0` -lGL -lGLU -lm -lepoxy -lX11 -lGLEW
|
||||
WARNINGS = -Wall
|
||||
DEBUG = -ggdb -fno-omit-frame-pointer #-fdiagnostics-color=always -fsanitize=bounds -fstack-check
|
||||
OPTIMIZE = -O3
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
"libxml2"
|
||||
"glu"
|
||||
"glew"
|
||||
;; "glfw"
|
||||
"cglm"
|
||||
"libepoxy"
|
||||
"pango@1.90.0"
|
||||
|
@ -25,6 +24,7 @@
|
|||
"glib"
|
||||
"mesa-headers"
|
||||
"mesa"
|
||||
"mesa-utils"
|
||||
"libadwaita"
|
||||
)
|
||||
)
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#include "../../../include/graphics.h"
|
||||
#include "../../../include/signal.h"
|
||||
|
||||
#define GL_AREA_1000 1000
|
||||
#define GL_AREA_SIZE 400
|
||||
|
||||
struct stack_index_t {
|
||||
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)
|
||||
{
|
||||
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
|
||||
for (int i = 0; i < stack_index_size; i++) {
|
||||
g_printerr("[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() : i is %d\n", i);
|
||||
g_message("[debug] util_gl_init_util_gl_stack() : target would be %p\n",
|
||||
stack_index[i].container_widget);
|
||||
if (stack_index[i].container_widget == (void *)container_widget) {
|
||||
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);
|
||||
if (stack_index[i].stack_id >= 0)
|
||||
return true;
|
||||
|
@ -273,11 +273,11 @@ GtkWidget *create_axis_slider(int axis)
|
|||
/* { */
|
||||
/* GtkWidget *gl_area; */
|
||||
|
||||
/* g_printerr("[debug] util_gl_setup_glarea()\n"); */
|
||||
/* g_message("[debug] util_gl_setup_glarea()\n"); */
|
||||
|
||||
/* 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) { */
|
||||
/* 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; */
|
||||
|
||||
/* 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_size); */
|
||||
|
||||
|
@ -332,31 +332,52 @@ GtkWidget *create_axis_slider(int axis)
|
|||
/* } */
|
||||
|
||||
static void
|
||||
on_realize_debug (GtkGLArea *area) {
|
||||
// Initialisation du contexte OpenGL
|
||||
on_realize_debug (GtkGLArea *area)
|
||||
{
|
||||
gdk_gl_context_make_current(gtk_gl_area_get_context(area));
|
||||
|
||||
// Si nécessaire, ajouter d'autres initialisations OpenGL ici
|
||||
if (gtk_gl_area_get_error(area) != NULL) {
|
||||
g_message("Failed to create OpenGL context");
|
||||
}
|
||||
gtk_gl_area_set_has_depth_buffer(GTK_GL_AREA(area), TRUE);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
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
|
||||
on_render_debug (GtkGLArea *area, GdkGLContext *context)
|
||||
{
|
||||
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);
|
||||
|
||||
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();
|
||||
|
||||
g_signal_connect(gl_area, "realize", G_CALLBACK(on_realize_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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue