test_gl.mod 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. MODULE test_gl ;
  2. (*
  3. m2-GTK4 test - GtkGLArea property round-trips. Requires a display
  4. (and a GL-capable renderer to actually draw, which this does not do).
  5. *)
  6. FROM Gio IMPORT g_application_run, g_application_quit;
  7. FROM GtkApplication IMPORT gtk_application_new;
  8. FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_child,
  9. gtk_window_present;
  10. FROM GtkGLArea IMPORT gtk_gl_area_new, gtk_gl_area_set_auto_render,
  11. gtk_gl_area_get_auto_render, gtk_gl_area_set_has_depth_buffer,
  12. gtk_gl_area_get_has_depth_buffer, gtk_gl_area_set_has_stencil_buffer,
  13. gtk_gl_area_set_use_es, gtk_gl_area_get_use_es,
  14. gtk_gl_area_set_required_version, gtk_gl_area_get_required_version;
  15. FROM GtkUtils IMPORT Connect;
  16. FROM SYSTEM IMPORT ADDRESS, ADR;
  17. FROM libc IMPORT printf;
  18. CONST
  19. AppId = "org.example.m2gtk4.TestGl";
  20. VAR
  21. app: ADDRESS;
  22. passed: BOOLEAN;
  23. PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
  24. VAR
  25. window, area: ADDRESS;
  26. major, minor: INTEGER;
  27. ok: BOOLEAN;
  28. BEGIN
  29. ok := TRUE;
  30. area := gtk_gl_area_new();
  31. IF area = NIL THEN printf("gl area NIL\n"); ok := FALSE END;
  32. gtk_gl_area_set_auto_render(area, 1);
  33. IF gtk_gl_area_get_auto_render(area) # 1 THEN
  34. printf("auto_render wrong\n"); ok := FALSE
  35. END;
  36. gtk_gl_area_set_has_depth_buffer(area, 1);
  37. IF gtk_gl_area_get_has_depth_buffer(area) # 1 THEN
  38. printf("has_depth_buffer wrong\n"); ok := FALSE
  39. END;
  40. gtk_gl_area_set_has_stencil_buffer(area, 1);
  41. gtk_gl_area_set_use_es(area, 0);
  42. IF gtk_gl_area_get_use_es(area) # 0 THEN
  43. printf("use_es wrong\n"); ok := FALSE
  44. END;
  45. gtk_gl_area_set_required_version(area, 3, 3);
  46. gtk_gl_area_get_required_version(area, major, minor);
  47. IF (major # 3) OR (minor # 3) THEN
  48. printf("required version wrong: %d.%d\n", major, minor); ok := FALSE
  49. END;
  50. window := gtk_application_window_new(application);
  51. gtk_window_set_child(window, area);
  52. gtk_window_present(window);
  53. passed := ok;
  54. g_application_quit(application)
  55. END OnActivate;
  56. VAR
  57. rc: INTEGER;
  58. BEGIN
  59. passed := FALSE;
  60. app := gtk_application_new(AppId, 0);
  61. IF app = NIL THEN
  62. printf("test_gl: FAIL (no app)\n");
  63. HALT(1)
  64. END;
  65. Connect(app, "activate", ADR(OnActivate), NIL);
  66. rc := g_application_run(app, 0, NIL);
  67. IF passed THEN
  68. printf("test_gl: PASS\n");
  69. HALT(0)
  70. ELSE
  71. printf("test_gl: FAIL\n");
  72. HALT(1)
  73. END
  74. END test_gl.