Skip to content

Commit

Permalink
Added support for gl[Get]FramebufferParameter
Browse files Browse the repository at this point in the history
  • Loading branch information
flyx committed Jan 2, 2014
1 parent 40d2e07 commit f7ed871
Show file tree
Hide file tree
Showing 6 changed files with 196 additions and 3 deletions.
25 changes: 25 additions & 0 deletions src/gl/implementation/gl-api.ads
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,11 @@ private package GL.API is
Target : in out Ints.Vector4);
pragma Import (Convention => StdCall, Entity => Get_Int_Vec4,
External_Name => "glGetIntegerv");

procedure Get_Size (Name : Enums.Getter.Parameter;
Target : access Size);
pragma Import (Convention => StdCall, Entity => Get_Size,
External_Name => "glGetIntegerv");

procedure Get_Color_Control (Name : Enums.Getter.Parameter;
Target : access Fixed.Lighting.Color_Control);
Expand Down Expand Up @@ -810,6 +815,26 @@ private package GL.API is
Objects.Framebuffers.Attachment_Point,
Objects.Framebuffers.Attachment_List);

procedure Framebuffer_Parameter_Size is new Loader.Procedure_With_3_Params
("glFramebufferParameteri", Low_Level.Enums.Framebuffer_Kind,
Enums.Framebuffer_Param, Size);

procedure Framebuffer_Parameter_Bool is new Loader.Procedure_With_3_Params
("glFramebufferParameteri", Low_Level.Enums.Framebuffer_Kind,
Enums.Framebuffer_Param, Low_Level.Bool);

procedure Get_Framebuffer_Parameter_Size is new
Loader.Procedure_With_3_Params ("glGetFramebufferParameteriv",
Low_Level.Enums.Framebuffer_Kind,
Enums.Framebuffer_Param,
Low_Level.Size_Access);

procedure Get_Framebuffer_Parameter_Bool is new
Loader.Procedure_With_3_Params ("glGetFramebufferParameteriv",
Low_Level.Enums.Framebuffer_Kind,
Enums.Framebuffer_Param,
Low_Level.Bool_Access);

-----------------------------------------------------------------------------
-- Shaders --
-----------------------------------------------------------------------------
Expand Down
12 changes: 10 additions & 2 deletions src/gl/implementation/gl-enums-getter.ads
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,11 @@ package GL.Enums.Getter is
Current_Fog_Coord,
Active_Texture,
Blend_Equation_Alpha,
Max_Combined_Texture_Image_Units);
Max_Combined_Texture_Image_Units,
Max_Framebuffer_Width,
Max_Framebuffer_Height,
Max_Framebuffer_Layers,
Max_Framebuffer_Samples);
for Parameter use
(Current_Color => 16#0B00#,
Current_Index => 16#0B01#,
Expand Down Expand Up @@ -474,7 +478,11 @@ package GL.Enums.Getter is
Current_Fog_Coord => 16#8453#,
Active_Texture => 16#84E0#,
Blend_Equation_Alpha => 16#883D#,
Max_Combined_Texture_Image_Units => 16#8B4D#);
Max_Combined_Texture_Image_Units => 16#8B4D#,
Max_Framebuffer_Width => 16#9315#,
Max_Framebuffer_Height => 16#9316#,
Max_Framebuffer_Layers => 16#9317#,
Max_Framebuffer_Samples => 16#9318#);
for Parameter'Size use Low_Level.Enum'Size;

type String_Parameter is
Expand Down
10 changes: 10 additions & 0 deletions src/gl/implementation/gl-enums.ads
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,9 @@ private package GL.Enums is
Pack_Skip_Rows, Pack_Skip_Pixels,
Pack_Alignment, Pack_Skip_Images, Pack_Image_Height,
Unpack_Skip_Images, Unpack_Image_Height);

type Framebuffer_Param is (Default_Width, Default_Height, Default_Layers,
Default_Samples, Default_Fixed_Sample_Locations);
private

