gl.mod 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. MODULE gl ;
  2. (*
  3. m2-GTK4 example - OpenGL in a GtkGLArea.
  4. A GtkGLArea with auto-render; the "render" callback clears the
  5. framebuffer to a colour.
  6. Build: make examples
  7. Run: ./build/examples/gl
  8. *)
  9. FROM Gio IMPORT g_application_run;
  10. FROM GtkApplication IMPORT gtk_application_new;
  11. FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_title,
  12. gtk_window_set_default_size, gtk_window_set_child, gtk_window_present;
  13. FROM GtkGLArea IMPORT gtk_gl_area_new, gtk_gl_area_set_auto_render,
  14. gtk_gl_area_set_has_depth_buffer;
  15. FROM GL IMPORT glClear, glClearColor, GLColorBufferBit;
  16. FROM GObject IMPORT g_signal_connect_data, GConnectDefault;
  17. FROM GtkClosures IMPORT Connect2;
  18. FROM SYSTEM IMPORT ADDRESS, ADR;
  19. FROM libc IMPORT printf;
  20. CONST
  21. AppId = "org.example.m2gtk4.Gl";
  22. (* gboolean render(GtkGLArea *area, GdkGLContext *context, gpointer user) *)
  23. PROCEDURE OnRender (area: ADDRESS; context: ADDRESS; user: ADDRESS) : INTEGER;
  24. BEGIN
  25. glClearColor(0.16, 0.50, 0.72, 1.0);
  26. glClear(GLColorBufferBit);
  27. RETURN 1
  28. END OnRender;
  29. PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
  30. VAR
  31. window, area: ADDRESS;
  32. BEGIN
  33. area := gtk_gl_area_new();
  34. gtk_gl_area_set_auto_render(area, 1);
  35. gtk_gl_area_set_has_depth_buffer(area, 1);
  36. g_signal_connect_data(area, "render", ADR(OnRender), NIL, NIL,
  37. GConnectDefault);
  38. window := gtk_application_window_new(application);
  39. gtk_window_set_title(window, "m2-GTK4 GL");
  40. gtk_window_set_default_size(window, 400, 300);
  41. gtk_window_set_child(window, area);
  42. gtk_window_present(window)
  43. END OnActivate;
  44. VAR
  45. app: ADDRESS;
  46. BEGIN
  47. app := gtk_application_new(AppId, 0);
  48. IF app = NIL THEN
  49. printf("gtk_application_new failed\n");
  50. HALT(1)
  51. END;
  52. Connect2(app, "activate", OnActivate, NIL);
  53. g_application_run(app, 0, NIL)
  54. END gl.