summaryrefslogtreecommitdiff
path: root/src/fltk-widgets-groups-windows-opengl.ads
diff options
context:
space:
mode:
Diffstat (limited to 'src/fltk-widgets-groups-windows-opengl.ads')
-rw-r--r--src/fltk-widgets-groups-windows-opengl.ads252
1 files changed, 252 insertions, 0 deletions
diff --git a/src/fltk-widgets-groups-windows-opengl.ads b/src/fltk-widgets-groups-windows-opengl.ads
new file mode 100644
index 0000000..8d76884
--- /dev/null
+++ b/src/fltk-widgets-groups-windows-opengl.ads
@@ -0,0 +1,252 @@
+
+
+with
+
+ System;
+
+private with
+
+ Interfaces.C;
+
+
+package FLTK.Widgets.Groups.Windows.OpenGL is
+
+
+ -------------
+ -- Types --
+ -------------
+
+ type GL_Window is new Window with private;
+
+ type GL_Window_Reference (Data : not null access GL_Window'Class) is
+ limited null record with Implicit_Dereference => Data;
+
+ -- RGB mode is achieved by Index being set to False
+ -- Single buffer mode is achieved by Double being set to False
+ type Mode_Mask is record
+ Index : Boolean := False;
+ Double : Boolean := False;
+ Accum : Boolean := False;
+ Alpha : Boolean := False;
+ Depth : Boolean := False;
+ Stencil : Boolean := False;
+ RGB8 : Boolean := False;
+ Multisample : Boolean := False;
+ Stereo : Boolean := False;
+ Fake_Single : Boolean := False;
+ OpenGL3 : Boolean := False;
+ end record;
+
+
+
+
+ --------------------
+ -- Constructors --
+ --------------------
+
+ package Forge is
+
+ function Create
+ (X, Y, W, H : in Integer;
+ Text : in String := "")
+ return GL_Window;
+
+ function Create
+ (W, H : in Integer;
+ Text : in String := "")
+ return GL_Window;
+
+ end Forge;
+
+
+
+
+ ---------------
+ -- Display --
+ ---------------
+
+ procedure Show
+ (This : in out GL_Window);
+
+ procedure Hide
+ (This : in out GL_Window);
+
+ procedure Hide_Overlay
+ (This : in out GL_Window);
+
+ procedure Flush
+ (This : in out GL_Window);
+
+
+
+
+ ------------------
+ -- Dimensions --
+ ------------------
+
+ function Pixel_H
+ (This : in GL_Window)
+ return Integer;
+
+ function Pixel_W
+ (This : in GL_Window)
+ return Integer;
+
+ function Pixels_Per_Unit
+ (This : in GL_Window)
+ return Float;
+
+
+
+
+ --------------------
+ -- OpenGL Modes --
+ --------------------
+
+ function Get_Mode
+ (This : in GL_Window)
+ return Mode_Mask;
+
+ procedure Set_Mode
+ (This : in out GL_Window;
+ Mask : in Mode_Mask);
+
+ function Can_Do
+ (Mask : in Mode_Mask)
+ return Boolean;
+
+ function Can_Do
+ (This : in GL_Window)
+ return Boolean;
+
+ function Can_Do_Overlay
+ (This : in GL_Window)
+ return Boolean;
+
+
+
+
+ -----------------------
+ -- OpenGL Contexts --
+ -----------------------
+
+ function Get_Context
+ (This : in GL_Window)
+ return System.Address;
+
+ procedure Set_Context
+ (This : in out GL_Window;
+ Struct : in System.Address;
+ Destroy : in Boolean := False);
+
+ function Get_Context_Valid
+ (This : in GL_Window)
+ return Boolean;
+
+ procedure Set_Context_Valid
+ (This : in out GL_Window;
+ Value : in Boolean);
+
+ function Get_Valid
+ (This : in GL_Window)
+ return Boolean;
+
+ procedure Set_Valid
+ (This : in out GL_Window;
+ Value : in Boolean);
+
+ procedure Make_Current
+ (This : in out GL_Window);
+
+ procedure Make_Overlay_Current
+ (This : in out GL_Window);
+
+
+
+
+ ----------------------------------
+ -- Drawing and Event Handling --
+ ----------------------------------
+
+ procedure Ortho
+ (This : in out GL_Window);
+
+ procedure Redraw_Overlay
+ (This : in out GL_Window);
+
+ procedure Swap_Buffers
+ (This : in out GL_Window);
+
+ procedure Draw
+ (This : in out GL_Window);
+
+ function Handle
+ (This : in out GL_Window;
+ Event : in Event_Kind)
+ return Event_Outcome;
+
+
+private
+
+
+ type GL_Window is new Window with null record;
+
+ overriding procedure Finalize
+ (This : in out GL_Window);
+
+
+ for Mode_Mask use record
+ Index at 0 range 0 .. 0;
+ Double at 0 range 1 .. 1;
+ Accum at 0 range 2 .. 2;
+ Alpha at 0 range 3 .. 3;
+ Depth at 0 range 4 .. 4;
+ Stencil at 0 range 5 .. 5;
+ RGB8 at 0 range 6 .. 6;
+ Multisample at 0 range 7 .. 7;
+ Stereo at 0 range 8 .. 8;
+ Fake_Single at 0 range 9 .. 9;
+ OpenGL3 at 0 range 10 .. Interfaces.C.unsigned'Size - 1;
+ end record;
+
+ for Mode_Mask'Size use Interfaces.C.unsigned'Size;
+
+ pragma Convention (C_Pass_By_Copy, Mode_Mask);
+
+
+ pragma Inline (Show);
+ pragma Inline (Hide);
+ pragma Inline (Hide_Overlay);
+ pragma Inline (Flush);
+
+
+ pragma Inline (Pixel_H);
+ pragma Inline (Pixel_W);
+ pragma Inline (Pixels_Per_Unit);
+
+
+ pragma Inline (Get_Mode);
+ pragma Inline (Set_Mode);
+ pragma Inline (Can_Do);
+ pragma Inline (Can_Do_Overlay);
+
+
+ pragma Inline (Get_Context);
+ pragma Inline (Set_Context);
+ pragma Inline (Get_Context_Valid);
+ pragma Inline (Set_Context_Valid);
+ pragma Inline (Get_Valid);
+ pragma Inline (Set_Valid);
+ pragma Inline (Make_Current);
+ pragma Inline (Make_Overlay_Current);
+
+
+ pragma Inline (Ortho);
+ pragma Inline (Redraw_Overlay);
+ pragma Inline (Swap_Buffers);
+ pragma Inline (Draw);
+ pragma Inline (Handle);
+
+
+end FLTK.Widgets.Groups.Windows.OpenGL;
+