for Attribute_Mask use record
Expand Down Expand Up @@ -179,4 +182,11 @@ private
Unpack_Skip_Images => 16#806D#,
Unpack_Image_Height => 16#806E#);
for Pixel_Store_Param'Size use Low_Level.Enum'Size;

for Framebuffer_Param use (Default_Width => 16#9310#,
Default_Height => 16#9311#,
Default_Layers => 16#9312#,
Default_Samples => 16#9313#,
Default_Fixed_Sample_Locations => 16#9314#);
for Framebuffer_Param'Size use Low_Level.Enum'Size;
end GL.Enums;
6 changes: 6 additions & 0 deletions src/gl/implementation/gl-low_level.ads
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ package GL.Low_Level is
subtype SizeIPtr is C.long;

type CharPtr_Array is array (Positive range <>) of aliased C.Strings.chars_ptr;

-- used in API calls
type Size_Access is access all Types.Size;
type Bool_Access is access all Bool;
private
for Bool use (False => 0, True => 1);
for Bool'Size use C.unsigned_char'Size;
Expand All @@ -65,4 +69,6 @@ private
pragma Convention (C, Double_Array);
pragma Convention (C, Int_Array);
pragma Convention (C, UInt_Array);
pragma Convention (C, Size_Access);
pragma Convention (C, Bool_Access);
end GL.Low_Level;
120 changes: 119 additions & 1 deletion src/gl/implementation/gl-objects-framebuffers.adb
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ with Ada.Containers.Indefinite_Hashed_Maps;
with Ada.Unchecked_Conversion;

with GL.API;
with GL.Enums.Getter;

package body GL.Objects.Framebuffers is
------------
Expand Down Expand Up @@ -69,6 +70,124 @@ package body GL.Objects.Framebuffers is
Raise_Exception_On_OpenGL_Error;
end Blit;

procedure Set_Default_Width (Target : in out Framebuffer_Target;
Value : Size) is
begin
API.Framebuffer_Parameter_Size (Target.Kind, Enums.Default_Width, Value);
Raise_Exception_On_OpenGL_Error;
end Set_Default_Width;

function Default_Width (Target : Framebuffer_Target) return Size is
Ret : aliased Size;
begin
API.Get_Framebuffer_Parameter_Size
(Target.Kind, Enums.Default_Width, Ret'Unchecked_Access);
Raise_Exception_On_OpenGL_Error;
return Ret;
end Default_Width;

function Max_Framebuffer_Width return Size is
Ret : aliased Size;
begin
API.Get_Size (Enums.Getter.Max_Framebuffer_Width, Ret'Access);
Raise_Exception_On_OpenGL_Error;
return Ret;
end Max_Framebuffer_Width;

procedure Set_Default_Height (Target : in out Framebuffer_Target;
Value : Size) is
begin
API.Framebuffer_Parameter_Size (Target.Kind, Enums.Default_Height,
Value);
Raise_Exception_On_OpenGL_Error;
end Set_Default_Height;

function Default_Height (Target : Framebuffer_Target) return Size is
Ret : aliased Size;
begin
API.Get_Framebuffer_Parameter_Size (Target.Kind, Enums.Default_Height,
Ret'Unchecked_Access);
Raise_Exception_On_OpenGL_Error;
return Ret;
end Default_Height;

function Max_Framebuffer_Height return Size is
Ret : aliased Size;
begin
API.Get_Size (Enums.Getter.Max_Framebuffer_Height, Ret'Unchecked_Access);
Raise_Exception_On_OpenGL_Error;
return Ret;
end Max_Framebuffer_Height;

procedure Set_Default_Layers (Target : in out Framebuffer_Target;
Value : Size) is
begin
API.Framebuffer_Parameter_Size (Target.Kind, Enums.Default_Layers, Value);
Raise_Exception_On_OpenGL_Error;
end Set_Default_Layers;

function Default_Layers (Target : Framebuffer_Target) return Size is
Ret : aliased Size;
begin
API.Get_Framebuffer_Parameter_Size (Target.Kind, Enums.Default_Layers,
Ret'Unchecked_Access);
Raise_Exception_On_OpenGL_Error;
return Ret;
end Default_Layers;

function Max_Framebuffer_Layers return Size is
Ret : aliased Size;
begin
API.Get_Size (Enums.Getter.Max_Framebuffer_Layers, Ret'Unchecked_Access);
Raise_Exception_On_OpenGL_Error;
return Ret;
end Max_Framebuffer_Layers;

procedure Set_Default_Samples (Target : in out Framebuffer_Target;
Value : Size) is
begin
API.Framebuffer_Parameter_Size (Target.Kind, Enums.Default_Samples,
Value);
Raise_Exception_On_OpenGL_Error;
end Set_Default_Samples;

function Default_Samples
(Target : Framebuffer_Target) return Size is
Ret : aliased Size;
begin
API.Get_Framebuffer_Parameter_Size (Target.Kind, Enums.Default_Samples,
Ret'Unchecked_Access);
Raise_Exception_On_OpenGL_Error;
return Ret;
end Default_Samples;

function Max_Framebuffer_Samples return Size is
Ret : aliased Size;
begin
API.Get_Size (Enums.Getter.Max_Framebuffer_Samples, Ret'Unchecked_Access);
Raise_Exception_On_OpenGL_Error;
return Ret;
end Max_Framebuffer_Samples;

procedure Set_Default_Fixed_Sample_Locactions
(Target : in out Framebuffer_Target; Value : Boolean) is
begin
API.Framebuffer_Parameter_Bool
(Target.Kind, Enums.Default_Fixed_Sample_Locations,
Low_Level.Bool (Value));
Raise_Exception_On_OpenGL_Error;
end Set_Default_Fixed_Sample_Locactions;

function Default_Fixed_Sample_Locations (Target : Framebuffer_Target)
return Boolean is
Ret : aliased Low_Level.Bool;
begin
API.Get_Framebuffer_Parameter_Bool
(Target.Kind, Enums.Default_Fixed_Sample_Locations,
Ret'Unchecked_Access);
Raise_Exception_On_OpenGL_Error;
return Boolean (Ret);
end Default_Fixed_Sample_Locations;

procedure Initialize_Id (Object : in out Framebuffer) is
New_Id : UInt := 0;
Expand All @@ -88,7 +207,6 @@ package body GL.Objects.Framebuffers is
Object.Reference.Initialized := False;
end Delete_Id;


function Hash (Key : Low_Level.Enums.Framebuffer_Kind)
return Ada.Containers.Hash_Type is
function Value is new Ada.Unchecked_Conversion
Expand Down
26 changes: 26 additions & 0 deletions src/gl/interface/gl-objects-framebuffers.ads
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,32 @@ package GL.Objects.Framebuffers is
procedure Invalidate (Target : in out Framebuffer_Target;
Attachments : Attachment_List);

procedure Set_Default_Width (Target : in out Framebuffer_Target;
Value : Size);
function Default_Width (Target : Framebuffer_Target) return Size;
function Max_Framebuffer_Width return Size;

procedure Set_Default_Height (Target : in out Framebuffer_Target;
Value : Size);
function Default_Height (Target : Framebuffer_Target) return Size;
function Max_Framebuffer_Height return Size;

procedure Set_Default_Layers (Target : in out Framebuffer_Target;
Value : Size);
function Default_Layers (Target : Framebuffer_Target) return Size;
function Max_Framebuffer_Layers return Size;

procedure Set_Default_Samples (Target : in out Framebuffer_Target;
Value : Size);
function Default_Samples
(Target : Framebuffer_Target) return Size;
function Max_Framebuffer_Samples return Size;

procedure Set_Default_Fixed_Sample_Locactions
(Target : in out Framebuffer_Target; Value : Boolean);
function Default_Fixed_Sample_Locations (Target : Framebuffer_Target)
return Boolean;

-- copy from current Read to current Draw framebuffer
procedure Blit (Src_X0, Src_Y0, Src_X1, Src_Y1,
Dst_X0, Dst_Y0, Dst_X1, Dst_Y1 : Int;
Expand Down

0 comments on commit f7ed871

Please sign in to comment.