| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- MODULE gl ;
- (*
- m2-GTK4 example - OpenGL in a GtkGLArea.
- A GtkGLArea with auto-render; the "render" callback clears the
- framebuffer to a colour.
- Build: make examples
- Run: ./build/examples/gl
- *)
- FROM Gio IMPORT g_application_run;
- FROM GtkApplication IMPORT gtk_application_new;
- FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_title,
- gtk_window_set_default_size, gtk_window_set_child, gtk_window_present;
- FROM GtkGLArea IMPORT gtk_gl_area_new, gtk_gl_area_set_auto_render,
- gtk_gl_area_set_has_depth_buffer;
- FROM GL IMPORT glClear, glClearColor, GLColorBufferBit;
- FROM GObject IMPORT g_signal_connect_data, GConnectDefault;
- FROM GtkClosures IMPORT Connect2;
- FROM SYSTEM IMPORT ADDRESS, ADR;
- FROM libc IMPORT printf;
- CONST
- AppId = "org.example.m2gtk4.Gl";
- (* gboolean render(GtkGLArea *area, GdkGLContext *context, gpointer user) *)
- PROCEDURE OnRender (area: ADDRESS; context: ADDRESS; user: ADDRESS) : INTEGER;
- BEGIN
- glClearColor(0.16, 0.50, 0.72, 1.0);
- glClear(GLColorBufferBit);
- RETURN 1
- END OnRender;
- PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
- VAR
- window, area: ADDRESS;
- BEGIN
- area := gtk_gl_area_new();
- gtk_gl_area_set_auto_render(area, 1);
- gtk_gl_area_set_has_depth_buffer(area, 1);
- g_signal_connect_data(area, "render", ADR(OnRender), NIL, NIL,
- GConnectDefault);
- window := gtk_application_window_new(application);
- gtk_window_set_title(window, "m2-GTK4 GL");
- gtk_window_set_default_size(window, 400, 300);
- gtk_window_set_child(window, area);
- gtk_window_present(window)
- END OnActivate;
- VAR
- app: ADDRESS;
- BEGIN
- app := gtk_application_new(AppId, 0);
- IF app = NIL THEN
- printf("gtk_application_new failed\n");
- HALT(1)
- END;
- Connect2(app, "activate", OnActivate, NIL);
- g_application_run(app, 0, NIL)
- END gl.
|