From 042e9a7f0f09cff1fee6bf7bd8a3464684e49b2b Mon Sep 17 00:00:00 2001 From: Roger Date: Sat, 6 Jul 2019 19:50:00 +1000 Subject: [PATCH 01/13] Transform feedback example (#126) --- examples/common/src/load_vb_object.adb | 13 +- examples/common/src/load_vb_object.ads | 2 +- examples/common/src/utilities.adb | 13 + examples/common/src/utilities.ads | 16 +- examples/redbook/03_feedback/.gitignore | 1 + examples/redbook/03_feedback/feedback.gpr | 15 + .../redbook/03_feedback/src/main_loop.adb | 384 ++++++++++++++++++ .../redbook/03_feedback/src/main_loop.ads | 4 + .../src/shaders/render_fragment_shader.glsl | 11 + .../src/shaders/render_vertex_shader.glsl | 19 + .../src/shaders/update_fragment_shader.glsl | 9 + .../src/shaders/update_vertex_shader.glsl | 96 +++++ .../03_feedback/src/transform_feedback.adb | 29 ++ .../redbook/03_instancing/src/main_loop.adb | 5 +- .../superbible/simplest/src/main_loop.adb | 2 +- src/gl/generated/gl-api.ads | 2 +- src/gl/implementation/gl-objects-programs.adb | 55 ++- src/gl/implementation/gl-objects-shaders.adb | 2 +- src/gl/interface/gl-fixed-lighting.ads | 4 +- src/gl/interface/gl-objects-programs.ads | 6 +- src/gl/specs/gl-api.spec | 5 +- 21 files changed, 648 insertions(+), 45 deletions(-) create mode 100644 examples/redbook/03_feedback/.gitignore create mode 100644 examples/redbook/03_feedback/feedback.gpr create mode 100644 examples/redbook/03_feedback/src/main_loop.adb create mode 100644 examples/redbook/03_feedback/src/main_loop.ads create mode 100755 examples/redbook/03_feedback/src/shaders/render_fragment_shader.glsl create mode 100755 examples/redbook/03_feedback/src/shaders/render_vertex_shader.glsl create mode 100755 examples/redbook/03_feedback/src/shaders/update_fragment_shader.glsl create mode 100755 examples/redbook/03_feedback/src/shaders/update_vertex_shader.glsl create mode 100644 examples/redbook/03_feedback/src/transform_feedback.adb diff --git a/examples/common/src/load_vb_object.adb b/examples/common/src/load_vb_object.adb index aa184b7c..773744a9 100644 --- a/examples/common/src/load_vb_object.adb +++ b/examples/common/src/load_vb_object.adb @@ -65,7 +65,7 @@ package body Load_VB_Object is -- ------------------------------------------------------------------------ - procedure Load_From_VBM (File_Name : String; VBM_Object : in out VB_Object; + procedure Load_From_VBM (File_Name : String; VBM_Object : out VB_Object; Vertex_Index, Normal_Index, Tex_Coord0_Index : Int; Result : out Boolean) is use Ada.Streams.Stream_IO; @@ -89,7 +89,6 @@ package body Load_VB_Object is Open (File_ID, In_File, File_Name); Data_Stream := Stream (File_ID); --- VBM_Header'Read (Data_Stream, VBM_Object.Header); Load_VBM_Header (Data_Stream, Header, Byte_Count); VBM_Object.Header := Header; -- Load attribute headers @@ -177,7 +176,8 @@ package body Load_VB_Object is procedure Load_Materials (Data_Stream : Ada.Streams.Stream_IO.Stream_Access; Header : VBM_Header; - Object : in out VB_Object) is Material_Record : VBM_Material; + Object : in out VB_Object) is + Material_Record : VBM_Material; Record_Count : UInt := 0; Materials_Data_Size : UInt; begin @@ -355,7 +355,8 @@ package body Load_VB_Object is if Instances > 0 then if VBM_Object.Header.Num_Indices > 0 then Draw_Elements_Instanced (Triangles, Frame.Num_Vertices, - GL.Types.UInt_Type, Frame.First); + GL.Types.UInt_Type, Frame.First, + Instances); else Vertex_Arrays.Draw_Arrays_Instanced (Triangles, Int (Frame.First), Int (Frame.Num_Vertices), @@ -363,8 +364,8 @@ package body Load_VB_Object is end if; else if VBM_Object.Header.Num_Indices > 0 then - Put_Line ("Load_VB_Object.Render Num_Indices > 0"); - null; + Draw_Elements (Triangles, Int (Frame.Num_Vertices), + GL.Types.UInt_Type, Integer (Frame.First)); else GL.Attributes.Set_Vertex_Attrib_Pointer (0, 4, Single_Type, False, 0, 0); diff --git a/examples/common/src/load_vb_object.ads b/examples/common/src/load_vb_object.ads index 9e77ff76..6959a0ef 100644 --- a/examples/common/src/load_vb_object.ads +++ b/examples/common/src/load_vb_object.ads @@ -18,7 +18,7 @@ package Load_VB_Object is type VB_Object is private; function Get_Vertex_Count (Object : VB_Object; Frame_Index : UInt := 1) return Int; - procedure Load_From_VBM (File_Name : String; VBM_Object : in out VB_Object; + procedure Load_From_VBM (File_Name : String; VBM_Object : out VB_Object; Vertex_Index, Normal_Index, Tex_Coord0_Index : Int; Result : out Boolean); procedure Print_Attributes_Header (Message : String; Object : VB_Object; diff --git a/examples/common/src/utilities.adb b/examples/common/src/utilities.adb index 9b7a838f..d8070e67 100644 --- a/examples/common/src/utilities.adb +++ b/examples/common/src/utilities.adb @@ -331,6 +331,19 @@ package body Utilities is -- ------------------------------------------------------------------------ + procedure Set_Uniform_Location (Shader_Program : GL.Objects.Programs.Program; + Location : String; + theUniform : in out GL.Uniforms.Uniform) is + use GL.Uniforms; + begin + theUniform := GL.Objects.Programs.Uniform_Location (Shader_Program, Location); + if theUniform < 0 then + Put_Line ("Set_Uniform_Location, Uniform " & Location & " not found."); + end if; + end Set_Uniform_Location; + + -- ------------------------------------------------------------------------- + procedure Show_Shader_Program_Data (aProgram : GL.Objects.Programs.Program) is use GL.Objects; Shaders_List : constant Shaders.Lists.List := diff --git a/examples/common/src/utilities.ads b/examples/common/src/utilities.ads index 8864f5e0..a1bcd4ca 100644 --- a/examples/common/src/utilities.ads +++ b/examples/common/src/utilities.ads @@ -3,6 +3,7 @@ with GL.Objects.Buffers; with GL.Objects.Programs; with GL.Types; with GL.Types.Colors; +with GL.Uniforms; with Glfw.Windows; @@ -22,15 +23,15 @@ package Utilities is GL.Objects.Buffers.Load_To_Buffer (GL.Types.Int_Pointers); procedure Load_Element_Buffer is new GL.Objects.Buffers.Load_To_Buffer (GL.Types.UInt_Pointers); + procedure Load_Texture_Buffer is new + GL.Objects.Buffers.Load_To_Buffer (GL.Types.Singles.Matrix4_Pointers); procedure Load_Vertex_Buffer is new GL.Objects.Buffers.Load_To_Buffer (GL.Types.Singles.Vector2_Pointers); procedure Load_Vertex_Buffer is new GL.Objects.Buffers.Load_To_Buffer (GL.Types.Singles.Vector3_Pointers); procedure Load_Vertex_Buffer is new GL.Objects.Buffers.Load_To_Buffer (GL.Types.Singles.Vector4_Pointers); - procedure Load_Texture_Buffer is new - GL.Objects.Buffers.Load_To_Buffer (GL.Types.Singles.Matrix4_Pointers); - procedure Load_Vector5_Buffer is new GL.Objects.Buffers.Load_To_Buffer + procedure Load_Vector5_Buffer is new GL.Objects.Buffers.Load_To_Buffer (Maths.Vector5_Pointers); procedure Load_Vector6_Buffer is new GL.Objects.Buffers.Load_To_Buffer (Maths.Vector6_Pointers); @@ -40,7 +41,7 @@ package Utilities is GL.Objects.Buffers.Set_Sub_Data (GL.Types.Singles.Vector4_Pointers); procedure Print_Array6 (Name : String; anArray : Maths.Vector6_Array); - procedure Print_Byte_Array (Name : String; anArray : Byte_Array; + procedure Print_Byte_Array (Name : String; anArray : Byte_Array; Start, Finish : GL.Types.UInt); procedure Print_GL_Array2 (Name : String; anArray : GL.Types.Ints.Vector2_Array); procedure Print_GL_Array2 (Name : String; anArray : GL.Types.Singles.Vector2_Array); @@ -51,14 +52,17 @@ package Utilities is procedure Print_GL_UInt_Array (Name : String; anArray : GL.Types.UInt_Array); procedure Print_Matrix (Name : String; aMatrix : GL.Types.Singles.Matrix3); procedure Print_Matrix (Name : String; aMatrix : GL.Types.Singles.Matrix4); - procedure Print_Singles_Array (Name : String; anArray : Singles_Array; + procedure Print_Singles_Array (Name : String; anArray : Singles_Array; Start, Finish : GL.Types.Int); procedure Print_Vector (Name : String; aVector : GL.Types.Singles.Vector2); procedure Print_Vector (Name : String; aVector : GL.Types.Ints.Vector3); procedure Print_Vector (Name : String; aVector : GL.Types.Singles.Vector3); procedure Print_Vector (Name : String; aVector : GL.Types.Singles.Vector4); + procedure Set_Uniform_Location (Shader_Program : GL.Objects.Programs.Program; + Location : String; + theUniform : in out GL.Uniforms.Uniform); procedure Show_Shader_Info_Log (aProgram : GL.Objects.Programs.Program); procedure Show_Shader_Program_Data (aProgram : GL.Objects.Programs.Program); procedure Show_GL_Data; -end Utilities; + end Utilities; diff --git a/examples/redbook/03_feedback/.gitignore b/examples/redbook/03_feedback/.gitignore new file mode 100644 index 00000000..80315f30 --- /dev/null +++ b/examples/redbook/03_feedback/.gitignore @@ -0,0 +1 @@ +transform_feedback diff --git a/examples/redbook/03_feedback/feedback.gpr b/examples/redbook/03_feedback/feedback.gpr new file mode 100644 index 00000000..f8f1d3b9 --- /dev/null +++ b/examples/redbook/03_feedback/feedback.gpr @@ -0,0 +1,15 @@ +with "../../common/common.gpr"; +with "../../../opengl.gpr"; +limited with "../../../opengl-glfw.gpr"; + +project Feedback is + + for Source_Dirs use ("src"); + for Object_Dir use "obj"; + for Exec_Dir use "."; + for Main use ("transform_feedback.adb"); + + package Compiler renames OpenGL.Compiler; + +end Feedback; + diff --git a/examples/redbook/03_feedback/src/main_loop.adb b/examples/redbook/03_feedback/src/main_loop.adb new file mode 100644 index 00000000..044bc7c3 --- /dev/null +++ b/examples/redbook/03_feedback/src/main_loop.adb @@ -0,0 +1,384 @@ + +with Ada.Numerics.Float_Random; + +with Ada.Text_IO; use Ada.Text_IO; + +with Interfaces.C.Pointers; + +with GL.Attributes; +with GL.Buffers; +with GL.Objects; +with GL.Objects.Buffers; +with GL.Objects.Programs; +with GL.Objects.Shaders; +with GL.Objects.Vertex_Arrays; +with GL.Pixels; +with GL.Toggles; +with GL.Types.Colors; +with GL.Uniforms; +with GL.Window; + +with Glfw; +with Glfw.Input; +with Glfw.Input.Keys; +with Glfw.Windows.Context; + +with Maths; +with Program_Loader; +with Utilities; + +with Load_VB_Object; + +procedure Main_Loop (Main_Window : in out Glfw.Windows.Window) is + use GL.Types; + + type PV_Buffer is record + Position : Singles.Vector4; + Velocity : Singles.Vector3; + end record; + + type PV_Buffer_Array is array (UInt range <>) of aliased PV_Buffer; + + package PV_Buffer_Package is new Interfaces.C.Pointers + (UInt, PV_Buffer, PV_Buffer_Array, PV_Buffer'(others => <>)); + procedure Map_PV_Buffer is new + GL.Objects.Buffers.Map (PV_Buffer_Package); + + Vec3_Size : constant UInt := GL.Types.Singles.Vector3'Size / 8; + Vec4_Size : constant UInt := GL.Types.Singles.Vector4'Size / 8; + PV_Buffer_Size : constant UInt := Vec4_Size + Vec3_Size; + Background : constant GL.Types.Colors.Color := (0.0, 1.0, 0.0, 0.0); + + Update_Program : GL.Objects.Programs.Program; + VAO : array (1 .. 2) of GL.Objects.Vertex_Arrays.Vertex_Array_Object; + VBO : array (1 .. 2) of GL.Objects.Buffers.Buffer; + + Render_Program : GL.Objects.Programs.Program; + Geometry_VBO : GL.Objects.Buffers.Buffer; + Render_VAO : GL.Objects.Vertex_Arrays.Vertex_Array_Object; + Render_Model_Matrix_ID : GL.Uniforms.Uniform; + Render_Projection_Matrix_ID : GL.Uniforms.Uniform; + + Geometry_Texture : GL.Objects.Buffers.Buffer; + + Model_Matrix_ID : GL.Uniforms.Uniform; + Projection_Matrix_ID : GL.Uniforms.Uniform; + Triangle_Count_ID : GL.Uniforms.Uniform; + Time_Step_ID : GL.Uniforms.Uniform; + + VBM_Object : Load_VB_Object.VB_Object; + + Random_Gen : Ada.Numerics.Float_Random.Generator; + Num_Points : constant UInt := 5000; -- Point_Count + + -- Display variables + Frame_Count : UInt := 1; + Last_Time : Float := 0.0; -- q + + -- ------------------------------------------------------------------------ + + function Random_Vector (Min_Mag : Float := 0.0; Max_Mag : Float := 1.0) + return GL.Types.Singles.Vector3 is + use Ada.Numerics.Float_Random; + use GL.Types.Singles; + RV : Vector3; + begin + RV := (2.0 * Single (Random (Random_Gen)) - 1.0, + 2.0 * Single (Random (Random_Gen)) - 1.0, + 2.0 * Single (Random (Random_Gen)) - 1.0); + RV := Single (Min_Mag + Random (Random_Gen) * (Max_Mag - Min_Mag)) * RV; + return Maths.Normalized (RV); + + exception + when others => + Put_Line ("An exception occurred in Main_Loop.Random_Vector."); + raise; + end Random_Vector; + + -- ------------------------------------------------------------------------ + + procedure Display (Window : in out Glfw.Windows.Window) is + use GL.Objects.Buffers; + use GL.Types.Singles; + use Maths; + Window_Width : Glfw.Size; + Window_Height : Glfw.Size; + Aspect : Single; + Model_Matrix : Singles.Matrix4 := Identity4; + Projection_Matrix : Singles.Matrix4; + Scale : constant Single := 0.003; + Current_Time : Float; -- t + begin + Current_Time := Float (Glfw.Time); + Utilities.Clear_Background_Colour_And_Depth (Background); + + Window.Get_Framebuffer_Size (Window_Width, Window_Height); + GL.Window.Set_Viewport (0, 0, GL.Types.Int (Window_Width), + GL.Types.Int (Window_Height)); + Aspect := Single (Window_Height) / Single (Window_Width); + + Init_Orthographic_Transform (-1.0, 1.0, -Aspect, Aspect, -1.0, 5000.0, + Projection_Matrix); + Projection_Matrix := Translation_Matrix ((0.0, 0.0, 1.99)) * + Projection_Matrix; + + Model_Matrix := Scaling_Matrix (Scale) * + Rotation_Matrix (Degree (360.0 * Current_Time), (0.0, 1.0, 0.0)) * + Rotation_Matrix (Degree (360.0 * 3.0 * Current_Time), (0.0, 0.0, 1.0)) * + Model_Matrix; + + GL.Toggles.Enable (GL.Toggles.Cull_Face); + GL.Buffers.Set_Depth_Function (LEqual); + + GL.Objects.Programs.Use_Program (Render_Program); + GL.Uniforms.Set_Single (Render_Model_Matrix_ID, Model_Matrix); + GL.Uniforms.Set_Single (Render_Projection_Matrix_ID, Projection_Matrix); + + Render_VAO.Bind; + Transform_Feedback_Buffer.Bind_Buffer_Base (0, Geometry_VBO); + + GL.Objects.Programs.Begin_Transform_Feedback (Triangles); + Load_VB_Object.Render (VBM_Object); + GL.Objects.Programs.End_Transform_Feedback; + + GL.Objects.Programs.Use_Program (Update_Program); + + Model_Matrix := Scaling_Matrix (Scale) * Identity4; + GL.Uniforms.Set_Single (Model_Matrix_ID, Model_Matrix); + GL.Uniforms.Set_Single (Projection_Matrix_ID, Projection_Matrix); + GL.Uniforms.Set_Int (Triangle_Count_ID, + Load_VB_Object.Get_Vertex_Count (VBM_Object) / 3); + + if Current_Time > Last_Time then -- t > q + GL.Uniforms.Set_Single (Time_Step_ID, + 2000.0 * Single (Current_Time - Last_Time)); + end if; + Last_Time := Current_Time; -- q = t + + if (Frame_Count rem 2) = 0 then -- (frame_count & 1) != 0 + VAO (2).Bind; + Transform_Feedback_Buffer.Bind_Buffer_Base (0, VBO (1)); + else + VAO (1).Bind; + Transform_Feedback_Buffer.Bind_Buffer_Base (0, VBO (2)); + end if; + + GL.Objects.Programs.Begin_Transform_Feedback (Points); + GL.Objects.Vertex_Arrays.Draw_Arrays + (Mode => GL.Types.Points, First => 0, + Count => GL.Types.Size (UInt'Min (Num_Points, Frame_Count))); + GL.Objects.Programs.End_Transform_Feedback; + + GL.Objects.Vertex_Arrays.Bind (GL.Objects.Vertex_Arrays.Null_Array_Object); + + if Frame_Count > 5000 then + Frame_Count := 0; + else + Frame_Count := Frame_Count + 1; + end if; + + exception + when others => + Put_Line ("An exception occurred in Main_Loop.Display."); + raise; + end Display; + + -- ------------------------------------------------------------------------ + -- Load_PV_Buffer loads Transform_Feedback_Buffer with data points + procedure Load_PV_Buffer is + use GL.Objects.Buffers; + use GL.Types.Singles; + Buffer_Pointer : PV_Buffer_Package.Pointer; -- to PV_Buffer_Array + Velocity : Vector3; + begin + Map_PV_Buffer (Transform_Feedback_Buffer, GL.Objects.Write_Only, Buffer_Pointer); + for B_Index in 1 .. Num_Points loop -- j + Velocity := Random_Vector; + Buffer_Pointer.Position := To_Vector4 (Velocity) + (-0.5, 40.0, 0.0, 0.0); + Buffer_Pointer.Position := To_Vector4 (0.1 * Velocity) + (-0.5, 0.2, 0.0, 0.0); + Buffer_Pointer.Velocity := (Velocity (GL.X), 0.3 * Velocity (GL.Y), + 0.3 * Velocity (GL.Z)); + PV_Buffer_Package.Increment (Buffer_Pointer); + end loop; + Unmap (Transform_Feedback_Buffer); + exception + when others => + Put_Line ("An exception occurred in Main_Loop.Load_PV_Buffer."); + raise; + end Load_PV_Buffer; + + -- ------------------------------------------------------------------------ + + function Setup return Boolean is + use GL.Objects.Buffers; + use GL.Objects.Programs; + use GL.Objects.Shaders; + use Program_Loader; + VBM_Result : Boolean := False; + Varyings : constant String := "position1,velocity1"; + Varyings_2 : constant String := "world_space_position1"; + Name : String (1 .. 30); + Name_Length : GL.Types.Size := 99; + V_Length : GL.Types.Size := 99; + Max_Length : Int; + V_Type : Buffer_Mode; + begin + VAO (1).Initialize_Id; + VAO (1).Bind; + VAO (2).Initialize_Id; + VAO (2).Bind; + Render_VAO.Initialize_Id; + GL.Objects.Vertex_Arrays.Bind (Render_VAO); + + for index in VBO'Range loop + VBO (index).Initialize_Id; + Transform_Feedback_Buffer.Bind (VBO (index)); + end loop; + + -- Program_From includes linking + Update_Program := Program_From + ((Src ("src/shaders/update_vertex_shader.glsl", Vertex_Shader), + Src ("src/shaders/update_fragment_shader.glsl", Fragment_Shader))); + + if not GL.Objects.Programs.Link_Status (Update_Program) then + Put_Line ("Setup, Update_Program Link failed"); + Put_Line (GL.Objects.Programs.Info_Log (Update_Program)); + else + Put_Line ("Setup, Update_Program Link ok"); + end if; + + GL.Objects.Programs.Use_Program (Update_Program); + Transform_Feedback_Varyings (Update_Program, Varyings, Interleaved_Attribs); + Update_Program.Link; + + if not GL.Objects.Programs.Link_Status (Update_Program) then + Put_Line ("Setup, Update_Program Transform_Feedback_Varyings Link failed."); + Put_Line (GL.Objects.Programs.Info_Log (Update_Program)); + else + Put_Line ("Setup, Update_Program Transform_Feedback_Varyings Link ok"); + end if; + + V_Type := Transform_Feedback_Buffer_Mode (Update_Program); + V_Length := Transform_Feedback_Varyings_Size (Update_Program); + Max_Length := Transform_Feedback_Varying_Max_Length (Update_Program); + Put_Line ("V_Type: " & Buffer_Mode'Image (V_Type) & " V_Length: " & + Int'Image (V_Length) & " Max Length: " & Int'Image (Max_Length)); + + Get_Transform_Feedback_Varying (Object => Update_Program, + Index => 0, + Length => Name_Length, + V_Length => V_Length, + V_Type => V_Type, + Name => Name); + + Put_Line ("Name: " & Name); + Put_Line ("Length: " & Int'Image (Name_Length)); + Put_Line ("V_Length" & Int'Image (V_Length)); + if V_Type = Interleaved_Attribs or V_Type = Separate_Attribs then + Put_Line ("V_Type: " & Buffer_Mode'Image (V_Type)); + else + Put_Line ("Setup, Get_Transform_Feedback_Varying returned an invalid Buffer_Mode value: " + & Integer'Image (V_Type'Enum_Rep)); + end if; + + Model_Matrix_ID := GL.Objects.Programs.Uniform_Location + (Update_Program, "model_matrix"); + Projection_Matrix_ID := GL.Objects.Programs.Uniform_Location + (Update_Program, "projection_matrix"); + Triangle_Count_ID := GL.Objects.Programs.Uniform_Location + (Update_Program, "triangle_count"); + Time_Step_ID := GL.Objects.Programs.Uniform_Location + (Update_Program, "time_step"); + Put_Line (GL.Objects.Programs.Info_Log (Update_Program)); + + Render_Program := Program_From + ((Src ("src/shaders/render_vertex_shader.glsl", Vertex_Shader), + Src ("src/shaders/render_fragment_shader.glsl", Fragment_Shader))); + + Transform_Feedback_Varyings (Render_Program, Varyings_2, Interleaved_Attribs); + Render_Program.Link; + if not GL.Objects.Programs.Link_Status (Render_Program) then + Put_Line ("Setup, Render_Program Link failed"); + Put_Line (GL.Objects.Programs.Info_Log (Render_Program)); + else + Put_Line ("Setup, Render_Program Link OK"); + end if; + + GL.Objects.Programs.Use_Program (Render_Program); + Render_Model_Matrix_ID := GL.Objects.Programs.Uniform_Location + (Render_Program, "model_matrix"); + Render_Projection_Matrix_ID := GL.Objects.Programs.Uniform_Location + (Render_Program, "projection_matrix"); + + for index in VBO'Range loop + Transform_Feedback_Buffer.Bind (VBO (index)); + Transform_Feedback_Buffer.Allocate + (Long (Num_Points * PV_Buffer_Size), Dynamic_Copy); + if index = VBO'First then + Load_PV_Buffer; + end if; + + VAO (index).Bind; + Array_Buffer.Bind (VBO (index)); + + GL.Attributes.Set_Vertex_Attrib_Pointer + (0, 4, Single_Type, True, Int (PV_Buffer_Size), 0); + GL.Attributes.Set_Vertex_Attrib_Pointer + (1, 3, Single_Type, True, Int (PV_Buffer_Size), Int (Vec4_Size)); + GL.Attributes.Enable_Vertex_Attrib_Array (0); + GL.Attributes.Enable_Vertex_Attrib_Array (1); + end loop; + + Geometry_VBO.Initialize_Id; + Geometry_Texture.Initialize_Id; + Texture_Buffer.Bind (Geometry_VBO); + Allocate (Texture_Buffer, Long (1024 * 1024 * Vec4_Size), Dynamic_Copy); + Texture_Buffer.Bind (Geometry_Texture); + Allocate (Texture_Buffer, GL.Pixels.RGBA32F, Geometry_VBO); + + Render_VAO.Bind; + Array_Buffer.Bind (Geometry_VBO); + GL.Attributes.Set_Vertex_Attrib_Pointer (0, 4, Single_Type, True, 0, 0); + GL.Attributes.Enable_Vertex_Attrib_Array (0); + + Utilities.Clear_Background_Colour_And_Depth (Background); + + Load_VB_Object.Load_From_VBM ("../media/armadillo_low.vbm", VBM_Object, + 0, 1, 2, VBM_Result); + VBM_Result := VBM_Result and Load_VB_Object.Get_Vertex_Count (VBM_Object) > 0; + + If not VBM_Result then + Put_Line ("Main_Loop.Setup; Load_From_VBM failed."); + end if; + Load_VB_Object.Print_VBM_Object_Data ("Setup", VBM_Object); + return VBM_Result; + + exception + when others => + Put_Line ("An exception occurred in Main_Loop.Setup."); + raise; + end Setup; + + -- ------------------------------------------------------------------------ + + use Glfw.Input; + Running : Boolean := True; +begin + if Setup then + while Running loop +-- delay (0.03); + Display (Main_Window); + Glfw.Windows.Context.Swap_Buffers (Main_Window'Access); + Glfw.Input.Poll_Events; + delay (0.03); + Running := Running and not + (Main_Window.Key_State (Glfw.Input.Keys.Escape) = Glfw.Input.Pressed); + Running := Running and not Main_Window.Should_Close; + end loop; + end if; + +exception + when others => + Put_Line ("An exception occurred in Main_Loop."); + raise; +end Main_Loop; diff --git a/examples/redbook/03_feedback/src/main_loop.ads b/examples/redbook/03_feedback/src/main_loop.ads new file mode 100644 index 00000000..cc564482 --- /dev/null +++ b/examples/redbook/03_feedback/src/main_loop.ads @@ -0,0 +1,4 @@ + +with Glfw.Windows; + +procedure Main_Loop (Main_Window : in out Glfw.Windows.Window); diff --git a/examples/redbook/03_feedback/src/shaders/render_fragment_shader.glsl b/examples/redbook/03_feedback/src/shaders/render_fragment_shader.glsl new file mode 100755 index 00000000..08c2b1db --- /dev/null +++ b/examples/redbook/03_feedback/src/shaders/render_fragment_shader.glsl @@ -0,0 +1,11 @@ +#version 410 core + +layout (location = 0) out vec4 color; + +in vec3 vs_fs_normal; + +void main(void) + { + // color = vec4(0.0, 0.2, 0.0, 1.0) + vec4(0.2, 0.5, 0.4, 1.0) * abs(vs_fs_normal.z) + // vec4(0.8, 0.9, 0.7, 1.0) * pow(abs(vs_fs_normal.z), 70.0); + color = vec4(0.0, 0.0, 1.0, 1.0); + } diff --git a/examples/redbook/03_feedback/src/shaders/render_vertex_shader.glsl b/examples/redbook/03_feedback/src/shaders/render_vertex_shader.glsl new file mode 100755 index 00000000..dec268e8 --- /dev/null +++ b/examples/redbook/03_feedback/src/shaders/render_vertex_shader.glsl @@ -0,0 +1,19 @@ +#version 410 core + +layout (location = 0) in vec4 position; +layout (location = 1) in vec3 normal; + +out vec4 world_space_position1; +out vec3 vs_fs_normal; + +uniform mat4 model_matrix; +uniform mat4 projection_matrix; + +void main(void) + { + // vec4 pos = (model_matrix * (position * vec4(1.0, 1.0, 1.0, 1.0))); + vec4 pos = model_matrix * position; + world_space_position1 = pos; + vs_fs_normal = normalize((model_matrix * vec4(normal, 0.0)).xyz); + gl_Position = projection_matrix * pos; + } diff --git a/examples/redbook/03_feedback/src/shaders/update_fragment_shader.glsl b/examples/redbook/03_feedback/src/shaders/update_fragment_shader.glsl new file mode 100755 index 00000000..cb62e585 --- /dev/null +++ b/examples/redbook/03_feedback/src/shaders/update_fragment_shader.glsl @@ -0,0 +1,9 @@ +#version 410 core + +layout (location = 0) out vec4 colour; + +void main(void) + { + colour = vec4(1.0, 1.0, 1.0, 1.0); + // colour = vec4(1.0); + } diff --git a/examples/redbook/03_feedback/src/shaders/update_vertex_shader.glsl b/examples/redbook/03_feedback/src/shaders/update_vertex_shader.glsl new file mode 100755 index 00000000..f5189cf9 --- /dev/null +++ b/examples/redbook/03_feedback/src/shaders/update_vertex_shader.glsl @@ -0,0 +1,96 @@ +#version 410 core + +layout (location = 0) in vec4 position; +layout (location = 1) in vec3 velocity; + +out vec4 position1; // transform feedback varyings +out vec3 velocity1; // transform feedback varyings + +uniform mat4 model_matrix; +uniform mat4 projection_matrix; +uniform int triangle_count; + +uniform samplerBuffer geometry_tbo; +uniform float time_step = 0.02; + +bool intersect(vec3 origin, vec3 direction, vec3 v0, vec3 v1, vec3 v2, out vec3 point) + { + vec3 u, v, n; + vec3 w0, w; + float r, a, b; + float uu, uv, vv, wu, wv, D; + float s, t; + + u = (v1 - v0); + v = (v2 - v0); + n = cross(u, v); +// if (length(n) < 0.1) +// return false; + + w0 = origin - v0; + a = -dot(n, w0); + b = dot(n, direction); +// if (abs(b) < 0.1) +// return false; + + r = a / b; + if (r < 0.0 || r > 1.0) + return false; + + point = origin + r * direction; + + uu = dot(u, u); + uv = dot(u, v); + vv = dot(v, v); + w = point - v0; + wu = dot(w, u); + wv = dot(w, v); + D = uv * uv - uu * vv; + + s = (uv * wv - vv * wu) / D; + if (s < 0.0 || s > 1.0) + return false; + + t = (uv * wu - uu * wv) / D; + if (t < 0.0 || (s + t) > 1.0) + return false; + + return true; + } + +vec3 reflect_vector(vec3 v, vec3 n) + { + return v - 2.0 * dot(v, n) * n; + } + +void main(void) + { + vec3 accelleration = vec3(0.0, -0.3, 0.0); + vec3 new_velocity = velocity + accelleration * time_step; + vec4 new_position = position + vec4(new_velocity * time_step, 0.0); + vec3 v0, v1, v2; + vec3 point; + int i; + + for (i = 0; i < triangle_count; i++) + { + v0 = texelFetch(geometry_tbo, i * 3).xyz; + v1 = texelFetch(geometry_tbo, i * 3 + 1).xyz; + v2 = texelFetch(geometry_tbo, i * 3 + 2).xyz; + if (intersect(position.xyz, position.xyz - new_position.xyz, v0, v1, v2, point)) + { + vec3 n = normalize(cross(v1 - v0, v2 - v0)); + new_position = vec4(point + reflect_vector(new_position.xyz - point, n), 1.0); + new_velocity = 0.8 * reflect_vector(new_velocity, n); + } + } + + if (new_position.y < -40.0) + { + new_position = vec4(-new_position.x * 0.3, position.y + 80.0, 0.0, 1.0); + new_velocity *= vec3(0.2, 0.1, -0.3); + } + velocity1 = new_velocity * 0.9999; + position1 = new_position; + gl_Position = projection_matrix * (model_matrix * position); + } diff --git a/examples/redbook/03_feedback/src/transform_feedback.adb b/examples/redbook/03_feedback/src/transform_feedback.adb new file mode 100644 index 00000000..afa1e19a --- /dev/null +++ b/examples/redbook/03_feedback/src/transform_feedback.adb @@ -0,0 +1,29 @@ + +with Ada.Exceptions; use Ada.Exceptions; +with Ada.Text_IO; use Ada.Text_IO; + +with Glfw; +with Glfw.Windows; + +with Initialize; +with Main_Loop; + +procedure Transform_Feedback is + Main_Window : Glfw.Windows.Window; + Window_Title : constant String := "Red Book Tutorial 3 - Transform_Feedback"; +begin + Glfw.Init; + Initialize (Main_Window, Window_Title); + Main_Loop (Main_Window); + Glfw.Shutdown; + +exception + when anError : Constraint_Error => + Put ("Transform_Feedback returned a constraint error: "); + Put_Line (Exception_Information (anError)); + + when anError : others => + Put_Line ("An exception occurred in Transform_Feedback."); + Put_Line (Exception_Information (anError)); + +end Transform_Feedback; diff --git a/examples/redbook/03_instancing/src/main_loop.adb b/examples/redbook/03_instancing/src/main_loop.adb index f364a02e..2503df08 100644 --- a/examples/redbook/03_instancing/src/main_loop.adb +++ b/examples/redbook/03_instancing/src/main_loop.adb @@ -186,9 +186,8 @@ procedure Main_Loop (Main_Window : in out Glfw.Windows.Window) is Model_Matrix_Buffer.Initialize_Id; Texture_Buffer.Bind (Model_Matrix_Buffer); - Allocate (Texture_Buffer, - Long (Num_Instances * Singles.Matrix4'Size), - Dynamic_Draw); + Allocate (Texture_Buffer, Long (Num_Instances * Singles.Matrix4'Size), + Dynamic_Draw); Allocate (Texture_Buffer, GL.Pixels.RGBA32F, Model_Matrix_Buffer); GL.Objects.Textures.Set_Active_Unit (0); diff --git a/examples/superbible/simplest/src/main_loop.adb b/examples/superbible/simplest/src/main_loop.adb index db79a0dd..b141f5ef 100644 --- a/examples/superbible/simplest/src/main_loop.adb +++ b/examples/superbible/simplest/src/main_loop.adb @@ -59,7 +59,7 @@ procedure Main_Loop (Main_Window : in out Glfw.Windows.Window) is Vertex_Array.Bind; -- Point size is set in the vertex shader GL.Toggles.Enable (GL.Toggles.Vertex_Program_Point_Size); - Utilities.Show_Shader_Program_Data (Rendering_Program); +-- Utilities.Show_Shader_Program_Data (Rendering_Program); end Setup_Graphic; -- ---------------------------------------------------------------------------- diff --git a/src/gl/generated/gl-api.ads b/src/gl/generated/gl-api.ads index 5d5d53fa..8f99fcd9 100644 --- a/src/gl/generated/gl-api.ads +++ b/src/gl/generated/gl-api.ads @@ -371,7 +371,7 @@ private package GL.API is pragma Convention (StdCall, T171); type T172 is access procedure (P1 : Connection_Mode); pragma Convention (StdCall, T172); - type T173 is access procedure (P1 : UInt; P2 : Int; P3 : Size; P4 : Size; P5 : Size; P6 : GL.Objects.Programs.Buffer_Mode; P7 : Interfaces.C.char_array); + type T173 is access procedure (P1 : UInt; P2 : Int; P3 : Size; P4 : out Size; P5 : out Size; P6 : out GL.Objects.Programs.Buffer_Mode; P7 : in out Interfaces.C.char_array); pragma Convention (StdCall, T173); type T174 is access procedure (P1 : UInt; P2 : Size; P3 : Low_Level.Char_Access_Array; P4 : GL.Objects.Programs.Buffer_Mode); pragma Convention (StdCall, T174); diff --git a/src/gl/implementation/gl-objects-programs.adb b/src/gl/implementation/gl-objects-programs.adb index 87290959..2ad7ead1 100644 --- a/src/gl/implementation/gl-objects-programs.adb +++ b/src/gl/implementation/gl-objects-programs.adb @@ -153,16 +153,16 @@ package body GL.Objects.Programs is function Transform_Feedback_Buffer_Mode (Object : Program) return Buffer_Mode is Program_Buffer_Mode_Param : constant Buffer_Mode := - Buffer_Mode'Enum_Val - (Program_Int_Param (Object, Enums.Transform_Feedback_Buffer_Mode)); + Buffer_Mode'Enum_Val + (Program_Int_Param (Object, Enums.Transform_Feedback_Buffer_Mode)); begin return Program_Buffer_Mode_Param; end Transform_Feedback_Buffer_Mode; - function Transform_Feedback_Varyings (Object : Program) return Size is + function Transform_Feedback_Varyings_Size (Object : Program) return Size is begin return Program_Size_Param (Object, Enums.Transform_Feedback_Varyings); - end Transform_Feedback_Varyings; + end Transform_Feedback_Varyings_Size; function Transform_Feedback_Varying_Max_Length (Object : Program) return Size is @@ -184,13 +184,30 @@ package body GL.Objects.Programs is end End_Transform_Feedback; procedure Get_Transform_Feedback_Varying - (Object : Program; Index, Buffer_Size, Length, V_Length : Integer; - V_Type : Buffer_Mode; Name : String) is - begin - API.Get_Transform_Feedback_Varying - (Object.Reference.GL_Id, Int (Index), Size (Buffer_Size), Size (Length), - Size (V_Length), V_Type, Interfaces.C.To_C (Name)); - Raise_Exception_On_OpenGL_Error; + (Object : Program; Index : Int; Length, V_Length : out Size; + V_Type : out Buffer_Mode; Name : out String) is + use Interfaces.C; + Buffer_Size : constant Size := Name'Length + 1; + C_Name : Interfaces.C.char_array (1 .. size_t (Buffer_Size + 1)); + begin + if Buffer_Size > 1 then + V_Length := Transform_Feedback_Varyings_Size (Object); + if V_Length > 0 and then + Transform_Feedback_Varying_Max_Length (Object) > 0 then + API.Get_Transform_Feedback_Varying + (Object.Reference.GL_Id, Index, Buffer_Size, + Length, V_Length, V_Type, C_Name); + Raise_Exception_On_OpenGL_Error; + Name (Name'First .. Name'First + Integer (Length) - 1) := + Interfaces.C.To_Ada (C_Name); + else + raise Constraint_Error with + "Get_Transform_Feedback_Varying, Max_Length or V_Length is 0"; + end if; + else + raise Constraint_Error with + "Get_Transform_Feedback_Varying, String must have at least one character"; + end if; end Get_Transform_Feedback_Varying; procedure Transform_Feedback_Varyings @@ -199,18 +216,18 @@ package body GL.Objects.Programs is use type Interfaces.C.char; Parameter_Buffer : Interfaces.C.char_array := - Interfaces.C.To_C (Varyings); - Pointer_Array : Low_Level.Char_Access_Array + Interfaces.C.To_C (Varyings); + Pointer_Array : Low_Level.Char_Access_Array (1 .. Parameter_Buffer'Length / 2); - -- cannot be longer than this if every name has a length of at least 1 - Pointer_Count : Size := 0; + -- cannot be longer than this if every name has a length of at least 1 + Pointer_Count : Size := 0; Recent_Was_Comma : Boolean := True; begin for Pos in Parameter_Buffer'First .. Parameter_Buffer'Last - 1 loop if Parameter_Buffer (Pos) = ',' then if Recent_Was_Comma then raise Constraint_Error with - "every varying name must have at least one character"; + "Get_Transform_Feedback_Varying, every varying name must have at least one character"; end if; Parameter_Buffer (Pos) := Interfaces.C.nul; Recent_Was_Comma := True; @@ -344,8 +361,8 @@ package body GL.Objects.Programs is end Uniform_Location; procedure Bind_Attrib_Location (Subject : Program; - Index : Attributes.Attribute; - Name : String) is + Index : Attributes.Attribute; + Name : String) is begin API.Bind_Attrib_Location (Subject.Reference.GL_Id, Index, Interfaces.C.To_C (Name)); @@ -379,7 +396,7 @@ package body GL.Objects.Programs is procedure Bind_Frag_Data_Location (Object : Program; Color_Number : Buffers.Draw_Buffer_Index; - Name : String) is + Name : String) is begin API.Bind_Frag_Data_Location (Object.Reference.GL_Id, Color_Number, C.To_C (Name)); diff --git a/src/gl/implementation/gl-objects-shaders.adb b/src/gl/implementation/gl-objects-shaders.adb index ce131fdb..914249f9 100644 --- a/src/gl/implementation/gl-objects-shaders.adb +++ b/src/gl/implementation/gl-objects-shaders.adb @@ -10,7 +10,7 @@ package body GL.Objects.Shaders is C_Source : C.char_array := C.To_C (Source); begin API.Shader_Source (Subject.Reference.GL_Id, 1, - (1 => C_Source (C_Source'First)'Unchecked_Access), + (1 => C_Source (0)'Unchecked_Access), (1 => Source'Length)); Raise_Exception_On_OpenGL_Error; end Set_Source; diff --git a/src/gl/interface/gl-fixed-lighting.ads b/src/gl/interface/gl-fixed-lighting.ads index 031d72be..9a618a22 100644 --- a/src/gl/interface/gl-fixed-lighting.ads +++ b/src/gl/interface/gl-fixed-lighting.ads @@ -1,6 +1,8 @@ -- part of OpenGLAda, (c) 2017 Felix Krause -- released under the terms of the MIT license, see the file "COPYING" +pragma Warnings (Off, "use of an anonymous access type allocator"); + with GL.Types.Colors; private with GL.Low_Level; @@ -89,4 +91,4 @@ private Smooth => 16#1D01#); for Shade_Model'Size use Low_Level.Enum'Size; -end GL.Fixed.Lighting; \ No newline at end of file +end GL.Fixed.Lighting; diff --git a/src/gl/interface/gl-objects-programs.ads b/src/gl/interface/gl-objects-programs.ads index c0444edd..daf6a6a8 100644 --- a/src/gl/interface/gl-objects-programs.ads +++ b/src/gl/interface/gl-objects-programs.ads @@ -62,7 +62,7 @@ package GL.Objects.Programs is function Transform_Feedback_Buffer_Mode (Object : Program) return Buffer_Mode; - function Transform_Feedback_Varyings (Object : Program) return Size; + function Transform_Feedback_Varyings_Size (Object : Program) return Size; function Transform_Feedback_Varying_Max_Length (Object : Program) return Size; @@ -72,8 +72,8 @@ package GL.Objects.Programs is procedure End_Transform_Feedback; procedure Get_Transform_Feedback_Varying - (Object : Program; Index, Buffer_Size, Length, V_Length : Integer; - V_Type : Buffer_Mode; Name : String); + (Object : Program; Index : Int; Length, V_Length : out Size; + V_Type : out Buffer_Mode; Name : out String); procedure Transform_Feedback_Varyings (Object : Program; Varyings : String; Mode : Buffer_Mode); diff --git a/src/gl/specs/gl-api.spec b/src/gl/specs/gl-api.spec index b913733c..2387610b 100644 --- a/src/gl/specs/gl-api.spec +++ b/src/gl/specs/gl-api.spec @@ -1070,7 +1070,6 @@ spec GL.API is Wrapper => "GL.Objects.Programs.Transform_Feedback_Buffer_Mode", Wrapper => "GL.Objects.Programs.Transform_Feedback_Varyings", Wrapper => "GL.Objects.Programs.Transform_Feedback_Varying_Max_Length", - Wrapper => "GL.Objects.Programs.Get_Transform_Feedback_Varying", Wrapper => "GL.Objects.Programs.Begin_Transform_Feedback", Wrapper => "GL.Objects.Programs.End_Transform_Feedback"; procedure Attach_Shader (Program, Shader : UInt) with @@ -1162,8 +1161,8 @@ spec GL.API is Wrapper => "GL.Objects.Programs.End_Transform_Feedback"; procedure Get_Transform_Feedback_Varying (Program : UInt; Index : Int; Buffer_Size : Size; - Length : Size; V_Length : Size; V_Type : GL.Objects.Programs.Buffer_Mode; - Name : Interfaces.C.char_array) with + Length : out Size; V_Length : out Size; V_Type : out GL.Objects.Programs.Buffer_Mode; + Name : in out Interfaces.C.char_array) with Dynamic => "glGetTransformFeedbackVarying", Wrapper => "GL.Objects.Programs.Get_Transform_Feedback_Varying"; procedure Transform_Feedback_Varyings From bda37efb4630e94e5ca635ddf8264a004075021e Mon Sep 17 00:00:00 2001 From: Felix Krause Date: Sat, 6 Jul 2019 12:33:38 +0200 Subject: [PATCH 02/13] removed unnecessary heap allocation --- opengl.gpr | 5 +++-- src/gl/implementation/gl-fixed-lighting.adb | 6 ++++-- src/gl/interface/gl-fixed-lighting.ads | 15 ++------------- 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/opengl.gpr b/opengl.gpr index 2f7f380f..0c38bb62 100644 --- a/opengl.gpr +++ b/opengl.gpr @@ -11,9 +11,10 @@ library project OpenGL is -- * x11 : X Window System -- * quartz : Quartz Compositor (OS X) type Windowing_System_Type is - ("windows", "x11", "quartz"); + ("windows", "x11", "quartz"); + -- has a default so that the project can be opened in GPS. Windowing_System : Windowing_System_Type - := external ("Windowing_System"); + := external ("Windowing_System", "quartz"); type Mode_Type is ("debug", "release"); Mode : Mode_Type := external ("Mode", "debug"); diff --git a/src/gl/implementation/gl-fixed-lighting.adb b/src/gl/implementation/gl-fixed-lighting.adb index da65ad83..223c084e 100644 --- a/src/gl/implementation/gl-fixed-lighting.adb +++ b/src/gl/implementation/gl-fixed-lighting.adb @@ -12,7 +12,8 @@ package body GL.Fixed.Lighting is function Light (Index : Light_Index) return Light_Object is begin - return Lights (Index).all; + return Light_Object'(Identifier => Toggles.Toggle'Val ( + Toggles.Toggle'Pos (Toggles.Light0) + Index)); end Light; procedure Enable_Lighting is @@ -194,7 +195,8 @@ package body GL.Fixed.Lighting is Raise_Exception_On_OpenGL_Error; end Set_Spot_Direction; - function Spot_Direction (Source : Light_Object) return Types.Singles.Vector3 is + function Spot_Direction (Source : Light_Object) + return Types.Singles.Vector3 is Value : Singles.Vector3; begin API.Get_Light_Direction (Source.Identifier, Enums.Spot_Direction, diff --git a/src/gl/interface/gl-fixed-lighting.ads b/src/gl/interface/gl-fixed-lighting.ads index 9a618a22..b5d60055 100644 --- a/src/gl/interface/gl-fixed-lighting.ads +++ b/src/gl/interface/gl-fixed-lighting.ads @@ -1,8 +1,6 @@ -- part of OpenGLAda, (c) 2017 Felix Krause -- released under the terms of the MIT license, see the file "COPYING" -pragma Warnings (Off, "use of an anonymous access type allocator"); - with GL.Types.Colors; private with GL.Low_Level; @@ -59,7 +57,8 @@ package GL.Fixed.Lighting is procedure Set_Specular (Source : Light_Object; Color : Colors.Color); function Specular (Source : Light_Object) return Colors.Color; - procedure Set_Position (Source : Light_Object; Position : Types.Singles.Vector4); + procedure Set_Position (Source : Light_Object; + Position : Types.Singles.Vector4); function Position (Source : Light_Object) return Types.Singles.Vector4; procedure Set_Spot_Direction (Source : Light_Object; @@ -73,16 +72,6 @@ package GL.Fixed.Lighting is private type Light_Object (Identifier : Toggles.Toggle) is tagged null record; - Lights : constant array (Light_Index) of access constant Light_Object := - (0 => new Light_Object'(Identifier => Toggles.Light0), - 1 => new Light_Object'(Identifier => Toggles.Light1), - 2 => new Light_Object'(Identifier => Toggles.Light2), - 3 => new Light_Object'(Identifier => Toggles.Light3), - 4 => new Light_Object'(Identifier => Toggles.Light4), - 5 => new Light_Object'(Identifier => Toggles.Light5), - 6 => new Light_Object'(Identifier => Toggles.Light6), - 7 => new Light_Object'(Identifier => Toggles.Light7)); - for Color_Control use (Single_Color => 16#81F9#, Separate_Specular_Color => 16#81FA#); for Color_Control'Size use Low_Level.Enum'Size; From dccb89031d290fc3fea1d1bffe6371c45c29cefc Mon Sep 17 00:00:00 2001 From: flyx Date: Sat, 6 Jul 2019 12:52:48 +0200 Subject: [PATCH 03/13] Define GPRINSTALL in Makefile Fixes #132 --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index f201d904..1ea74639 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ GNATFLAGS ?= GLFW_VERSION ?=3 GPRBUILD = gprbuild ${GNATFLAGS} -p +GPRINSTALL = gprinstall -p WINDOWING_BACKEND := windows GENERATE_EXE := bin/generate.exe From a408278fa0941351e4d630958d20188957de1dd5 Mon Sep 17 00:00:00 2001 From: Felix Krause Date: Sat, 6 Jul 2019 13:09:40 +0200 Subject: [PATCH 04/13] Fixed #135 --- .../gl-objects-textures-with_1d_loader.adb | 3 ++- .../gl-objects-textures-with_2d_loader.adb | 5 ++--- .../gl-objects-textures-with_3d_loader.adb | 3 ++- src/gl/implementation/gl-objects-textures.adb | 10 ++++++++++ src/gl/interface/gl-objects-textures.ads | 3 +++ 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/gl/implementation/gl-objects-textures-with_1d_loader.adb b/src/gl/implementation/gl-objects-textures-with_1d_loader.adb index 4f154c2f..5d27fc5b 100644 --- a/src/gl/implementation/gl-objects-textures-with_1d_loader.adb +++ b/src/gl/implementation/gl-objects-textures-with_1d_loader.adb @@ -13,7 +13,8 @@ package body GL.Objects.Textures.With_1D_Loader is Width : Types.Size) is begin API.Tex_Image_1D (Texture_Proxy (Object).Kind, Level, Internal_Format, - Width, 0, Pixels.Red, + Width, 0, + Format_For_Loading_Empty_Texture (Internal_Format), Pixels.Data_Type'First, Image_Source (System.Null_Address)); Raise_Exception_On_OpenGL_Error; diff --git a/src/gl/implementation/gl-objects-textures-with_2d_loader.adb b/src/gl/implementation/gl-objects-textures-with_2d_loader.adb index 15ed89d2..347c4fec 100644 --- a/src/gl/implementation/gl-objects-textures-with_2d_loader.adb +++ b/src/gl/implementation/gl-objects-textures-with_2d_loader.adb @@ -13,11 +13,10 @@ package body GL.Objects.Textures.With_2D_Loader is Width, Height : Types.Size) is begin API.Tex_Image_2D (Texture_Proxy (Object).Kind, Level, Internal_Format, - Width, Height, 0, Pixels.Red, + Width, Height, 0, + Format_For_Loading_Empty_Texture (Internal_Format), Pixels.Data_Type'First, Image_Source (System.Null_Address)); - --raise Program_Error with "Kind => " & Texture_Proxy (Object).Kind'Img & - -- ", Type => " & Pixels.Data_Type'First'Img; Raise_Exception_On_OpenGL_Error; end Load_Empty_Texture; diff --git a/src/gl/implementation/gl-objects-textures-with_3d_loader.adb b/src/gl/implementation/gl-objects-textures-with_3d_loader.adb index e65ac21f..5067f05b 100644 --- a/src/gl/implementation/gl-objects-textures-with_3d_loader.adb +++ b/src/gl/implementation/gl-objects-textures-with_3d_loader.adb @@ -13,7 +13,8 @@ package body GL.Objects.Textures.With_3D_Loader is Width, Height, Depth : Types.Size) is begin API.Tex_Image_3D (Texture_Proxy (Object).Kind, Level, Internal_Format, - Width, Height, Depth, 0, Pixels.Red, + Width, Height, Depth, 0, + Format_For_Loading_Empty_Texture (Internal_Format), Pixels.Data_Type'First, Image_Source (System.Null_Address)); Raise_Exception_On_OpenGL_Error; diff --git a/src/gl/implementation/gl-objects-textures.adb b/src/gl/implementation/gl-objects-textures.adb index c665d9a8..5c25fcbe 100644 --- a/src/gl/implementation/gl-objects-textures.adb +++ b/src/gl/implementation/gl-objects-textures.adb @@ -568,4 +568,14 @@ package body GL.Objects.Textures is return Natural (Count); end Texture_Unit_Count; + function Format_For_Loading_Empty_Texture + (Internal_Format : Pixels.Internal_Format) return Pixels.Data_Format is + use GL.Pixels; + begin + case Internal_Format is + when Depth_Component | Depth_Component16 | Depth_Component24 | + Depth_Component32 => return Depth_Component; + when others => return Red; + end case; + end Format_For_Loading_Empty_Texture; end GL.Objects.Textures; diff --git a/src/gl/interface/gl-objects-textures.ads b/src/gl/interface/gl-objects-textures.ads index 3705f018..c21d3411 100644 --- a/src/gl/interface/gl-objects-textures.ads +++ b/src/gl/interface/gl-objects-textures.ads @@ -227,4 +227,7 @@ private overriding procedure Internal_Release_Id (Object : Texture; Id : UInt); + function Format_For_Loading_Empty_Texture + (Internal_Format : Pixels.Internal_Format) return Pixels.Data_Format; + end GL.Objects.Textures; From 5ae8064850a347d5dfbbff7d84aa807ac7a215fa Mon Sep 17 00:00:00 2001 From: Roger Date: Sun, 31 May 2020 20:23:17 +1000 Subject: [PATCH 05/13] Framebuffer (#138) --- examples/common/src/load_vb_object.adb | 17 +- examples/common/src/maths.adb | 533 ++++++++++-------- examples/common/src/maths.ads | 5 + .../09_vbo_indexing/src/main_loop.adb | 2 +- .../indexed_model_loading/src/main_loop.adb | 2 +- .../misc05_picking_easy/src/main_loop.adb | 4 +- examples/open_gl/square/src/main_loop.adb | 1 - .../redbook/03_feedback/src/main_loop.adb | 18 +- .../redbook/10_transform_buffer/.gitignore | 1 + .../draw_transform_buffer.gpr | 15 + .../src/draw_transform.adb | 29 + .../10_transform_buffer/src/main_loop.adb | 220 ++++++++ .../10_transform_buffer/src/main_loop.ads | 4 + .../shaders/render_10_fragment_shader.glsl | 12 + .../src/shaders/render_10_vertex_shader.glsl | 15 + .../src/shaders/sort_geometry_shader.glsl | 47 ++ .../src/shaders/sort_vertex_shader.glsl | 17 + examples/redbook/media/ninja.vbm | Bin 0 -> 2637260 bytes examples/superbible/particles/.gitignore | 1 + examples/superbible/particles/particles.gpr | 15 + .../superbible/particles/src/main_loop.adb | 247 ++++++++ .../superbible/particles/src/main_loop.ads | 4 + .../particles/src/particle_display.adb | 30 + .../src/shaders/fragment_shader.glsl | 10 + .../particles/src/shaders/vertex_shader.glsl | 12 + .../spinning_cubes/src/main_loop.adb | 2 +- src/gl/generated/gl-api.ads | 283 +++++----- .../generated/gl-load_function_pointers.adb | 149 ++--- src/gl/implementation/gl-enums-queries.ads | 24 + src/gl/implementation/gl-low_level-enums.ads | 7 +- src/gl/implementation/gl-objects-buffers.adb | 97 +++- src/gl/implementation/gl-objects-programs.adb | 2 +- src/gl/implementation/gl-objects-textures.adb | 38 +- src/gl/implementation/gl-rasterization.adb | 6 + src/gl/interface/gl-framebuffer.ads | 2 +- src/gl/interface/gl-objects-buffers.ads | 53 +- src/gl/interface/gl-objects-programs.ads | 33 +- src/gl/interface/gl-objects-textures.ads | 18 +- src/gl/interface/gl-rasterization.ads | 1 + src/gl/interface/gl-toggles.ads | 3 +- src/gl/specs/gl-api.spec | 27 +- 41 files changed, 1479 insertions(+), 527 deletions(-) create mode 100644 examples/redbook/10_transform_buffer/.gitignore create mode 100644 examples/redbook/10_transform_buffer/draw_transform_buffer.gpr create mode 100644 examples/redbook/10_transform_buffer/src/draw_transform.adb create mode 100644 examples/redbook/10_transform_buffer/src/main_loop.adb create mode 100644 examples/redbook/10_transform_buffer/src/main_loop.ads create mode 100755 examples/redbook/10_transform_buffer/src/shaders/render_10_fragment_shader.glsl create mode 100755 examples/redbook/10_transform_buffer/src/shaders/render_10_vertex_shader.glsl create mode 100755 examples/redbook/10_transform_buffer/src/shaders/sort_geometry_shader.glsl create mode 100755 examples/redbook/10_transform_buffer/src/shaders/sort_vertex_shader.glsl create mode 100644 examples/redbook/media/ninja.vbm create mode 100644 examples/superbible/particles/.gitignore create mode 100644 examples/superbible/particles/particles.gpr create mode 100644 examples/superbible/particles/src/main_loop.adb create mode 100644 examples/superbible/particles/src/main_loop.ads create mode 100644 examples/superbible/particles/src/particle_display.adb create mode 100644 examples/superbible/particles/src/shaders/fragment_shader.glsl create mode 100644 examples/superbible/particles/src/shaders/vertex_shader.glsl create mode 100644 src/gl/implementation/gl-enums-queries.ads diff --git a/examples/common/src/load_vb_object.adb b/examples/common/src/load_vb_object.adb index 773744a9..37cf5fbf 100644 --- a/examples/common/src/load_vb_object.adb +++ b/examples/common/src/load_vb_object.adb @@ -21,21 +21,16 @@ package body Load_VB_Object is UShort_Size : constant UInt := UShort'Size / 8; procedure Load_Indices (Data_Stream : Ada.Streams.Stream_IO.Stream_Access; - Header : VBM_Header; Object : in out VB_Object); procedure Load_Materials (Data_Stream : Ada.Streams.Stream_IO.Stream_Access; - Header : VBM_Header; Object : in out VB_Object); procedure Load_Textures (Data_Stream : Ada.Streams.Stream_IO.Stream_Access; - Header : VBM_Header; Object : in out VB_Object); procedure Load_VBM_Header (Header_Stream : Ada.Streams.Stream_IO.Stream_Access; Header : out VBM_Header; Byte_Count : in out UInt); procedure Set_Attribute_Pointers (VBM_Object : VB_Object; Vertex_Index, Normal_Index, Tex_Coord0_Index : Int); --- function To_Vector4_Array (Raw_Data : Image_Data; Num_Vertices : UInt) --- return GL.Types.Singles.Vector4_Array; -- ------------------------------------------------------------------------ @@ -118,12 +113,12 @@ package body Load_VB_Object is Set_Attribute_Pointers (VBM_Object, Vertex_Index, Normal_Index, Tex_Coord0_Index); - Load_Indices (Data_Stream, VBM_Object.Header, VBM_Object); + Load_Indices (Data_Stream, VBM_Object); -- unbind the current array object GL.Objects.Vertex_Arrays.Null_Array_Object.Bind; - Load_Materials (Data_Stream, VBM_Object.Header, VBM_Object); + Load_Materials (Data_Stream, VBM_Object); end; -- declare block Close (File_ID); Result := True; @@ -141,9 +136,9 @@ package body Load_VB_Object is -- ------------------------------------------------------------------------ procedure Load_Indices (Data_Stream : Ada.Streams.Stream_IO.Stream_Access; - Header : VBM_Header; Object : in out VB_Object) is use GL.Objects.Buffers; + Header : constant VBM_Header := Object.Header; Element_Size : UInt; Element_Data_Size : UInt; begin @@ -175,8 +170,8 @@ package body Load_VB_Object is -- ------------------------------------------------------------------------ procedure Load_Materials (Data_Stream : Ada.Streams.Stream_IO.Stream_Access; - Header : VBM_Header; Object : in out VB_Object) is + Header : constant VBM_Header := Object.Header; Material_Record : VBM_Material; Record_Count : UInt := 0; Materials_Data_Size : UInt; @@ -192,7 +187,7 @@ package body Load_VB_Object is Put_Line ("Load_Materials; EOF reached before Materials loading completed."); end if; end loop; - Load_Textures (Data_Stream, Header, Object); + Load_Textures (Data_Stream, Object); end if; exception @@ -204,8 +199,8 @@ package body Load_VB_Object is -- ------------------------------------------------------------------------ procedure Load_Textures (Data_Stream : Ada.Streams.Stream_IO.Stream_Access; - Header : VBM_Header; Object : in out VB_Object) is + Header : constant VBM_Header := Object.Header; Texture_Record : Material_Texture; Record_Count : UInt := 0; Textures_Data_Size : UInt; diff --git a/examples/common/src/maths.adb b/examples/common/src/maths.adb index b28a77b2..5a250b11 100644 --- a/examples/common/src/maths.adb +++ b/examples/common/src/maths.adb @@ -1,255 +1,304 @@ with Ada.Numerics; +with Ada.Numerics.Float_Random; with Quaternions; package body Maths is - use type GL.Types.Singles.Vector3; - - package Single_Quaternion is new Quaternions (GL.Types.Single); - - Radians_Per_Degree : constant Radian := Ada.Numerics.Pi / 180.0; - Degrees_Per_Radian : constant Degree := 180.0 / Ada.Numerics.Pi; - - Zero_Matrix4 : constant GL.Types.Singles.Matrix4 := - (others => (others => 0.0)); - - -- ------------------------------------------------------------------------ - - function Cube_Root (Value : Single) return Single is - begin - return Maths.Single_Math_Functions.Exp (Maths.Single_Math_Functions.Log (Value) / 3.0); - end Cube_Root; - - -- ------------------------------------------------------------------------ - - function Degrees (Angle : Radian) return Degree is - begin - return Degree (Angle) * Degrees_Per_Radian; - end Degrees; - - -- ------------------------------------------------------------------------ - -- Init_Lookat_Transform is derived from - -- Computer Graphics Using OpenGL, Chapter 7, transpose of equation 7.2 - -- except, (W, W) = 1 (not 0) - procedure Init_Lookat_Transform - (Position, Target, Up : Singles.Vector3; - Look_At : out GL.Types.Singles.Matrix4) is - use GL; - -- Reference co-ordinate frame (u, v, n) - -- Forward (n): camera axis - -- Side (u): axis through side of camera, perpendicular to Forward - -- Up_New (v): vertical axis of camera, perpendicular to Forward and Side - Forward : Singles.Vector3 := Position - Target; -- n - Side : Singles.Vector3 - := GL.Types.Singles.Cross_Product (Up, Forward); -- u = Up x n - Up_New : Singles.Vector3 - := GL.Types.Singles.Cross_Product (Forward, Side); -- v = n x u - begin - Forward := Normalized (Forward); -- n / |n| - Side := Normalized (Side); -- u / |u| - Up_New := Normalized (Up_New); -- v / |v| - - Look_At := GL.Types.Singles.Identity4; - Look_At (X, X) := Side (X); -- u.x - Look_At (Y, X) := Side (Y); -- u.y - Look_At (Z, X) := Side (Z); -- u.z - - Look_At (X, Y) := Up_New (X); -- v.x - Look_At (Y, Y) := Up_New (Y); -- v.y - Look_At (Z, Y) := Up_New (Z); -- v.z - - Look_At (X, Z) := Forward (X); -- n.x; - Look_At (Y, Z) := Forward (Y); -- n.y - Look_At (Z, Z) := Forward (Z); -- n.z - - Look_At (W, X) := -GL.Types.Singles.Dot_Product (Position, Side); - Look_At (W, Y) := -GL.Types.Singles.Dot_Product (Position, Up_New); - Look_At (W, Z) := -GL.Types.Singles.Dot_Product (Position, Forward); - end Init_Lookat_Transform; - - -- ------------------------------------------------------------------------ - -- Init_Orthographic_Transform is derived from - -- Computer Graphics Using OpenGL, Chapter 7, transpose of equation 7.18 - - procedure Init_Orthographic_Transform (Top, Bottom, Left, Right, - Z_Near, Z_Far : Single; - Transform : out GL.Types.Singles.Matrix4) is - use GL; - dX : constant Single := Right - Left; - dY : constant Single := Top - Bottom; - dZ : constant Single := Z_Far - Z_Near; - begin - Transform := GL.Types.Singles.Identity4; - Transform (X, X) := 2.0 / dX; - Transform (W, X) := -(Right + Left) / dX; - Transform (Y, Y) := 2.0 / dY; - Transform (W, Y) := -(Top + Bottom) / dY; - Transform (Z, Z) := 2.0 / dZ; - Transform (W, Z) := -(Z_Far + Z_Near) / dZ; - end Init_Orthographic_Transform; - - -- ------------------------------------------------------------------------ - - procedure Init_Perspective_Transform (View_Angle : Degree; - Width, Height, Z_Near, Z_Far : Single; - Transform : out GL.Types.Singles.Matrix4) is - begin - Transform := Perspective_Matrix (View_Angle, Width / Height, - Z_Near, Z_Far); - end Init_Perspective_Transform; - - -- ------------------------------------------------------------------------ - - function Length (V : GL.Types.Singles.Vector3) return GL.Types.Single is - use Single_Math_Functions; - use GL; - begin - return Sqrt (V (X) * V (X) + V (Y) * V (Y) + V (Z) * V (Z)); - end Length; - - -- ------------------------------------------------------------------------ - - function New_Quaternion (Angle : Radian; Axis : GL.Types.Singles.Vector3) + use type GL.Types.Singles.Vector3; + + package Single_Quaternion is new Quaternions (GL.Types.Single); + + Radians_Per_Degree : constant Radian := Ada.Numerics.Pi / 180.0; + Degrees_Per_Radian : constant Degree := 180.0 / Ada.Numerics.Pi; + + Zero_Matrix4 : constant GL.Types.Singles.Matrix4 := + (others => (others => 0.0)); + Gen : Ada.Numerics.Float_Random.Generator; + + -- ------------------------------------------------------------------------ + + function Cube_Root (Value : Single) return Single is + begin + return Maths.Single_Math_Functions.Exp (Maths.Single_Math_Functions.Log (Value) / 3.0); + end Cube_Root; + + -- ------------------------------------------------------------------------ + + function Degrees (Angle : Radian) return Degree is + begin + return Degree (Angle) * Degrees_Per_Radian; + end Degrees; + + -- ------------------------------------------------------------------------ + -- Transpose of standard frustrum matrix + function Frustum_Matrix (Left, Right, Bottom, Top, Near, Far : GL.Types.Single) + return GL.Types.Singles.Matrix4 is + use GL; + Frustrum : Singles.Matrix4 := Singles.Identity4; + zDelta : constant Single := (Far - Near); + Direction : constant Single := (Right - Left); + Height : constant Single := (Top - Bottom); + Twice_Near : constant Single := 2.0 * Near; + begin + Frustrum (X, X) := 2.0 * Near / Direction; + Frustrum (Z, X) := (Right + Left) / Direction; + + Frustrum (Y, Y) := Twice_Near / Height; + Frustrum (Z, Y) := (Top + Bottom) / Height; + Frustrum (Z, Z) := -(Far + Near) / zDelta; + Frustrum (W, Z) := -Twice_Near * Far / zDelta; + Frustrum (Z, W) := -1.0; + return Frustrum; + end Frustum_Matrix; + + -- ------------------------------------------------------------------------ + -- Init_Lookat_Transform is derived from + -- Computer Graphics Using OpenGL, Chapter 7, transpose of equation 7.2 + -- except, (W, W) = 1 (not 0) + procedure Init_Lookat_Transform + (Position, Target, Up : Singles.Vector3; + Look_At : out GL.Types.Singles.Matrix4) is + use GL; + -- Reference co-ordinate frame (u, v, n) + -- Forward (n): camera axis + -- Side (u): axis through side of camera, perpendicular to Forward + -- Up_New (v): vertical axis of camera, perpendicular to Forward and Side + Forward : Singles.Vector3 := Position - Target; -- n + Side : Singles.Vector3 + := GL.Types.Singles.Cross_Product (Up, Forward); -- u = Up x n + Up_New : Singles.Vector3 + := GL.Types.Singles.Cross_Product (Forward, Side); -- v = n x u + begin + Forward := Normalized (Forward); -- n / |n| + Side := Normalized (Side); -- u / |u| + Up_New := Normalized (Up_New); -- v / |v| + + Look_At := GL.Types.Singles.Identity4; + Look_At (X, X) := Side (X); -- u.x + Look_At (Y, X) := Side (Y); -- u.y + Look_At (Z, X) := Side (Z); -- u.z + + Look_At (X, Y) := Up_New (X); -- v.x + Look_At (Y, Y) := Up_New (Y); -- v.y + Look_At (Z, Y) := Up_New (Z); -- v.z + + Look_At (X, Z) := Forward (X); -- n.x; + Look_At (Y, Z) := Forward (Y); -- n.y + Look_At (Z, Z) := Forward (Z); -- n.z + + Look_At (W, X) := -GL.Types.Singles.Dot_Product (Position, Side); + Look_At (W, Y) := -GL.Types.Singles.Dot_Product (Position, Up_New); + Look_At (W, Z) := -GL.Types.Singles.Dot_Product (Position, Forward); + end Init_Lookat_Transform; + + -- ------------------------------------------------------------------------ + -- Init_Orthographic_Transform is derived from + -- Computer Graphics Using OpenGL, Chapter 7, transpose of equation 7.18 + + procedure Init_Orthographic_Transform (Top, Bottom, Left, Right, + Z_Near, Z_Far : Single; + Transform : out GL.Types.Singles.Matrix4) is + use GL; + dX : constant Single := Right - Left; + dY : constant Single := Top - Bottom; + dZ : constant Single := Z_Far - Z_Near; + begin + Transform := GL.Types.Singles.Identity4; + Transform (X, X) := 2.0 / dX; + Transform (W, X) := -(Right + Left) / dX; + Transform (Y, Y) := 2.0 / dY; + Transform (W, Y) := -(Top + Bottom) / dY; + Transform (Z, Z) := 2.0 / dZ; + Transform (W, Z) := -(Z_Far + Z_Near) / dZ; + end Init_Orthographic_Transform; + + -- ------------------------------------------------------------------------ + + procedure Init_Perspective_Transform (View_Angle : Degree; + Width, Height, Z_Near, Z_Far : Single; + Transform : out GL.Types.Singles.Matrix4) is + begin + Transform := Perspective_Matrix (View_Angle, Width / Height, + Z_Near, Z_Far); + end Init_Perspective_Transform; + + -- ------------------------------------------------------------------------ + + function Length (V : GL.Types.Singles.Vector3) return GL.Types.Single is + use Single_Math_Functions; + use GL; + begin + return Sqrt (V (X) * V (X) + V (Y) * V (Y) + V (Z) * V (Z)); + end Length; + + -- ------------------------------------------------------------------------ + + function New_Quaternion (Angle : Radian; Axis : GL.Types.Singles.Vector3) return Single_Quaternion.Quaternion is - use Maths.Single_Math_Functions; - Half_Angle : constant Single := 0.5 * Single (Angle); - Sine : constant Single := Sin (Half_Angle); + use Maths.Single_Math_Functions; + Half_Angle : constant Single := 0.5 * Single (Angle); + Sine : constant Single := Sin (Half_Angle); + begin + return (Cos (Half_Angle), Axis (GL.X) * Sine, + Axis (GL.Y) * Sine, Axis (GL.Z) * Sine); + end New_Quaternion; + + -- ------------------------------------------------------------------------ + + function Normalized (V : Singles.Vector3) return Singles.Vector3 is + use GL; + L : constant Single := Length (V); + begin + return (V (X) / L, V (Y) / L, V (Z) / L); + end Normalized; + + -- ------------------------------------------------------------------------ + -- Perspective_Matrix is derived from Computer Graphics Using OpenGL + -- Chapter 7, transpose of equation 7.13 + function Perspective_Matrix (Top, Bottom, Left, Right, Near, Far : Single) + return GL.Types.Singles.Matrix4 is + use GL; + dX : constant Single := Right - Left; + dY : constant Single := Top - Bottom; + dZ : constant Single := Far - Near; + Matrix : GL.Types.Singles.Matrix4 := Zero_Matrix4; + begin + Matrix (X, X) := 2.0 * Near / dX; + Matrix (Z, X) := (Right + Left) / dX; + Matrix (Y, Y) := 2.0 * Near / dY; + Matrix (Z, Y) := (Top + Bottom) / dY; + Matrix (Z, Z) := -(Far + Near) / dZ; + Matrix (W, Z) := -2.0 * Far * Near / dZ; + Matrix (Z, W) := -1.0; + return Matrix; + end Perspective_Matrix; + + -- ------------------------------------------------------------------------ + -- Perspective_Matrix is derived from Computer Graphics Using OpenGL + -- Chapter 7, top, bottom, left and right equations following equation 7.13 + function Perspective_Matrix (View_Angle : Degree; Aspect, Near, Far : Single) + return GL.Types.Singles.Matrix4 is + use Single_Math_Functions; + + Top : Single; + Bottom : Single; + Right : Single; + Left : Single; + begin + Top := Near * Tan (Single (0.5 * Radians (View_Angle))); + Bottom := -Top; + Right := Top * Aspect; + Left := -Right; + return Perspective_Matrix (Top, Bottom, Left, Right, Near, Far); + end Perspective_Matrix; + + -- ------------------------------------------------------------------------ + + function Radians (Angle : Degree) return Radian is + begin + return Radian (Angle) * Radians_Per_Degree; + end Radians; + + -- ------------------------------------------------------------------------ + + function Random_Float return Single is + use Ada.Numerics.Float_Random; + begin + return 2.0 * Single (Random (Gen)) - 1.0; + end Random_Float; + + -- ------------------------------------------------------------------------ + + function Random_Vector (Min_Magnitude, Max_Magnitude : Single) + return Singles.Vector3 is + use Ada.Numerics.Float_Random; + use GL.Types.Singles; + R_Vector : Vector3 := (2.0 * Single (Random (Gen)) - 1.0, + 2.0 * Single (Random (Gen)) - 1.0, + 2.0 * Single (Random (Gen)) - 1.0); begin - return (Cos (Half_Angle), Axis (GL.X) * Sine, - Axis (GL.Y) * Sine, Axis (GL.Z) * Sine); - end New_Quaternion; + R_Vector := Maths.Normalized (R_Vector); + R_Vector := R_Vector * (Random_Float * + (Max_Magnitude - Min_Magnitude) + Min_Magnitude); + return R_Vector; + end Random_Vector; -- ------------------------------------------------------------------------ - function Normalized (V : Singles.Vector3) return Singles.Vector3 is - use GL; - L : constant Single := Length (V); - begin - return (V (X) / L, V (Y) / L, V (Z) / L); - end Normalized; - - -- ------------------------------------------------------------------------ - -- Perspective_Matrix is derived from Computer Graphics Using OpenGL - -- Chapter 7, transpose of equation 7.13 - function Perspective_Matrix (Top, Bottom, Left, Right, Near, Far : Single) - return GL.Types.Singles.Matrix4 is - use GL; - dX : constant Single := Right - Left; - dY : constant Single := Top - Bottom; - dZ : constant Single := Far - Near; - Matrix : GL.Types.Singles.Matrix4 := Zero_Matrix4; - begin - Matrix (X, X) := 2.0 * Near / dX; - Matrix (Z, X) := (Right + Left) / dX; - Matrix (Y, Y) := 2.0 * Near / dY; - Matrix (Z, Y) := (Top + Bottom) / dY; - Matrix (Z, Z) := -(Far + Near) / dZ; - Matrix (W, Z) := -2.0 * Far * Near / dZ; - Matrix (Z, W) := -1.0; - return Matrix; - end Perspective_Matrix; - - -- ------------------------------------------------------------------------ - -- Perspective_Matrix is derived from Computer Graphics Using OpenGL - -- Chapter 7, top, bottom, left and right equations following equation 7.13 - function Perspective_Matrix (View_Angle : Degree; Aspect, Near, Far : Single) - return GL.Types.Singles.Matrix4 is - use Single_Math_Functions; - - Top : Single; - Bottom : Single; - Right : Single; - Left : Single; - begin - Top := Near * Tan (Single (0.5 * Radians (View_Angle))); - Bottom := -Top; - Right := Top * Aspect; - Left := -Right; - return Perspective_Matrix (Top, Bottom, Left, Right, Near, Far); - end Perspective_Matrix; - - -- ------------------------------------------------------------------------ - - function Radians (Angle : Degree) return Radian is - begin - return Radian (Angle) * Radians_Per_Degree; - end Radians; - - -- ------------------------------------------------------------------------ - -- Rotation_Matrix is based on "Quaternians and spatial rotation" by - -- en.m.wikipedia.org, with the matrix transposed - - function Rotation_Matrix (Angle : Radian; Axis : GL.Types.Singles.Vector3) - return GL.Types.Singles.Matrix4 is - use GL; - use Single_Quaternion; - - aQuaternion : Single_Quaternion.Quaternion; - theMatrix : GL.Types.Singles.Matrix4 := GL.Types.Singles.Identity4; - NQ : Single_Quaternion.Quaternion; - begin - aQuaternion := New_Quaternion (Angle, Axis); - NQ := Normalized (aQuaternion); - - theMatrix (X, X) := 1.0 - 2.0 * (NQ.C * NQ.C + NQ.D * NQ.D); - theMatrix (Y, X) := 2.0 * (NQ.B * NQ.C - NQ.A * NQ.D); - theMatrix (Z, X) := 2.0 * (NQ.B * NQ.D + NQ.A * NQ.C); - - theMatrix (X, Y) := 2.0 * (NQ.B * NQ.C + NQ.A * NQ.D); - theMatrix (Y, Y) := 1.0 - 2.0 * (NQ.B * NQ.B + NQ.D * NQ.D); - theMatrix (Z, Y) := 2.0 * (NQ.C * NQ.D - NQ.A * NQ.B); - - theMatrix (X, Z) := 2.0 * (NQ.B * NQ.D - NQ.A * NQ.C); - theMatrix (Y, Z) := 2.0 * (NQ.C * NQ.D + NQ.A * NQ.B); - theMatrix (Z, Z) := 1.0 - 2.0 * (NQ.B * NQ.B + NQ.C * NQ.C); - return theMatrix; - end Rotation_Matrix; - - -- ------------------------------------------------------------------------ - - function Rotation_Matrix (Angle : Degree; Axis : GL.Types.Singles.Vector3) - return GL.Types.Singles.Matrix4 is - begin - return Rotation_Matrix (Radians (Angle), Axis); - end Rotation_Matrix; - - -- ------------------------------------------------------------------------ - -- Scaling_Matrix is derived from Computer Graphics Using OpenGL - -- Chapter 5, matrix equation (5.25) - - function Scaling_Matrix (Scale_Factor : Singles.Vector3) return Singles.Matrix4 is - use GL; - theMatrix : Singles.Matrix4 := Singles.Identity4; - begin - theMatrix (X, X) := Scale_Factor (X); - theMatrix (Y, Y) := Scale_Factor (Y); - theMatrix (Z, Z) := Scale_Factor (Z); - return theMatrix; - end Scaling_Matrix; - - -- ------------------------------------------------------------------------ - - function Scaling_Matrix (Scale_Factor : Single) return Singles.Matrix4 is - begin - return Scaling_Matrix ((Scale_Factor, Scale_Factor, Scale_Factor)); - end Scaling_Matrix; - - -- ------------------------------------------------------------------------ - -- Translation_Matrix is derived from Computer Graphics Using OpenGL - -- Chapter 5, transpose of equation preceding (5.25) - - function Translation_Matrix (Change : Singles.Vector3) - return Singles.Matrix4 is - use GL; - theMatrix : Singles.Matrix4 := Singles.Identity4; - begin - theMatrix (W, X) := Change (X); - theMatrix (W, Y) := Change (Y); - theMatrix (W, Z) := Change (Z); - return theMatrix; - end Translation_Matrix; - - -- ------------------------------------------------------------------------ + -- Rotation_Matrix is based on "Quaternians and spatial rotation" by + -- en.m.wikipedia.org, with the matrix transposed + + function Rotation_Matrix (Angle : Radian; Axis : GL.Types.Singles.Vector3) + return GL.Types.Singles.Matrix4 is + use GL; + use Single_Quaternion; + + aQuaternion : Single_Quaternion.Quaternion; + theMatrix : GL.Types.Singles.Matrix4 := GL.Types.Singles.Identity4; + NQ : Single_Quaternion.Quaternion; + begin + aQuaternion := New_Quaternion (Angle, Axis); + NQ := Normalized (aQuaternion); + + theMatrix (X, X) := 1.0 - 2.0 * (NQ.C * NQ.C + NQ.D * NQ.D); + theMatrix (Y, X) := 2.0 * (NQ.B * NQ.C - NQ.A * NQ.D); + theMatrix (Z, X) := 2.0 * (NQ.B * NQ.D + NQ.A * NQ.C); + + theMatrix (X, Y) := 2.0 * (NQ.B * NQ.C + NQ.A * NQ.D); + theMatrix (Y, Y) := 1.0 - 2.0 * (NQ.B * NQ.B + NQ.D * NQ.D); + theMatrix (Z, Y) := 2.0 * (NQ.C * NQ.D - NQ.A * NQ.B); + + theMatrix (X, Z) := 2.0 * (NQ.B * NQ.D - NQ.A * NQ.C); + theMatrix (Y, Z) := 2.0 * (NQ.C * NQ.D + NQ.A * NQ.B); + theMatrix (Z, Z) := 1.0 - 2.0 * (NQ.B * NQ.B + NQ.C * NQ.C); + return theMatrix; + end Rotation_Matrix; + + -- ------------------------------------------------------------------------ + + function Rotation_Matrix (Angle : Degree; Axis : GL.Types.Singles.Vector3) + return GL.Types.Singles.Matrix4 is + begin + return Rotation_Matrix (Radians (Angle), Axis); + end Rotation_Matrix; + + -- ------------------------------------------------------------------------ + -- Scaling_Matrix is derived from Computer Graphics Using OpenGL + -- Chapter 5, matrix equation (5.25) + + function Scaling_Matrix (Scale_Factor : Singles.Vector3) return Singles.Matrix4 is + use GL; + theMatrix : Singles.Matrix4 := Singles.Identity4; + begin + theMatrix (X, X) := Scale_Factor (X); + theMatrix (Y, Y) := Scale_Factor (Y); + theMatrix (Z, Z) := Scale_Factor (Z); + return theMatrix; + end Scaling_Matrix; + + -- ------------------------------------------------------------------------ + + function Scaling_Matrix (Scale_Factor : Single) return Singles.Matrix4 is + begin + return Scaling_Matrix ((Scale_Factor, Scale_Factor, Scale_Factor)); + end Scaling_Matrix; + + -- ------------------------------------------------------------------------ + -- Translation_Matrix is derived from Computer Graphics Using OpenGL + -- Chapter 5, transpose of equation preceding (5.25) + + function Translation_Matrix (Change : Singles.Vector3) + return Singles.Matrix4 is + use GL; + theMatrix : Singles.Matrix4 := Singles.Identity4; + begin + theMatrix (W, X) := Change (X); + theMatrix (W, Y) := Change (Y); + theMatrix (W, Z) := Change (Z); + return theMatrix; + end Translation_Matrix; + + -- ------------------------------------------------------------------------ end Maths; diff --git a/examples/common/src/maths.ads b/examples/common/src/maths.ads index e0270ce3..5548a183 100644 --- a/examples/common/src/maths.ads +++ b/examples/common/src/maths.ads @@ -33,6 +33,8 @@ package Maths is function Cube_Root (Value : Single) return Single; function Degrees (Angle : Radian) return Degree; + function Frustum_Matrix (Left, Right, Bottom, Top, Near, Far : GL.Types.Single) + return GL.Types.Singles.Matrix4; procedure Init_Lookat_Transform (Position, Target, Up : Singles.Vector3; Look_At : out Singles.Matrix4); procedure Init_Orthographic_Transform (Top, Bottom, Left, Right, @@ -48,6 +50,9 @@ package Maths is function Perspective_Matrix (Top, Bottom, Left, Right, Near, Far : Single) return GL.Types.Singles.Matrix4; function Radians (Angle : Degree) return Radian; + function Random_Float return Single; + function Random_Vector (Min_Magnitude, Max_Magnitude : Single) + return Singles.Vector3; function Rotation_Matrix (Angle : Degree; Axis : Singles.Vector3) return Singles.Matrix4; diff --git a/examples/ogl_tutorials/09_vbo_indexing/src/main_loop.adb b/examples/ogl_tutorials/09_vbo_indexing/src/main_loop.adb index 91005d5f..b107dea2 100644 --- a/examples/ogl_tutorials/09_vbo_indexing/src/main_loop.adb +++ b/examples/ogl_tutorials/09_vbo_indexing/src/main_loop.adb @@ -220,7 +220,7 @@ procedure Main_Loop (Main_Window : in out Glfw.Windows.Window) is Vertex_Shader), Program_Loader.Src ("src/shaders/standard_fragment_shader.glsl", Fragment_Shader))); - Utilities.Show_Shader_Program_Data (Render_Program); +-- Utilities.Show_Shader_Program_Data (Render_Program); MVP_Matrix_ID := GL.Objects.Programs.Uniform_Location (Render_Program, "MVP"); diff --git a/examples/ogl_tutorials/indexed_model_loading/src/main_loop.adb b/examples/ogl_tutorials/indexed_model_loading/src/main_loop.adb index 3d7ba7f3..ea9db1f8 100644 --- a/examples/ogl_tutorials/indexed_model_loading/src/main_loop.adb +++ b/examples/ogl_tutorials/indexed_model_loading/src/main_loop.adb @@ -162,7 +162,7 @@ procedure Main_Loop (Main_Window : in out Glfw.Windows.Window) is Vertex_Shader), Program_Loader.Src ("src/shaders/Texture_Fragment_Shader.glsl", Fragment_Shader))); - Utilities.Show_Shader_Program_Data (Render_Program); +-- Utilities.Show_Shader_Program_Data (Render_Program); MVP_Matrix_ID := GL.Objects.Programs.Uniform_Location (Render_Program, "MVP"); diff --git a/examples/ogl_tutorials/misc05_picking_easy/src/main_loop.adb b/examples/ogl_tutorials/misc05_picking_easy/src/main_loop.adb index fd658699..401e51bc 100644 --- a/examples/ogl_tutorials/misc05_picking_easy/src/main_loop.adb +++ b/examples/ogl_tutorials/misc05_picking_easy/src/main_loop.adb @@ -334,14 +334,14 @@ procedure Main_Loop (Main_Window : in out Glfw.Windows.Window) is Vertex_Shader), Program_Loader.Src ("src/shaders/standard_fragment_shader.glsl", Fragment_Shader))); - Utilities.Show_Shader_Program_Data (Render_Program); +-- Utilities.Show_Shader_Program_Data (Render_Program); Picking_Program := Program_Loader.Program_From ((Program_Loader.Src ("src/shaders/picking_vertex_shader.glsl", Vertex_Shader), Program_Loader.Src ("src/shaders/picking_fragment_shader.glsl", Fragment_Shader))); - Utilities.Show_Shader_Program_Data (Picking_Program); +-- Utilities.Show_Shader_Program_Data (Picking_Program); MVP_Matrix_ID := GL.Objects.Programs.Uniform_Location (Render_Program, "MVP"); diff --git a/examples/open_gl/square/src/main_loop.adb b/examples/open_gl/square/src/main_loop.adb index 3a82c9ad..30f0f394 100644 --- a/examples/open_gl/square/src/main_loop.adb +++ b/examples/open_gl/square/src/main_loop.adb @@ -87,7 +87,6 @@ procedure Main_Loop (Main_Window : in out Glfw.Windows.Window) is Colour_Location := GL.Objects.Programs.Attrib_Location (Shader_Program, "colour"); - Utilities.Show_Shader_Program_Data (Shader_Program); exception when others => Put_Line ("An exception occurred in Setup_Graphic."); diff --git a/examples/redbook/03_feedback/src/main_loop.adb b/examples/redbook/03_feedback/src/main_loop.adb index 044bc7c3..9fc1c816 100644 --- a/examples/redbook/03_feedback/src/main_loop.adb +++ b/examples/redbook/03_feedback/src/main_loop.adb @@ -221,7 +221,8 @@ procedure Main_Loop (Main_Window : in out Glfw.Windows.Window) is Name_Length : GL.Types.Size := 99; V_Length : GL.Types.Size := 99; Max_Length : Int; - V_Type : Buffer_Mode; + V_Type : Active_Attribute; + Mode : Buffer_Mode; begin VAO (1).Initialize_Id; VAO (1).Bind; @@ -243,8 +244,6 @@ procedure Main_Loop (Main_Window : in out Glfw.Windows.Window) is if not GL.Objects.Programs.Link_Status (Update_Program) then Put_Line ("Setup, Update_Program Link failed"); Put_Line (GL.Objects.Programs.Info_Log (Update_Program)); - else - Put_Line ("Setup, Update_Program Link ok"); end if; GL.Objects.Programs.Use_Program (Update_Program); @@ -254,14 +253,12 @@ procedure Main_Loop (Main_Window : in out Glfw.Windows.Window) is if not GL.Objects.Programs.Link_Status (Update_Program) then Put_Line ("Setup, Update_Program Transform_Feedback_Varyings Link failed."); Put_Line (GL.Objects.Programs.Info_Log (Update_Program)); - else - Put_Line ("Setup, Update_Program Transform_Feedback_Varyings Link ok"); end if; - V_Type := Transform_Feedback_Buffer_Mode (Update_Program); + Mode := Transform_Feedback_Buffer_Mode (Update_Program); V_Length := Transform_Feedback_Varyings_Size (Update_Program); Max_Length := Transform_Feedback_Varying_Max_Length (Update_Program); - Put_Line ("V_Type: " & Buffer_Mode'Image (V_Type) & " V_Length: " & + Put_Line ("Mode: " & Buffer_Mode'Image (Mode) & " V_Length: " & Int'Image (V_Length) & " Max Length: " & Int'Image (Max_Length)); Get_Transform_Feedback_Varying (Object => Update_Program, @@ -273,9 +270,10 @@ procedure Main_Loop (Main_Window : in out Glfw.Windows.Window) is Put_Line ("Name: " & Name); Put_Line ("Length: " & Int'Image (Name_Length)); - Put_Line ("V_Length" & Int'Image (V_Length)); - if V_Type = Interleaved_Attribs or V_Type = Separate_Attribs then - Put_Line ("V_Type: " & Buffer_Mode'Image (V_Type)); + Put_Line ("V_Length:" & Int'Image (V_Length)); + Put_Line ("V_Type: " & Active_Attribute'Image (V_Type)); + if Mode = Interleaved_Attribs or Mode = Separate_Attribs then + Put_Line ("Mode: " & Buffer_Mode'Image (Mode)); else Put_Line ("Setup, Get_Transform_Feedback_Varying returned an invalid Buffer_Mode value: " & Integer'Image (V_Type'Enum_Rep)); diff --git a/examples/redbook/10_transform_buffer/.gitignore b/examples/redbook/10_transform_buffer/.gitignore new file mode 100644 index 00000000..5bd0b082 --- /dev/null +++ b/examples/redbook/10_transform_buffer/.gitignore @@ -0,0 +1 @@ +draw_transform diff --git a/examples/redbook/10_transform_buffer/draw_transform_buffer.gpr b/examples/redbook/10_transform_buffer/draw_transform_buffer.gpr new file mode 100644 index 00000000..dacf8d41 --- /dev/null +++ b/examples/redbook/10_transform_buffer/draw_transform_buffer.gpr @@ -0,0 +1,15 @@ +with "../../common/common.gpr"; +with "../../../opengl.gpr"; +limited with "../../../opengl-glfw.gpr"; + +project Draw_Transform_Buffer is + + for Source_Dirs use ("src"); + for Object_Dir use "obj"; + for Exec_Dir use "."; + for Main use ("draw_transform.adb"); + + package Compiler renames OpenGL.Compiler; + +end Draw_Transform_Buffer; + diff --git a/examples/redbook/10_transform_buffer/src/draw_transform.adb b/examples/redbook/10_transform_buffer/src/draw_transform.adb new file mode 100644 index 00000000..0f10665e --- /dev/null +++ b/examples/redbook/10_transform_buffer/src/draw_transform.adb @@ -0,0 +1,29 @@ + +with Ada.Exceptions; use Ada.Exceptions; +with Ada.Text_IO; use Ada.Text_IO; + +with Glfw; +with Glfw.Windows; + +with Initialize; +with Main_Loop; + +procedure Draw_Transform is + Main_Window : Glfw.Windows.Window; + Window_Title : constant String := "Red Book Tutorial 10 - Draw Transform Buffer"; +begin + Glfw.Init; + Initialize (Main_Window, Window_Title); + Main_Loop (Main_Window); + Glfw.Shutdown; + +exception + when anError : Constraint_Error => + Put ("Draw_Transform returned a constraint error: "); + Put_Line (Exception_Information (anError)); + + when anError : others => + Put_Line ("An exception occurred in Draw_Transform."); + Put_Line (Exception_Information (anError)); + +end Draw_Transform; diff --git a/examples/redbook/10_transform_buffer/src/main_loop.adb b/examples/redbook/10_transform_buffer/src/main_loop.adb new file mode 100644 index 00000000..92dc527e --- /dev/null +++ b/examples/redbook/10_transform_buffer/src/main_loop.adb @@ -0,0 +1,220 @@ + +with Ada.Numerics; +with Ada.Text_IO; use Ada.Text_IO; + +with GL.Attributes; +with GL.Buffers; +with GL.Objects; +with GL.Objects.Buffers; +with GL.Objects.Programs; +with GL.Objects.Shaders; +with GL.Objects.Vertex_Arrays; +with GL.Toggles; +with GL.Types.Colors; +with GL.Uniforms; +with GL.Window; + +with Glfw; +with Glfw.Input; +with Glfw.Input.Keys; +with Glfw.Windows.Context; + +with Maths; +with Program_Loader; +with Utilities; + +with Load_VB_Object; + +procedure Main_Loop (Main_Window : in out Glfw.Windows.Window) is + use GL.Types; + + Vec3_Size : constant UInt := GL.Types.Singles.Vector3'Size / 8; + Vec4_Size : constant UInt := GL.Types.Singles.Vector4'Size / 8; + Buffer_Size : constant UInt := Vec4_Size + Vec3_Size; + Background : constant GL.Types.Colors.Color := (0.0, 0.0, 0.0, 1.0); + + VAO : array (1 .. 2) of GL.Objects.Vertex_Arrays.Vertex_Array_Object; + VBO : array (1 .. 2) of GL.Objects.Buffers.Buffer; + Transform_BO : GL.Objects.Buffers.Transform_Buffer; + + Sort_Program : GL.Objects.Programs.Program; + Render_Program : GL.Objects.Programs.Program; + Model_Matrix_ID : GL.Uniforms.Uniform; + Projection_Matrix_ID : GL.Uniforms.Uniform; + Pass_Colour_ID : GL.Uniforms.Uniform; + + VBM_Object : Load_VB_Object.VB_Object; + Colours : constant array (1 .. 2) of + GL.Types.Singles.Vector4 := ((0.8, 0.8, 0.9, 0.5), + (0.3, 1.0, 0.3, 0.8)); + + + -- ------------------------------------------------------------------------ + + procedure Display (Window : in out Glfw.Windows.Window) is + use GL.Toggles; + use GL.Types.Singles; + use Maths; + Window_Width : Glfw.Size; + Window_Height : Glfw.Size; + Aspect : Single; + Model_Matrix : Singles.Matrix4; + Projection_Matrix : Singles.Matrix4; + Current_Time : constant Single := Single (Glfw.Time); + begin + Disable (Cull_Face); + Enable (Depth_Test); + GL.Buffers.Set_Depth_Function (LEqual); + Utilities.Clear_Background_Colour_And_Depth (Background); + + Window.Get_Framebuffer_Size (Window_Width, Window_Height); + GL.Window.Set_Viewport (0, 0, GL.Types.Int (Window_Width), + GL.Types.Int (Window_Height)); + Aspect := Single (Window_Height) / Single (Window_Width); + + GL.Objects.Programs.Use_Program (Sort_Program); + Projection_Matrix := + Frustum_Matrix (Left => -1.0, Right => 1.0, + Bottom => Aspect, Top => -Aspect, + Near => 1.0, Far => 500.0); + + Model_Matrix := + Translation_Matrix ((0.0, 0.0, 100.0 * Single_Math_Functions.Sin (2.0 * Ada.Numerics.Pi * Current_Time) - 230.0)) * + Rotation_Matrix (Degree (360.0 * Current_Time), (1.0, 0.0, 0.0)) * + Rotation_Matrix (Degree (360.0 * 2.0 * Current_Time), (0.0, 1.0, 0.0)) * + Rotation_Matrix (Degree (360.0 * 5.0 * Current_Time), (0.0, 0.0, 0.1)) * + Translation_Matrix ((0.0, -80.0, 0.0)); + + GL.Uniforms.Set_Single (Model_Matrix_ID, Model_Matrix); + GL.Uniforms.Set_Single (Projection_Matrix_ID, Projection_Matrix); + + GL.Toggles.Enable (Rasterizer_Discard); + GL.Objects.Buffers.Bind_Transform_Feedback (Transform_BO); + + GL.Objects.Buffers.Transform_Feedback_Buffer.Bind_Buffer_Base (0, VBO (1)); + GL.Objects.Buffers.Transform_Feedback_Buffer.Bind_Buffer_Base (1, VBO (2)); + + GL.Objects.Programs.Begin_Transform_Feedback (Points); + Load_VB_Object.Render (VBM_Object); + GL.Objects.Programs.End_Transform_Feedback; + + GL.Toggles.Disable (Rasterizer_Discard); + + GL.Objects.Programs.Use_Program (Render_Program); + for index in 1 .. 2 loop + GL.Uniforms.Set_Single (Pass_Colour_ID, Colours (index)); + VAO (index).Bind; + GL.Objects.Buffers.Draw_Transform_Feedback_Stream + (Triangles, Transform_BO, UInt (index - 1)); + end loop; + exception + when others => + Put_Line ("An exception occurred in Main_Loop.Display."); + raise; + end Display; + + -- ------------------------------------------------------------------------ + + function Setup return Boolean is + use GL.Objects.Buffers; + use GL.Objects.Programs; + use GL.Objects.Shaders; + use Program_Loader; + VBM_Result : Boolean := False; + Varyings : constant String := + "rf_position,rf_normal,gl_NextBuffer,lf_position,lf_normal"; + begin + Transform_BO.Initialize_Id; + GL.Objects.Buffers.Bind_Transform_Feedback (Transform_BO); + + for index in VAO'Range loop + VAO (index).Initialize_Id; + VAO (index).Bind; + VBO (index).Initialize_Id; + Transform_Feedback_Buffer.Bind (VBO (index)); + end loop; + + -- Program_From includes linking + Sort_Program := Program_From + ((Src ("src/shaders/sort_vertex_shader.glsl", Vertex_Shader), + Src ("src/shaders/sort_geometry_shader.glsl", Geometry_Shader))); + + if not GL.Objects.Programs.Link_Status (Sort_Program) then + Put_Line ("Setup, Sort_Program Link failed"); + Put_Line (GL.Objects.Programs.Info_Log (Sort_Program)); + end if; + + Transform_Feedback_Varyings (Sort_Program, Varyings, Interleaved_Attribs); + Sort_Program.Link; + if not GL.Objects.Programs.Link_Status (Sort_Program) then + Put_Line ("Setup, Sort_Program Transform_Feedback_Varyings Link failed."); + Put_Line (GL.Objects.Programs.Info_Log (Sort_Program)); + end if; + + GL.Objects.Programs.Use_Program (Sort_Program); + + Model_Matrix_ID := GL.Objects.Programs.Uniform_Location + (Sort_Program, "model_matrix"); + Projection_Matrix_ID := GL.Objects.Programs.Uniform_Location + (Sort_Program, "projection_matrix"); + + for index in 1 .. 2 loop + VAO (index).Bind; + Array_Buffer.Bind (VBO (index)); + + Transform_Feedback_Buffer.Bind (VBO (index)); + Transform_Feedback_Buffer.Allocate (Long (1024 * 1024), Dynamic_Copy); + + GL.Attributes.Set_Vertex_Attrib_Pointer + (0, 4, Single_Type, True, Int (Buffer_Size), 0); + GL.Attributes.Set_Vertex_Attrib_Pointer + (1, 3, Single_Type, True, Int (Buffer_Size), Int (Vec4_Size)); + GL.Attributes.Enable_Vertex_Attrib_Array (0); + GL.Attributes.Enable_Vertex_Attrib_Array (1); + end loop; + + Render_Program := Program_From + ((Src ("src/shaders/render_10_vertex_shader.glsl", Vertex_Shader), + Src ("src/shaders/render_10_fragment_shader.glsl", Fragment_Shader))); + Pass_Colour_ID := GL.Objects.Programs.Uniform_Location + (Render_Program, "pass_colour"); + + Utilities.Clear_Background_Colour_And_Depth (Background); + + Load_VB_Object.Load_From_VBM ("../media/ninja.vbm", VBM_Object, + 0, 1, 2, VBM_Result); + VBM_Result := VBM_Result and Load_VB_Object.Get_Vertex_Count (VBM_Object) > 0; + + If not VBM_Result then + Put_Line ("Main_Loop.Setup; Load_From_VBM failed."); + end if; + Load_VB_Object.Print_VBM_Object_Data ("Setup", VBM_Object); + return VBM_Result; + + exception + when others => + Put_Line ("An exception occurred in Main_Loop.Setup."); + raise; + end Setup; + + -- ------------------------------------------------------------------------ + + use Glfw.Input; + Running : Boolean := True; +begin + if Setup then + while Running loop + Display (Main_Window); + Glfw.Windows.Context.Swap_Buffers (Main_Window'Access); + Glfw.Input.Poll_Events; + Running := Running and not + (Main_Window.Key_State (Glfw.Input.Keys.Escape) = Glfw.Input.Pressed); + Running := Running and not Main_Window.Should_Close; + end loop; + end if; + +exception + when others => + Put_Line ("An exception occurred in Main_Loop."); + raise; +end Main_Loop; diff --git a/examples/redbook/10_transform_buffer/src/main_loop.ads b/examples/redbook/10_transform_buffer/src/main_loop.ads new file mode 100644 index 00000000..cc564482 --- /dev/null +++ b/examples/redbook/10_transform_buffer/src/main_loop.ads @@ -0,0 +1,4 @@ + +with Glfw.Windows; + +procedure Main_Loop (Main_Window : in out Glfw.Windows.Window); diff --git a/examples/redbook/10_transform_buffer/src/shaders/render_10_fragment_shader.glsl b/examples/redbook/10_transform_buffer/src/shaders/render_10_fragment_shader.glsl new file mode 100755 index 00000000..cdee3509 --- /dev/null +++ b/examples/redbook/10_transform_buffer/src/shaders/render_10_fragment_shader.glsl @@ -0,0 +1,12 @@ +#version 410 core + +layout (location = 0) out vec4 colour; + +in vec3 vs_fs_normal; + +uniform vec4 pass_colour; + +void main(void) + { + colour = pass_colour * (0.2 + pow(abs(vs_fs_normal.z), 4.0)) + vec4(1.0, 1.0, 1.0, 0.0) * pow(abs(vs_fs_normal.z), 37.0); + } diff --git a/examples/redbook/10_transform_buffer/src/shaders/render_10_vertex_shader.glsl b/examples/redbook/10_transform_buffer/src/shaders/render_10_vertex_shader.glsl new file mode 100755 index 00000000..f48906d4 --- /dev/null +++ b/examples/redbook/10_transform_buffer/src/shaders/render_10_vertex_shader.glsl @@ -0,0 +1,15 @@ +#version 410 core + +layout (location = 0) in vec4 position; +layout (location = 1) in vec3 normal; + +out vec3 vs_fs_normal; + +uniform mat4 model_matrix; +uniform mat4 projection_matrix; + +void main(void) + { + vs_fs_normal = normal; + gl_Position = position; + } diff --git a/examples/redbook/10_transform_buffer/src/shaders/sort_geometry_shader.glsl b/examples/redbook/10_transform_buffer/src/shaders/sort_geometry_shader.glsl new file mode 100755 index 00000000..418caca2 --- /dev/null +++ b/examples/redbook/10_transform_buffer/src/shaders/sort_geometry_shader.glsl @@ -0,0 +1,47 @@ +#version 410 core + +layout (triangles) in; +layout (points, max_vertices = 3) out; + +uniform mat4 projection_matrix; + +in vec3 vs_normal[]; + +layout (stream = 0) out vec4 rf_position; +layout (stream = 0) out vec3 rf_normal; + +layout (stream = 1) out vec4 lf_position; +layout (stream = 1) out vec3 lf_normal; + +void main(void) + { + vec4 A = gl_in[0].gl_Position; + vec4 B = gl_in[1].gl_Position; + vec4 C = gl_in[2].gl_Position; + + vec3 AB = (B - A).xyz; + vec3 AC = (C - A).xyz; + vec3 face_normal = cross(AB, AC); + int i; + + if (face_normal.x < 0.0) + { + for (i = 0; i < gl_in.length(); i++) + { + rf_position = projection_matrix * (gl_in[i].gl_Position - vec4(30.0, 0.0, 0.0, 0.0)); + rf_normal = vs_normal[i]; + EmitStreamVertex(0); + } + EndStreamPrimitive(0); + } + else + { + for (i = 0; i < gl_in.length(); i++) + { + lf_position = projection_matrix * (gl_in[i].gl_Position + vec4(30.0, 0.0, 0.0, 0.0)); + lf_normal = vs_normal[i]; + EmitStreamVertex(1); + } + EndStreamPrimitive(1); + } + } diff --git a/examples/redbook/10_transform_buffer/src/shaders/sort_vertex_shader.glsl b/examples/redbook/10_transform_buffer/src/shaders/sort_vertex_shader.glsl new file mode 100755 index 00000000..3ea75209 --- /dev/null +++ b/examples/redbook/10_transform_buffer/src/shaders/sort_vertex_shader.glsl @@ -0,0 +1,17 @@ +#version 410 core + +layout (location = 0) in vec4 position; +layout (location = 1) in vec3 normal; + +out vec3 vs_normal; + +uniform mat4 model_matrix; + +uniform samplerBuffer geometry_tbo; +uniform float time_step = 0.02; + +void main(void) + { + vs_normal = (model_matrix * vec4(normal, 0.0)).xyz; + gl_Position = model_matrix * position; + } diff --git a/examples/redbook/media/ninja.vbm b/examples/redbook/media/ninja.vbm new file mode 100644 index 0000000000000000000000000000000000000000..30d028101aa2a29613f5f54b5902971c12efdb42 GIT binary patch literal 2637260 zcmbrnb#zt77dAXNp-6BIoIsQS2^80J&H%*;#R>&_u_8rM+&Q>IaED8AZGhsCvx65+ ziv_=>Nbn#<3WaZS=KlWZGxu9v@B6YAu=bi~KQnjijO^LFx!JgEJH}Y=zFoTZ6950- z{z)ek(}=%X(bRwCpP0V=dkpB&x6l9N|I`07=3y+oSE*0me!V;PV*gKEsbx(4)4O9# zS@!?Pl~z(Y|NiecQ(_-#(ldm6{+?|xX4RqrE}C9BguA|;<;YgIw$y)C2xo(*JF@4} zdU}#Qgr}UH>&WgIi>T}0!Q4OJd?^oDLJ1W@IGvy8$gT$)sMp0{p7PE&9{I35`qpt2 zkt>8JmXdr}J{mNM-bai4YRYs455JEMuxZYuU>;Luj#EC$zn4D!6wKYLWcjSfUDW18 zFxTR}<<0a5o!?5rbu{<=b2){69*TYTez z&no`|1y?D~*@e}1DnF~!m1@^5!C9k;HKkmU_H+>GZHGANp6%1L2E6HC!ghERPaC+6uk?CkL8qy?yy9?FwjR!uq;!8U!If%2VFPz`Y z8n&~~4-Mut=A4ut<+Stc4CZWkvXn3Nv=7`b!L0&MedB@8y?hB}ZYsv_lLfN8TP9Jx z)*;;eR*pyQw@KvrF@(p|km+<`F@0Gjg!>QhjYq!dXDs2zo}oN0-5Q5qKlX^eZWzjA zKm8=@qu66AyE2sP1y?(=>(D1+xkI^D);Avctis#LZ)G@-3-t1ZZJ>dt!g%8MZimm> zu$Ch2aPEm&<;b4gd+FEZVVsIcnGg?r`Xh~YOp4%9-%pk0o%SUSoLiE|+?Vqkz068$ zCY9u5O_upht3wTXM)1Tj-uV#l$j7=Bvh_QqxZb;rqtD8xv+w*-lDpe_`%l#T_(NMF zxa(rDOn29{mjspK6x7r=9{4CvAQc)M$?4=zPJgg2?y%c0EY0;M364y!b5L;eGMskL zkm>7g*ewnS*}CEz4}98yWwhgPBxiRAOMJ&_)Usm~XY~(Ce!zS5b#!@a6t{*g@QGLW zD!!tM$)$Mo&6UpYP3e>^;ZUtIoE2W;$k7wBCH%QVq-T}w@6P#(y7wryS?mBY;{L^8eE3QJ(=Rl=@Jr(CqPa#?P9 z=Uc0IMk=*mw0E@>pY5lYFGc&7iuUc5QRWAD27I2=JLuWivRt3P*Wq(@okG)}mF2F$ zbh3PacYSq~a+E8_+3N>B@yJKh-jXq|5U1fK9X|c@pR|n?;w-A5BWqJV)a67W?y6hL zkzLb1&^Lz*a*CGUH^eJ^B^OZmup-<&I8f@Rok8CpEW%mEDvs<4*i0kS6yf?oIexV_ z7Ww%Ha4mPFPrMF%R-RroKZ}^(Ys>Y9wfHOgG&PvV7N6~j?c5MnB zBGyw&XE^DIM?Q9OLj0s+p_~qdI(Sxeb^P{-5N^Gb-&^+m#Q46)MEYy_eP>$Bc)xwY z+_kNkZ#?o%8g6e*7W3n?<+8sVxoIC+5zg76CQ_dB&~7(9g0r0M9GP9|XTPfv&aJa^ zec~DL(F}|7CkeiOH*2M?cP!wuAU{u;i8Sy=gy_%AXa30NYWkWg+>GSf6Iq|GeOVHs zpGI-_ddvC!?r~WY`W}kpQGa;bW9(n_=v@?#n;_E>k9^jH3zW%E%$MZ-zWlz8o*pT~ zU7KWkx-J}|hXtZ|qMw`}SeLV8E)nxz6Zw56z$2etY!js^AH}tM6J&qbFperzi{yzv zO>$(4T1wy57UT8lSefpcPnSjh{-@-8WdR=fn145VUPg@H5#I07ZxQtFMkKd>k?Soh zPY|uHBkF5U9m(JK2P$|=+&@ofQK;oEk_ z&OJelCv%wOKjg6+PYLCgC1p0C04;hZ_D83^^}jsMeikCeo9joPcnkR4%~w*le?qu+ zTz;>t6~pOh&QKonWSOJy5$)H1W++d5u)>jb*AiMbHH1g`$?qxRkl23g$Vl`EaE5KRo zb>DoDAM)u}chMEGKhaM5$@U9eLY*Fq{mGQS96r7F8tS=0>}NX5bb7pn9>f&ndL3^% z;(^aq=^(XOT9|v9hspkulgKSqnNtEVM9ZWg}$%C%4iqtq3PiHJ^CoW1}lj zv-w52b$x(?XDwP$<^p0r^mw2nTUX1_?j>Tsl(Uyi=k4e~=Aztx*chL9wtUXtj0|KnyK zDSEd!pLptBZ^Hfw_e;pd^W}JR0Ur5qKVd!pWQYD$inDbCoc^ioFFMb+Yc?pwt=e0ibi^Yci=9q$s+H!f zXA$3gke|MN9z9wszK?Gj_{1Zhl{DMF*H4^}RKD!s+1)9&JGVF=DfC3j(QdnJj^f;k zlly6F(ky%Iof4cHo%M-V_}X2w4^`1PvmZ+Q@p!vVaG+QZde_gd-`e}?Xk1_Nw@iP% z(JpBOa@u#>C!PTxy=YHorWNM;G|8{m8%up%g}L?6%lGAv)U=CO?_QOBdi5T3e34j> zc9H9A#3LUYb>B|jDe7nG7^gf|#05LBwWyEkh9m1&b5fSV;=EyCV_Dw)E9~8#K+X>M z#v>o46sM>CigNn$tR-WusF|C+S=&?^c@>z#g*vWs1@5e8T zB!1Qz+kdf`AJ%MhWUJCHJ6DMiu9ur2)ALQS+wIUe8S;B!bzEle93k3cllQy@%4dyO zVpn=C(kJ~Q`4EqMke}Wm8x1`y$`dcwyR2Pis?tb&U&qSzF@y3VUMc^F8Pv%Z>xmM# zo%OJme?3)<5pw(yDSy9>dPjwF_T25rp5s&KZZVO5^PNvT13qipI!e<=%%3ms`^3A? z&!yU9Mf#VL&o%cjy=W)+yY2RgM?R}WTRQhdjK53k9XxIPnih{1_4BizY@a0+=;w1H zz34re-fR>dnkml5%0BgpSNM8YrcqqzSI_0(S%uYhrQV`{SC4bfL-i&ZsMH`KcW1V< zpJq8mee1Jzjr9ZuCO0C5AjeVb6@5}a(VgtKeCTB5cs9zz3KnP6Y#Nu0Ti__ zoV${yN&JLTRJ=_%Pb?tMo2+@6>0Gps7kKxZw`xDkB0`Wv^!-X`v= z+`r59E$+{dk9~R|H^fxtgVf|BhK@+ z!E*hr;E@mYlefpu-7Lmer1yOAd_H@YzxclV+DP(a{)h)YYj8H&dQFV4hV7(&$7}Y9 z8$zz+J+EHPsOosJo;lRaN!RzLq0ygP+OF2SP)$omCXj|Y^dS`bfM=UrdF z`au14F~09e*){tP1$HXIql@{*BOl5vD1Abk*y3CpB=xN&uj#+s7{WeJSM@r z9|61z_^e&$>~8Ng?*86;UNdHyJ+i9CU0+so+Rw_e+};)<);lqke77g!fsZZeWe@yN zjC*nvmwbR{<~;jsKhd8ql$HEDyV_NEiuw6tux~u_;e5GwmmPRNjB9~|r9RAW*0x>t zih*I`erSkHM?CO(&K@T|E11Wfl;>}*lPBqYdvSh|PtG^mq$9LPoX^sqQnp^7rN>QD z=L_F>9N>VxKdK`lMvd-jWOJVU-QMd`a@Vm)8Kh^)_H zN%p53MY%pQuaw7KvHP_w%C(NN{q-Kj$U0b*ds1@v#seSYL+w|~1G#oPor7nvpJKRQ z+db2M^GNjPqiKEPflo`CODw#I=yM>wQcqw;e(I>WTCHnvEUV1?T;U zM?O~c5%mcZ`?H(19etW{kt%;H_HQG-=PlPxQ>8j0y@s6s^}n9d{oumfl~>N+h(|uH zPlkjmS;cw8M|r+sC4Zy>x5RvTQOc~qCz@VB^v70mzaJNzA>rHKgLu>q-*|=Z;3m7n z=}_)2-pwgL%h1{Wblz=w>X^Z zm*se48#~xV28;9lKHtgoDM#(degc1DxNki0vHKV7el1FK*N#3izi#*JGfTyNY3I>W z|HNW@%Mr02>DSYdbvqaR>0g@1^zoiA0Ur7E-3FcA63JZ^`boYu6{%X=GF(fL`g#U` zdNEequTAxy*IJz^=cq^?)5`LVN4|n1sL84*?poVdmaqFdy4qfxZ(oz=VS1+NWcL*3 z=cPx;^p0+7KT4c$7nb#}1Kt8YSKVWjr;WHT`gyjauhk}cT~@4b#(CFskK?JDSns=U z$#kpVar&p3n9u6Vbi^Z{`&cY>@fUmtynK6pq%Xz#J<*b~{&)ZdeI?GzxR+m>Lxa+a z{ljzb{0MmD(X4LVPVP7 zb`TY@#Q5kf%coZ->M~BGcagux^L`g?KP={d@{LD6Yit!-a9phaPs#fs+z(jab)jUj ze@)RPAMPgI&3F6YJF-a($0@ZTpD1|XV=o&}bSd$@StQFt-M^t; zE5&^#dCPmNIn7@!`pX?DQ`N@wUffSong1U=@aZ?3)6)flf0itd9@v|Xd@t@Nx_bL- zjn-6knph7X_U0GRo2CkT7k6!M`vV^N*u3)}J9vL@)!H7T>{ zshwXKk7?qye*iq@$6CeGs`TP}V|vfCdOK= z^63lK(lznD_vhaEi|wYk5@Npp-+9E#wKOl6kjXn9j_jrhVPd}Xo^N;nk9;`a>Z3N& z{fxpsY>J$JY2|wQF})bC1HAJa*pDF|`Lrcl=~S2)uT|uJ#JQ|^Zl5BE#1DM_?h zd|zWMJ&C>--(UY+^7qi$M0z6Z1rv`;S!?AXPeF0MFxgvvz$<)#N2taDu^)de zf4{yViC$+E-@i9fcF_&m^GJNZa(I7F!+84faVp+Be*&HXpR3>|dU0Ot-(N~R6ZTg{ z{Y3v;;+-FWPs_W3dI)|`Rqy-)%7(^8E1w8Dc%`ZY|d%)W18Gej6n0 z>7>l|&!TnP#Cq6kpR5C3;hV6Ya(@u|y<~YTSl>|P^;9ymXkR~X|L-`PiaizhdcN^G z@OkJuO%D+3?FI5Y0`J#p#qZRvm6)#!{3O?Ra6gZDnx4ycMqLR%5dGuY`exA9@>0-q| z?)hEzH&%BrooS|VEy(-*13dDftlwEhizkZv=JDSCku;5Bu8I9?H!t6i^)%o@F|mJ_ z;|1}^=gxD7YJV!k^?l7{{R}-yGa|+Pd8H={8+C4;zM&(+eA^>X*cv^K5;cQuvcRlx(Fema24oDug4 zePsL6`ZV<0{2(6FMy_X+_Ii`Fq?~x6+%d!v1=T9KY^M zCun!DxE~xYzt@OIKE3*ON?S_UPwemL&mtcAs9I%e_*R_9RqyQRGq49|ck|KPxxyaeY8xk=q8ifFmEyeNXj`9n zg)gKtH5pw*yuXn9TWx_wYlO_2%l#*_CQy8mI6sJ!^^Nuy3Lg0M2FoZ;*sn(gde_e| zK5#r}VdJUg(f}SkQl3ZYhzCAa-~xqT6Z6-_RnG6V!2SU34RF3gJo0HrZ_zg~;XG!x zJYRKPOCA>{i1_{1~dvu?b#W40IIq@!ZJ zcVr9BcdfQ=d(3^Yei)VAC!PVHN1saVPZs91vz3E)hs>mVy~Ou9OwQL@@_ecjExzB? zJ2>gYEHWO6^V!4S`ot@Izb~NSrNsCBab^dv_uforx(fa83P>63_w=btspHMUT+b}) z2k~y;qkLm2hQ#+N?56DBVDG0rnMFT@i1aSf{!ni+gL2Oh>yuV*eBu>8IR8fbbt|Dh z{ZlT0>jNt}zX#955s&BNtknrxHASpfmdo$EC*leX-znDTNpgRye>hH4dx-VNMY*1_ z(%zun;(jo;qWr!i9{Jqg-5`5w5RXol`)9mQ#QQ^vze!~-iu?Sva(|C_CIN-?VMFXoHsLw)0c5AXLW^C~J`r!?25%Kk*t7E!g((mcAe-2dWzKjM*32YXk% z&(Z5`pbeSDdhLqolvnBhc%KA(Zg~HR_Q_}ujPFMgk9?@F!+S}@Ykwc6w&}(Dm(Z7T zegHi3p}q^=XSy@}`~55Cui&9RT))EmQm|jd_oQggi1v=ihx)96PBXp~<7vL1)1KC} zXc}=hK-}-h?;G+dcziF5`uIK;@Os^jWcC;PfnGsQ{>pn=KLRythStct3@BtIIhWI8yA7suq^z2fR`qC_lcx!uP!R9t-hU9vm+g+WUij zzq=vP?U!PGx@f)A{}GRTh{yNa^zl4xxh(i*t#tTMAMwb?8eFC1Ph~k>Z0FRcJNhWC z2q??lD~CHWTa-XMlFM>^w|9N=*Hzm7g}6WbZnSSa^3h&8S2C4V_d8hM+K#Q%rgAy1C&=%w zf`|IY_vCmUfbYk(`#s0^^H3h;{rka7cDb;k;=M{$r@btAKd&b;s(d0q*awuA>3~N*e6P;n zKF?azi#p8^=lkDy_iJ1J{oWn%$cOrPKY)0>NesP>7x$-$bDZ)c9{Ero?-%fWJ@O$Q z`3T?JSNTkK;V_<(MXu-YeZ6uX0(j&@eXEsULZ^)4e(b6|Pw_0xoG`ClC{O9{JzoJn z#3LWdu8Nrx){FOVarL}>;6Fgg5Aeu`{sIW@@9;hj{Rbc(`A{G4?+}mv4U}}a|0D26 zz`(u*{SV;z0pgJl_0gUN->V}Z;uSvdw}9{AE%dJd@8c1V{0#gjSnxg`-_N6e1_h6N z=syAcA>jLY#Xke$fe-Qc-U+lt8(DIhjn|Pl)&bC8T{m z@*y7i+@O#CAQb%Ir<6M`ic=~1J_qs0hyEaNzl#1Jl>IC0Z;=o6(H{i*f57|^k9??) z{wxrW@4*qT@PR)IoPTgXjQ%YUkNz=GAK#}VUfGYsdv@eQef<6Sdoh2+BOlIR7TEit zzYd(w5dU9%_`V+bEwm?u_xPBfq7UyIl=lpf*JTaHuR8%}4U%7vE^cDXg=#L8Vz=!@;@Vr2IZw}`N3LgBo zpg!75WBwj^@2=qC{X6O__SxWX2Kf+=eCRJmxeoyUFnB+Jc!dx2(VrWhHzA*b2R_tS z&i@e)=UoaO&&wA7+y9LP_QQ%l9JEITykegU=>+yV$gkM@0RF$q=RO`wAxYx>QF^bv z4EX!O{1K1kQT+LQ><}NCU)a~@%O%f4MrF6le=pv3g_w@-$MF6T z@yG}Mf7sLm_Q^uRezQ?KXZ}HdKI}?=d;eiEKh>Ef=O@6UKOuM19n|@pz%L)?+;3Yo zE>V?}!hcZZo{o(EfApv`H0hGSk00R^ukba!W1pHK-Zz!=p0~pL7W%RXg_SSHT~EFD zm+(GDc@Og+e0uo^%70G0uiKHvX;0+G^J&Cme(28#*OTbK2>r1k9{Ero*JJ3v2>B3? ze5g<8j|u!a5uBGI9{JE86Ruy;KN7A#5s!SRkLRt3$MaXjBOmJH@5kSZe27>0(4Q2n zU-3N)u77d8i~gxlAJ2;wJiL!VJo2GF)-Tp4@*y7iEbxD&oL|HH9X!ug@W==LukgGY z&$H3L72?sK7W%is^){|AkstBMhcd2TJu_Is{mJFHmBwG5r-DB~#3LW-EB?H|ADCxp z`h?4)#rgkmY2Sc&blY zUV9AiUxs|>j|}}UDgMmBf0Kd-|7NI<<-_tIAL5Y@^%eVV@Sle5gLvdae`>Dyzp39> zqCH#7_SL|Dnyc?qnk?Q+xte&-*AWl?*-+oZGbQv9@3o@m%KoDF&X|yPxptHX2c;rKUv>!nG5QPuyOOQ_odpNE2A=;86 z?A3}Ea{7zn4-f3=6g=>uKAtC_eFE|!9{Eroe?Q`}{t%CRc)o$f`wW zo+lt5;*k&a(Y^}tXitTBO2}W! z`)by+jJ^G&cuy4mjZZxCDf;+5hwnG$uYCWpJg}ct{CmOv7X6zkc;I8`k1=~5I$A^6 z7xwbnON=c-^UI3;=?nS3T=CC{c;o|p`rf3%C&hj^N!p_*`GY;6g8wf*^cM-`(bM&y z)zQVo`vv(vg#jM(L;sKHUljdETBnm~E!wY{bAz$KjQz357$4)kLwY{V}7WQ>nHTjiF}AhKJ?d#@0*qP$l$*d@yLhzihaY> zfBOqXdk4fTe4vl<7?k%u5T60@Sbi4uF+SJN;{A2ET5>+e_z4(aA#3&cz&^s>Ia3ke zc;rJoo~PpZDe5C0_$>5~ivG;O-zoY-SNxwNALye$bj3d^T??{Q%kvcwDzA zDzEVGI^65O9qYeLT&E^5zHIO;|9rIK0 zU~kP_2Wq{0D&Bj zD*X}sRV)1&`me&bDcQ~yC%!LbJ+lA#U9l(M7V}NVo3j6R{dyZHQ_Iz<7KBj7Wm&r|J)k*m&fw!+fUNDRR8lq3miW5Pmg%yLw&Tr zQ1D>Cfq3LYef)jsza04xk9_DKAN}uJmwfd zP#^mj_9x^+Jn}L0?+^a<(VxEs{`nPu{J@9$IR0_`DtvVyUMj>ZQ1qexF@LNNtS{ta zb^aaC70ZY53-I?L9{Cu?CxH585RU-kCt!OZpR!*9K8$am#796p#2-=gvHZ{<@b_T( zkq`SP##cZ*jxWR`AA|S`sE^|j`4EqMiax}9Ks?Sj7|#Lu7{+ga^*)33z4ARlJn*4D z?#D5IT>mS0D379#@iMT!aQ_Z?g%5rY)-Qfvu)Y;M@G0>_aKC?eY5cPy!oNb6ALRNP z;`uPdV>}Yj$Ndsx_p5z7OT^bW<&9^9e7GM1J|*4;oaf+q55ssKfJZ)z&w>8^lz1HH zYtryq!k^>==^qyH$cOsqPmukxkgCoT>%ooEe;M*29{D_TmeKXG;=Zz}*Pq3A|Mnk@ z{(?P|meT4$!k^)`#m;#j`rlLdAifC31Ht$o7Wl_k@W==8L(m_r65r&vx>QN{UyUvy z{c$RI;6r`IpDe^fK|aJI9|QkQ49bV~qo?UY-P?w9ZKrH6#3LWZM`1f!P;mE>+_hZx z7bPA_>A}<|zlaw-RJJeT|BFv~PYLl`2;x^G9`nO=jPHWwSKezvJQ(Ct{IdXFiT?ue zWUxHQhx$tSApSD)AztCbcrqA&0piOj@gES6e4vl<8|Y$sDtuP#FV>Ei^8xT7UWs=D z{FeR7KDb!$g?srRevXnK;(tH5PeVS$BOku6cp7bo<_;C{DcZ>LVSFEm z&%hA>UwmLc!;l~BUle;6%n$XkeX%_;f5ZbH+H;^kDZP4i(oSeR@u2Ll4DC;V-XOVcCBgt+!hq7x7rkl8$V_ z`xL}mz=!@i81jMt4%A1y!Uz6}(SI1mld_Iov3ra7d)hf^--URFd>G#f`UeAhB!v&~ zSRT|z|7;2#?5z-wd>9`q>UxHR>#6bTmPq?sjEChumLcJOqVVT@NZR8f9{JE;o{sUd zdi*<{7UqX|!2CLt<^@K?E3)~^=wkQU_EcuWS_9@ZD>62fN%@|gSb_aPqnP@n9JRIo=NkMjCI zLA?9Bb2RD;kzab5KjM)OoA7F6cHcY8Yb62aK547A$}mnn@9h&=)YEn`16QI zK8!br@v4;ggAmUP@&CoA#7}|vh8PbE@tB`dK8)7_@fDE|IjhLp<_n{a@3cnZ$d^8Es{K!~1IVuZZuh@qID!p+3IHL_EG{MLhDM zKED4<*_kQf(`VtoC9C{>$cK33)Bn6c#UB;qQ41$H^@HmXT>r3B2k63EVgI>%oKHOR zp}u?YBl`WC@CP~4n;+zl>nX$|AMV%aaTJZ&6d>a1ggfQ4AYLc#-xNITAC+|QcdPJ& z{}A-o`(J$M{{Z*v?5ApbWu|7~A z@yPdVpq=Hs@c(@=oA2^s`MMRd^*g0RyvH)W@xZ6}|ATb4ZJRyfRT=JXnqTrEKj4wi zivQbA^Ei@IistBJI`S+2wZNaD!WVGPz85U`v)6F=_52m+-qR?q-!Com%M(Pa>xg)x zd+JCT%A??ckMR+7ba7ekim2|B5A~UUH+o*CEZ0X!|Mln}4EYeRKVL>)rY*LVWclz0-a-`e}?Xk1_Nw_ML+ykU$-0eIxY_y@XQ2RhcR2)Cv+ zcgn9rd|^g4XxeQN-{`&keF`4pGoU`ktHAga$cK33Lw&^`K9rx1uc05Ni1-;l$@WFO z!Uyq>75`kHc2SniBA(G!86O$_Yaw0(J_3D=x252r{D?KZUmMGVc;rKUd{3(QFPQg=CIkt4(XA_-_EGQEGE5>t2f2oK^KJ-tDeE9oNAMpy`ZxQtFMkKd>@%sPAc=G5U72?M$ z`2iosgGc{b7~dZKVIf}OL;q7yKE)p___xCR(La{E!fExF;}v6kdOW{U@UPF( z<0io(ey6mbv3@;AKNS;vTcy86)VBbSd|GXy*JVX~-Eq>NKgLJ49>-I)YQkRZ)@*0K zbC=#tqf_&1D&q|x9{Et;I`Z#$%(@v*F*QXz*;A4q`4F%0LHYE{N2zWbQ9u18pR4XM z$|L01pQViXAs+el#{(!x#3N4OUVZSt$snFP`p3lh@yLhzY}_Dv&?uO@ewOjV5wFCP z2R!njzJ4>7GUXNV>>J4Tb{~tSF8-qZ4@g}r`#iG8R^PZ3Z4Z*P4RHUq-wRe2NVHpAE2S&ZJ--Q%2^mj0eCge2||Nxr^GI5b?_6<@nd;{zCk? z_$s-)5oryn0|ZGMM1oJH?rASfPBhl#BT%uaqr}zYKWfWBUVX zyztNEuH)68Vp2Zw9z`1{?OzG(VQF#%y}T^ui!<{4+X6iDAs+3`@O)X(pYsK^^oa5P z%S7k*BA=qax&n34Lb!W}{5^QmLm^j_RY zQW;rZ#8X5Q3Lh%!uc7z;2k^*e)o4vsQ~f_4_Kqi*->q(KssAid|AS>Z&d>NgKt4qu z>jU$L@+;+q@+kR1f6#9>r>6@<`_7X6UEu>f@?rnAzHUjwkB9KY3EuHDu_?8S6XT(S zcm9L>G{pZGAI4u|z>o2p5Rds`I@SmBpmJlyzSS zk2&XEZ$LaMe`U`aQb^TMPA|RRf8bN_P#>s|_Wb&@#&p3Q z%C!n!dwj?r@e1FuRx~d}-0#fu+S`NuKke;9wO57lsLs+~7rrk*`+ovH)JOlUh(~); z1&`%{{LtSQ)(`R_9?OH}$M+8uH;xici2C_a)(_T)f`{@e{-l6UJ2j1}i1#9icfIw$ zc|LWlEZQrN^dF1)BOmH32~-K&pyqd&K*ngD3?4hME_lg$9QF^kLAPnCdh|)rf} z`q_J4L6z52$;@Iu?C0IjyeeSN`Nx>i7} zU%4zV;&FeBc!h7&M!KI-_%oa$&tq^uL@U?RkLksFYk;gTv@b%u{vUjvOY7-L_7I+O zR_?!$ANN~`$NW&=JzxnXR1oDoFUyPjTjWDL^3e~Q=}lg-J`9xa-SGG0??wA4#3P>~ z!~PuOOJaTmc!dwjuf(HVvXxGSiT0=>e;?+Dc;v_TlkV^>)ZrHqAKqW~C(r$@baIx6 zr;^V5ecwNe)@>8-AHD65c;r*`1CLOR13_GSE%}xB@{m6RJo4fEg6TM){8#yqPl*Q# z>p#!6In=Me*dM)=^@Hn226*H{ee@rS{z8!t@d_XK3$=Eyqs5`ZpJ_(#d=2GC|DlM- z@{oHkb$cl0vO~-AL?U& zLp+uj@&Cn#@#l~q+ZXYepJJa5_8a)V0^_-$e{76rqIJ7L5yD@%RdBW3|3dr{a zJOTO8UkmC}$&Qq}W00^P_wJX$-wWcA&og&9U91?$J-^HK1`SzH11<=E&e`Sqf(40q z0Q@P&NPX|z$Gs53y zA36T8zak#_tWm9~Yv(|&{VDG|tbxU-|HVM=c6skti$>GU+krgJ@~)>gm7Izkp?_(tY){l*pF^A{1ad3q7$+U^$cOWpb;6I1R1?3a$q$l$UmjXY z8rS~nDrK18*qE($tx3f>yX%taFyArsKZ1DRQ{Ee0-AZq+3j6Xcvi|VBvpe@jDmq^D z?|ibp-GEp40IxS#MscMBMEn(bUx)gxsSD}m%fdXS_5@j+;o$tYa1>%uU(Qna;G8Yi}Js#-f$3i+&lhH+lJ(T=jD13ld_&^`+*A+Z` zuMm&rVb%nSPZIAF;`%$~#r}u=OdpJZ}>gK{1A_PiVVLWf3K1s z;-UOn*m!EWG=N8soaFQOVtwHJf%S=esE_fU5YM2$D0pZe)W`TzdeStCxhCRYbd%pJ z62Vf-7{wM6p&PWWH$E!Xp`zy%7wCiV{(<@*JUhl6a2^*Z>kI1x z@yLhzx;P)0T{nWqc>Uuj_#12JedP!qJ4W8OA|Clr-*xIY$`l#FJ&ok=(T?7tZ(_v# z@@(l(1^E!K@D1BX9ZToo)~k5uy_&lr(e0N)UbNnk^&BTDDt#VKH-2$sD||aWD4v&7 zn(aREF5p9b`goqUTo(MZR!aTsm+8Ta+*~ic%_kq?k&j(FhHPtK+b*F}98$xeBc_@Ku((8$rE{%6Sd!5EJL@yKVPKC~aU z7xH0yBOmIs**mDgcF~>}?>WB*@$Oeg=|y+ZK7+mS7yz&E9nMS_`iT1Mot2#Wjd^&e z(r{7V$svwx1+BGjHWBjA-K9Kxp1o4|M`9=9WqSagAs@7#h5FE54EPj0@UhK}Xv5oZ z9@T5E^Zi2qn2JBl!XcFCUy?`nkn3Ls4}7SP_8pi%+EXZa@E@w^rvd+@;NKMa(7pxv z=w((~GfBi#v%LE+`2E(LkM_)~V*Va3*ZWu>7T^^=&}Rh$C~99gcO^}8+Jn7#ZBHB) z&QmUrcVy&4JeEh%@4DL_w>VtHcN`-5Ab)(nh3~tNkD>p^4JYF3J{R$PKIE6>|E6tx z-(Yb+)3}h7(LWO6kq`CJ{|@@gK|aJIAL?r@%z>%%4VXSwC1__&o|A>SO()KPlj2h(|uqx7xbxG55v!;;8Jhyod+?lnNgBG+{qb zCtAEWuP)Eel>IF1ckw(B@yO=^eLVj|Jnq*Kk9?@FoFD2_sr^Y2pKYgn|A>5uM?S0R z9s87sm**+xC+i#i7eISh;Lm^|9{A8-sM228o~V!cga1*C53V*BeWHUE=)fq4fXY`gJnZcq90;ej)iGe;x41r|3^z zN*!+&=6Ys1|0CWCm`PWv3I7oJ7+ zV*P)d{Mf{1)ND!~?vBnP`y=c(5wDbI(@XnVt9+bY`z*_k@$1am)c3MTzj{aJcVn8p zr&NAUG0%MBE#On)HDbK_O1tb_C4~K9xd{%R1@Xlg;E~Vj_qQDwQIu=xn>xRr!TBcQyV>wkPIaKZHWX{RX{iCes0r<-z7LoVWiai|S!QM>qhsXn|onIJ_X(HcWyoF#f9!-$NyS zY(xlcT9%hvQ!~l>!Sw-t&le@oj^wgj-!1p2=&ug_(^+qqQqvV>xu>tZ|3^FnKC~}T z><22{vCE_t@lJB~m*qu!0<<3hdj%c*XW{w`{atC=PP)~&C{L{F+rG%!v6rS^DaK=F zc-Mb-R?*^#MY;cY@A>MGf7>G=AKG7{{U`c^z<6`GzQFj@*uN03@HHiS+6l3KJt*&U zt@d;5t*e4XJoO))`es*-*mK(nd+LueovrF)XS^=_IcR-kdmtY8u)Zn&CY8A;^w+MG z`naBk_Ch@J;riJ9-3_w02Jz@*dB270VdO(R@@aIN26Ptoy(MIMas8p#-@|$Y@yMsG z7)Rf}7w3apSW4)LBuOqCHtce_CttAJ{DDovM(0nr>i{A zM}5UU3Gzog@}a(U_L1!;%I|t0&&v^y_D6_EKK5XXz5c!^f2E;Le^K;tet`TDk9;`a zV7dkTtn_I6SuF#9rv#_2 z(%uBi>v7$psJx{)8!o?Jo-z|@;Ef1wRb|fiPHTUSJ{=VPad)h*m3ltKVyDxbY69Q0 zh?9qvdw`F=n@?|rKbg2y-to6{9j&V%-s7B?e4a(M-jP%e~?nLf8qOD#G}6~<@ZDX z!2ZVI_hNrSKBYZCAMsd!m>=@t`(@XI4bP9z|Hk*nlz%UM`bmtpRWcp%3LlJr z9G^JevA-c6`#bh;)JHt_U&JeXIKN~3IGpe4V*HV|FHBZC#OYtw!7X;{=g&+}&m!{s zac)<9^_|a5cMnaK8k?EBcGQyT?&Era!1Tf%yqQlt^68$#`s(!Je05$%d;7C zj-4}E2`RfS|EkA*^Q-BZQNSl2`6z2`eQCapCM&qkSwC3sOY3i1Z8BN*FQi<$p1wPH zooTtcI5N9kSU*v0t7%2{^@&G58vR_aJ#ML~htzh;!-`(lyS`d&dMZ?ua^q)u`pCs5 zY2l7+ee~$&i#4V-u&z%$@@dA;My_jPOxK|54*r`raYp7JggiUKk^R4qGcvpzXVQRj zjy!qqHls#y%hUsOpLpbpnmgIJuwt^wPDp!@=m~R-bZuss?u7A4-@HR0f`{|rhpPtJD4P)~_)7rAjkyCycW0Wg9$kdx1 zbmZuOK}NxyeND=E#wQ;6CWkCD{C;U`vak)#dM{vX{Yk1WZ7-Jb^T$mQG*=0@?bJ*JU?cz z?{7P@zHYbiL&Tp3`(?57dk~L&-OpSxKKUmZR<_+vc_x3lY=jKmE#wW39M<`)QS;l2 zhP8TuBPT|BjHaRc4gJP(pLpbp?U>ID|E7(hms{!JqY`tPJg|kKU;M+7dri$__RG`D zV2Lt)(ZyWmowh>^t8$#rbkt|Y8Kc|zJ_ZGdb4^h{$+IsSwsxXm+sr*R;?;Dq{cQ#x@ayoKi^FNJD zH)k4FrWA*-GQBYR{o2WJ4=mslk9_X8uj$>99NgW%u#w8|d4GvU4a&*&4S5~ex|K`= zn&sqdZB|ES&u`Je<2kt2y|_<2^0C@1;Ddn;qCU!DKi7k#hGbwJ!A9C&uGp-+16l zyf)a_c)h9V;;o(E8{MFtQF?wW(^@F!7vHrSJ`@u~O%vo9NYnW(FeH=OaWWqn|@t2aiBuN96QoArXRYs9w(TX)L# zg-5<5HrF^?v9Fk)A35b?r=}QbI{s+V+l!8@y_;p^yWY>V8r^r~$(^SgCztm&^|LY^ z@yHkb*B+yIx(=pwKg7}ZFTUScG5%|l#XfO<&%23RjqZKho9uBqCw=e1V@8MT%}r+Y zJ(ya4#3Ns_>y?o!Aj)JP8dEA>Z+*u|{HNXi+wO*;=U(c_y|$(`=iRwwSlwCrA029kzBbw7YVC`8Y7W=@~x9pnb2M^psOs%~gxq z8rlQDgw)@Qc;qYa&nBa5NzryE<^B7HZ+9Dwi>5KC)H*#?e}lEk=n;8Xr}LK_Ip(WF zMn=kM=q>libigBD)Rxyqzs$J|)==_Wd+r!dtEMxkPFW+Bzx$=g0&fI<0QJN$@8zFxI*noaBGFj&lEr$1-jliS=qF-fSRWgaczXLvfv`Ty?hZ05z*H+8*1m{Y%=T-nXMTm1}cgs_y=n8fA&gWYdj z>)_&7Cd(P(8xMS*u$)F@)1#*LV;PCR6JczrdDyhZRd!_0xuhnUT|J@BS$1E`?6b zApHG(=@XB9dXGZJz+Bf&ZC`c=A9EqXxNttn^n_(}WPMenQSRY&lbud+#;YrP0Yh(? zWYUWKzVX0E`G*;0qK}wt>IFxiO&MzR3^;CD%cnYW)U6&y?l+VzY(!km3gf;I?{hjkWKNm z{j#G^yux?2AoWZ4*>uIp^`zAzn09^qXj-=eB>%EM?QA22tOYr;{;?fp{P4-tp2+h8 z#53Sy?H1JhrrtlMdz5#4RvKTc!xuvTjhz2k=8^Gpn|?Owd3l-NwDq-aPxxr+|J%pRYi-88o#5z4U--^Q&gn9(T5|lRocz|%VzZN*#$P?GzjP;lIb)px^b{b~2KBoJyyq|w}ahDO9r<bcB>_gxLkE<~y0Ys-!tX55u#23t_bCm#7?KV>wJe3ijqr^h+v zi@Tl84DKw}uCve7O67C=Wi_kb{lZ{x4?FTvzbt02n&RwanY0%~Jn~tgcZ{7q{0wbN z@q|>qnCD5x!2-8*>iWScuWQ>C<8!qfhGo2QAFYdnS)^q)~$weydWO=PKLfQ;(N5x zwZ6k8ALt`KbMwEA6%U%~?7lcN5bcHeAz!29tmdC%cj)Z1T>ou}%wSd@bX&L1)ksLy z$Ms)SnhfUs-^JV3p)wuu$mgkc-q;$tMQ2CJX)o+QNyc^K!>z5lzUZ^h_C!4L#g;x} zw5_&L*SC*#^pjVL{gcPJ0IZmBxJBe3wphYC1CFk2F1f8}^KGb(V6aA&?E#3Oc zyWWKS5s!S6>)tf_zxC+W&vLy{@4^Ek=b6L0wcgwRe|v1?%Psa^K{Eg3dsmGy)6VFw z=|4E-M?CUrg?};zKR>E#CvrP@tnVSwON_0zSL!st&q>Gq8{(0#`}GsX`PPjMtKA}} zKU98x#`ycoN(NiH-I0^(o-w|>UEi>7v~%RlSx*{UvNtiPr%XpY^69nyF=nU6)_fM~ z^oNTnY0W`Dh8XP3U`MX^M|v}ThgycUA&ny^?SEr@Y#`PWX{Y(bBcC=hueoSd4TG*N zr_}z5=arQoDhMVVBd7?C5%ZWaj|njWt_h5GOr8vskaf~nl!oBOR;kH+utc(taR1#-f_fK)Ys z*SCRn_k-t(Zy?p)z-?vAKG<;fD@c)5xsAhPePr}~s9*3KkSmEiKll{*0CSeV0%;>KV-SVGln;{rJ5gO?t%R zXRP}X{yLco$^bv^S7*L~n{8r2dg0+%k9fvOS5F@A{km}eXI9&R-V0_7Ot@xkG>GoQfhg3N!u7WZQw z)?=O~qaEz~xQmhs;XFUcfA@t=<^xnU<<;kX17K}d9Mv`u{a?e`G0>|;3^g1R{bj7j zyx_hEU|+?}l-#|^;}?1?3IcL>viY2m+&0$V4HnN`R4rxUw)M*@p zDNA9*n>AFDCi&abSIIQOhRqwP)c;qq-41)R2y%OFX5*Ecxo!S79kj<+Q^~s^x3M1c zq=1qzr%fc4+UA9y;|8M!u<&0kIy>K1Bb`hc$NW-d{(J-Lr&+&5u=%AS{Ck^`9`n?d z6UpG5II5g_r1JQCoFya6u=LMsFG%B7la%dysS>$T_z%R9+_wj*dah!MBR%GkvEigo zoL#v_+N7M z`X)BN){paWc)8FK^8MZhHhyr6Bi)|I<}aXq|>iZ(@_}@8fM<|;{TCSg%md`3qQ1iI)vyO&ATEpbXI=`wX`U->A6po- zagN)!n5W753T5xG_V95(p5Lq)>2RgvN@6=9`ahim1OG#+mXdcxnI&N#DH1Mnto1ga+;}MoX7l2zK6Q{-_Pyb`MwqNp4|O^%ebVtj9dl>3MMC z?hL9F*vP}<^#jV<8BplLeL=P7Dhj`kTT=axuc?$!&7mIiGfZC&QQ4hYejLN~84DM|s?I@FDaz__mOjSe5pZa3 z2Wp;>H~zPx3)Ji0n`$c#<$mJf54*AkQ29tJZrgG@!07dCy@pQYFUwnhi0dFz^A6FU z#d-s6NXeBIkZzn{aX`b^|+OV^g5Up9uCy{mG+b!{MIJ|0GGuSI(g z>+|svgTOj_F*S#oczBK0A6E37OEu?La9jJd18lmY(CobPGmRttz`Sb_HLYCYQ16R) z_A3vZd3Wa zTZ-MEtqg|&HSSR*VuV9I=9$06kt;XvQd^t0JiK=H3KDbw7S-A5sI6}ohkDFYvxu3J?2>h^k7II&FXhCf2TRx9!kft@4Zj-7tIoZ%lFv$;#y&w4t0dP zMTS#px??@&WxwbOVW$RC^AZ;x9~@qe?E&xR528wkPrN+9&&PVqv%c>FBO(S;(ogh% zZDH-eWBo8TAK=BGr?_^7IU5F2X{9H(ael^n%u{0waP;s%sN;`^KB6k^Owp|;}U`(QohS2XENhJz;;P)#G&Cu7f-kRJ0aXJ>*`p$2Pzmgo5!uRjZ( ztiZxB=6^PU`|)}-tj9bYUaGeYLfV&O?eTG(7yNrZ+?`f~t;gKz@cH@lC_V{)w!-Gl zwW*XY+E2!1tDscDCY0Q-$KT&)@dlXk!H3$Wu`wH#9^t*$g0jVrYPX5{3F|Qr+rg$- zSbCry)w+xDX@>1!ZBdWP9h-~iJ>3UG&Qzvyv=6tj9`m%P6CianTOU$Gj33Gs?!l}B zHKfUU07$(7JaQN(MdWe6`*q$ojhzwFQa#SzGfH zGzn}?)dFlxnY|Czd;?6_uaSf?@dpWnQO%oxYxSmR~=+7AS zx8d&5##Al1*r6Wt!kWawt1X?Wl(dNVr!X)3_d&?54^(*(#CZwREpYI&fl8s39qKVJ zd&^>2aJw>FpXAHKYyQlH3rA{FX;5vQ{e3Kp=faSjx>TBRjPp`G7eY|?^6Y(Ta2x9} zFL2sz=o-k{GC^CoK6t<*=&^hbNIN%jJG}0FsM3$kJx1zy|Jb-E4dzUp3rf{uJU&>D zd5Z57SkRJ%zg$JUkvxvZZ{3 z7eCot=C1MFkH?R&9`m#>U1{NWyFkj0=kJTxE4@rAK#T8+0j1Lo?#JtsupaY#`lZ9U z`cbS5ea6G%^_V`J9z*P6GpMI7a6evunNN>+Ipy!dmF!I*B}eh_`TEmGZo;E#kw7BC zxgYnRu^#ihw_0IcE-Mowy7BO-zL%i<=@^jSiS>C(jf-%k(;iT6SLc3B#T(#FRKKI@!prp+Mjv6O`nL|?kpu6^LX=9Nt>Ig)I47J^XU=KJ8Kin zn=^w-zwZ)z`eeUd3B^0jq3R1!ABOf?4>w-SrKFeWANy=s1J}DuqsnrzUIpthFFbxL zB!^6)vY!NYzTw~opx=yComYU{srS~wuE~=qnfsML-(9~Qwr`w3rCRO|^_Ztw8U@O@ zaa36%`qP+?d0`{Bz_ZI^sG6M1pNI9B=j+!S9v2)!rSeaNets}K9urEX+mG;@YbOo^Nd}(K>C|8l=zGEBy$5`K(EPEz0BskSbAAowui$@ zncXdk+rFe7NM*)Q0~=4r3&1>cp^sMJ@q4}96&!R%KPsqISAyWNagvd(&thvLSo&Z+<{1p# zAaeZ%sthfo+Vzra4LGr7D^=FD;kNJT*3ds;8ykNP=Cjl*NTc5XL_ z`poplDme^~_3Fmau%OFGswRp2U|tgfQFX^s>CZVH-a0iDd^PNUjXTe6O|A?}7qIm{ zb+2$6>oHF*ITU)$XZ_cSXGDC^^K5O#!+<}-sIp0Q$p2qFrRoLUuj6d}eynJps(mMt zVd05XDd@z%x7x8ANi1`k+762RCLJhFdK5lEi6s7Ctj9dOe@jhJ$)YCvsJZFif`9f3 z8P#zoB^uFRmIkL0-QN9F?gYY*^qA+KxfG7&da(1eJFE8m;JwcTBP$eU_mvFi|GQ=Q zDj2qm`MuY0JMixn5Vg6mUU}5Sp&s+B4M)Q747UDm>Q$}}*M~!k&di=PhTAzm=ELbp zZtT41+1xgDm;kBO*!tcDmmTUcFRk|-I3GP9qzyf}Uc2umEO|Sg?e7WXHf}%S{VZ6I zc^Q>1f&Uo;knl5{7dkK%POa(>sxg+^ej!)jU8ey+$|iCf&(~u;=CukaL|x{xzSmwc zf2*D=!p3e|vTxTj(f&Ou6!oBU2eQ6ap&dHAE&ueQK8^kcrI0Is9@b+Xd02ujaA^VL zWdhgZ`FK44{<)?X-8u=tRC412r`lW zayK~aX{MSsdE=o+XF+uQ2CB(jDf~!}c?LAUVDVz>2gm+PWsMjQQCh}9fivrPzpM z8=&^~l~id}iiZ#FxD$N)L{QRTKDRY-o1n?PaH^aX;~7|wc?n%3;B?nTto-l5!$(e; z3%b`!snmEQ&yVi$%i*N^aw?^zaGPW<08PR?wx6k=Lp|onpGQFDi;OpR8V`@_58Lt% zVC%MwO2-#-Kdz6k9`i^@X|R-EPL*f%d3^AEuo_(-GF8Sue~a_+{4myI9=7p(i}k7m zec1k0C3g{jzUgOmXyn4u^Fuhdu^#itjqhaOt(DYvtSisYHmeh?U1Os188JSD#}C!= z-$-5UT56u$-k~1z6z>V-ufow(rKfp(NWlaW7Q3C21Tp?6FI+)R&)h@R3Z8;DcO&Wl zp0!63-#gS}9mh1;EXG&z@jD$LA%?@$)~^nK9@b-?X>bkrd%{Ud>h|V( zscd^t-ydW3@i1KocPcU`~50Bf2 z+UaHCellB+kUE3=ar+YMF;Cm;J+Z`Wr&5`Yf`4u!Y3Clp)=#t)@pXGh29A!Qr1mmy z%S8{67K51nWOlOseI=yFJaXh&CoukTqtgAU+zx&92hwgAV&#XH z+XnA%@Wv?@q(OP*NwTMB%02SYqI&JHa@htj9dt^C;N1q$pLppXGY#6ME)yRV2|s?$ltC-=PS zRI;#M8`hEA>bwZGUv0LZ?39SVcFje#^u{7=zo6(}6QsvHC8npkVj@eAF9St<@P4#r z^VFit-1YL@JpY$j$@|v2vGYiWJJutfTCkbw@xz71r!Uu=*RN3J<;j zqL)62_M_ysNnO&C?Pu&IY^=vTX={t*di|XBBr#CLr|;$Dqk+t>-%8l;?*}aRa@Nb^ z+j5&+Z=wEC*m@oi-0?)7JClSFx@zM4fcTYjZdfl{0=cTFSliT_a&>LzTY$2{|^JtV!% zZz`|y<$86>4Pr=;^tP`5aGTsWk>`~P=;iMAF#|T=HUAZPn);J!kNo9Ok9p=3UEx?t zCY7p-_JMEd!4UrB3)?TOsCHgFsR{KDvuh)ZA+PEFg)ubwY}@^|({Yuv4yj zB8&2eAU)1|KM`W38~5YIC2ABbpQK(E~)@%L9x12kss6=@CY6R_`V?BN6N-Z|^# zT(Li!d~Xlse;3e8Kd%tGAL}s>x36*k8@JDK{~hZw&y?x`vko7mq~PBv_W0PQ)r2mS z_fuj^=lNS6?+!0_@1x|Iunp+^JFLe%LpvEJ-*jT<+ivFXD=i!k@@CflIJ}G7YEB=J z&a(d@AdTB{sfl2_=d4#OeI4pCFYWsc_*$w0lJ?1TyzEHBu4 zd68dYgDmi;${8XlJsj#&5zja4Fia|Wm}svI6TI<>5YZu?_20z!k@iA7tn)uXY|2pX zH{Xee7C~lW%bw^^k9kVDueu%Df_k}wXz$5mmXn$9J@m>~@jQH9f%e)~^01J*-kdRr z^YiHu&+w=j+&j$LuU`IKue5FrP10F=_mr@u5MMY{-&3z`D%y(%Z4lJTE}|z>#P}Q5 zW1e|RNw73v?b{Awd|cb49&G&Wt|zIi56$wc6j&Iljw`6w9&W^K%j>34GlacwKnZSR zJ?5#ydP3y@HeXcf8_z#x-Eg?|wUA!D@`~G3`{-Ur!qUJV$^%KHpG_v7GSdM zd1S|K2VC^LL{+D^T zv1tEG$2uhk5r*eq>6|?)?*$DFID>$5dZ5YB`ZaHT0(l|MojYY zbvLOky0+kBJ>uc>T=01&h9!DfJ@*l7FN^tQd>#zeV;(7Ag}k1VMzwcDeAJ9lWd24L zzljY+{CX@U`lJJ?`?e^ z-sTstniqQMZKFkcs5Vn8(x>@Joz~?om22nm_E*%6ERjjcIFX;Q z9`i`)7NlG^)?e`u?H~DU1Q}lM16#i?$~SV9kefX-sXRpRwbDA$^}`#g&GzEY&!tssI~9WaTT? zW1iyCgUqg$LA5=6Q+Rp&uoy9}e$LJ#ZoqA_q!0-$nnBf!hTK-qcOjS9^QEzM9qKVp zJvKp&D*1=a*W|SimF}vx%P%Tb5&d5!v8DR9IXlnhkLVw(mO1LLrhlk1y)^LnAbmdG z+#YJ5k1Rf=M0=C8@1p(}`-JU(D8s|64H~Jx)1FhallUIWr*Z1roF`PiEuM$<65?rF zm4qK@h4kcsm>-gI)5zfa%-%6r#P4=I!E=L%f@@Ai}s4m`?=~djMe9B+6Z36Pj$T;8*e=+{^xvp#M4C81Z^=k z9^%!FhbN<(z>3dB_41Am+*Uj*z>)9FUr4lf4D(vTvzbNpQn=_}U_IuUDtkkfhZ?=Q zQ?$=b8I8ejx|d!aEXK>smrFy1A*}y3MfhdZzcyKWLkSNXTOU?P$G`V<8HTt$X8Z5D z3VUN0SUKS-m0tYe{c)_vJiH&l{BjLBKJp?Z!$f|<`xEf_%vg_kq;V37*507fE>S+H zzU|0!_e+%YDbLdrhqp~$L;7dmpxUD1dtp81*}NZ-IorJTTB{d26xJo(N*NMFYK@0vF} zyk<=Y*dNCFdna9Z{LEi;FzXJ>k83=+ZEZgU`W9gG5#FyH>M;+W$0u+4kHpVmyurH#x3NAS5AFBC^YzmE91^?2#LmMO`3cY8V?EwK zBp2QUMa_q(I{XW<=MQV*zc9Pa2`bGE=XPk*2-rUCB$fJ{=5|=~ZScy-_NSjb;ZTox z;rsT&Pv5Pqy&~%Su*g_AJ1mBs@A;C4Ctgty(;=2hy+!$+mTZA-rMIy2#+|_)AFRhb zy#EKUN5JWU_aEc%`SfW25!Pd#E%^`mlE~`!w>A0q)m};`LuO@D?PBr2kQ2pV(tvC> zpI=9O|FkQlX9w1v`622@tj9c}WRYh9uh{xk@jq(ospN#mbE=H5&UxlSr-*0cbhcht zJYPBVA4#)5qqf8fB0fluc`BNZ!}(K1`4^v$nNN>+%7Ue&VNX{7de(9nU;I8&^b)e8 z&TA^ii1f<$eu$UvJmeaKl9!D;Or<)zMg1U+Kh>xmv)_sH9h4@ol5^f9P_p!T zXneU@de6M}9@0yg*9}Oa z0bi&#IIq2i=0g;(swBD(i*J*>^g;6}c>YAfyoO~}nbE&yOG0u}l zX_DQh=1_BY(f&~8JWC$3^E)-)67M5nJ?3?urn7YYK_yoo!Am_C5Hu;5s(ItjN}Juf zcKTd)zkz7qvi$-{e_#GV)uA;V>Ltv3K3$i5p@d!;=_}rUTo5@MSxQgV)Dq$6kJZ)F zm(t6pM1P5_>_Db|WBNa$eM+z%@zP%HhCL&vQ&~5W^TIn=;N0ekRDyxrHtyO7@~>%B zEiQ9g=@*HPj-%b_0g@O+=Ki5H9y`$Wl{AH4j+^M%&b60q+Dt8Xg3=Kg$oG=Hcbb%${e zAF%s3^8Uw?X{3(#Lu#8W`qL(h6Lb$^<14ePi1)ekhU`-wQ*&lXZc9jydA9FXvSxY) zE5GvorwI|nvt~Ngo)YDkIY}k`=DwtIWe?87{a*#?G0*z6Hne=t<_EuQ;O}d43xJ`; zv#63K)@v%CYQfoNEImr><$i68mQY~idv^X$35R;jlZy<7IvcN3>1;QyC-u9+(B8LL zdu9o@4gdCn5mT?T`L$Ktwtg88eg0$fRddAtzU(1mVb-);tpD<$rM>>p_8S6EEzC~( z!0RVN;ps3(%k*(2dH)6LF%Rp*2PzQV?jn^I^yfTlfdx9Dw;$Mk&28MTN&pRCvh}`|gZU@Uu=R}fc>czE%pJ~W1iuCcZhk<{x`j758L`pg6(Tq z|9wdr5gx@~TYfD33}yfC-fuiVVLj%VHu%8&Iv?2iIYl^6^H)`f49KSPfU4X!-L4DS zZL+C(Pg!nj@0EbD4c@Zx;1Z7Yh$rbyWNoYGloSx(*VbemIoaz8)h_xA?B7E@u$OEf z{*035qCCdqr^^08>Zau4dUJhI-hsLM|kXZKrr@$h&&73=fy(0wQBv-9eO&5T#x zjq_{^@2l;N#r4YfT>ih{`%<0IL8$M-(M zkMx*FTJ$FOy5vx8U(voHQh!o&$9HNA6ywiiTw}6eBWthysK$Btf61puyx^u;(0W@b zD(&pa^N+F7M`%%*?Xh`0oZH!tUPF_DMcMw;aBfGQ&w=Hh#i??1wAN2)76?_ z^B3bM_&iE)OA)He3}EMNR!Onv4}6{_)?;3GKZ!oL#TIU9Z!d&us`5bK4^ci%$pyhKnJ-RC^_VK3qPz5Ad}N#(Y8#21MAeu~`>ah2Ox zk9qQ~bSQF-t!I3;iR(>EpFo2FU)gzZ;(5}BhY;S!m8x5IbHDuSE!>{;4HR{cLp|n2 zmVOD_bIMZkdoI_9UAYcXJ*%?vbtkv2(;va8!PVJ*zm0-N??J(a8cJ4eaHz+;?2muo zby{sIDXzTzU>RS4UaZB=8(BA&+ddU?!91%HRsMD6JQ>~ph4q-H?EDP>-fBaokY2=| z|KxJdAZ}YXstoGD?VNJ2V0Cy`)}D#xwke5y?*nbw`0P5JBR%E?j@t>9V=7VgbsUeM zbY~@eu34R(*Rz7#)+U?bS*6-+zsOc@ClrZ?1F5v_6t{gFEP=|djo5w(;!uxy_&yuy=WUq(nWb0BB0PMg z=>-J$Vf@(EoR9Cr!FtTIoxKR_&bd;hoyZ?JKW22f0XtlrDR~~npJzh(2kS8}HjvE( z6=3bhYae)cTwf~XX2a_At8Bk-3isps6YDWgE~r3g4;CKE^YDg|vmqqg%G$#nxSd^l z20RYA$=1VN)-Jv{YlY0=-r^ELVOX#U2Q9!rjgYV@`P zqQ8mbBmMoF{OYLDYl&DNOi=u=9`n>?tpC@Zjc?Z#@0X8<-XG7uU_IuA_t_4?ZH7}D zJJ-;jo_N2D;pArc&oq=OtJiQp-Y5ujw4W>P>XJXC zeXFPJ{6;Zeg!`*lk9o?zP&Hj*>!UWe;OU|DTCUQ8PI~j3hTJBZ&DF>L%zol8?0sgn zD$|qDe;n#DPhIdp?Q_goZ+7{c>usH0tHXOZ>(!~E{b`$@qK1!W_OiO%uZ+x9BlbG8 z`F$}zj`f%qIOZzM>d4YIp(+2L@qQSe0heIa#zr6|&DGh{5ATn`dd&0dc@4IgZwtzY za=iS&;j!N0ei@pNVQsv@>5u_il1M91@wNqYef z)vgT6-izE$?R*_(9c%(p>`-pw`@gUr^UM*65ZtLakzPmf@8?(P7=+KH?EVWgw?lg! zf+vxciQ&+8Zkuki^Q0!UCN|$44)vH977zy^CL>Xg%;5Sk?Gf{|E1HTkh{k*DqL4 zlr8gk{PBG$SdV$j2TQbj<&ufy`E4FQ_kpiq-^k(tN}X!l_BopgZ{iy#l1q=doqZ_> z>JP0IAa#Do-w*3C&vUnizV&X!&hPrc$B*!N1R2{(QlB%;L9%_}JbXR@)?*$XKi1wn z2%ek9QSEc~OqSkwd>7yMlTVMvqa&?fA*Xy@om8$hPk;I3Gbkdny?9;ra69oJdX!D4grxf9SbKljfTiplLHdBm0V?E~i{@V}qnZd08QhjelnQn z4yE#6qCMm7e;fu*8bOs5F`kw&IsvXN8$r!WMf=Ft?Km`F9m>{6ur>rMKX7=gj~#Fl z^dE<@@r3t0KSbINL5Bq+sah$A+u=Wtz>{X9sBN1w=LP;g1`8ICWb>sWKjH9LuY_!c z14oCm_4*dhbHA_`el=$8@rgURol|osSQZVT>V?JJP8%By!`_EdWwBTfi1nDKDK-Tz zZyrQRC&AOqH$o+)FS{>pIp=Bigo3hX097Z(b31&z0v+1*r%L8T;m3N!%Wggpu2@6Z ze8o+!x3wJv)2ei5_c;jLu(u!7oyGD?i!AQ9uyyRmX)mgt+V4=0d4$Y_$4w3FeAske z9^?3he+dV}0QS7@^SK|tAJ$`@x^z1H(6yjay=pu>v5kN$Lt3-*KUVYj$v@fs$bYq? zQif>X$(1L8R$=Fv_NmPMSdV$W<3~VDM?E`#^Dx(IT&KeL!)!dFMJ%^{H;#h&MOslZ z=`Ode2@|2?_l9gg;%vuy#IwyB2bO>IR9Yj_*TC+p&*|2Pl6o0Dym`w+7`#l+=IdN| z{`6((IZ$py)t#b!iuIV6F@GVrtYy3gPCPv3;qYni73lv1D2c4

*@|{!V`84~=kWNXmOcoL_I0D$y!)X{SN1{76_y_x&*c8_ zjd4)FdRJ;bIKiPF^Kf|i>k;_9uP2p0kLBT|m;-QqaBp@VhG*^{dX}}Z?fnB({$idS^@KcM z_kqfT^TK~G4n2Ob_1HJkczA7rr^IDEo6meH%4b8DVqlri);Bj0|C@sJn3rAsZ`hUg znv#zHa-J!Pz^ROv?EaceUS1gQ`@?|P3@Ww!BW$!D8|yJov$8b|-o(OFnrwexydTz9 zqzwdaf5+zk#d*EjpE^jJ{F>bdAFMjkV;v#-{Hd8z4a{nHh0 zo7nz@r)Amu&7s`Jdd!no#H#1MIP1xB*2iV>$NLrKM;7(-5Es3+pJ6e`meCnvGE~+k87geIC#J)kOPN#d^e( zPOL~unC8UxJGJHEm18l3G zzf@OOV()*n2G`rJ-%#JKW&1hVzC3$;Nr|`W?r7$JR*lw?Y=auNwIxoI!aF0Wc7$l3n33Lwc-A+C z;aQV#YD+FI;`g&YEDM^#_G63ou0h`bXpJdUJJVbE0}4X%KkR;r$>M*LkRJ2Q68Zn` zKfw0|n7#x+^N*vcv{uZA;`e+BSlc zgUjm4&=_vpcJu&Kozi+WC7Ih;k9o%P-Qh_g4ci|q>O1Sr-t7D`wjMsZF;5RmdKc(_ zi>+5q5aX35Z6B!Ex42&WvL^RqJ?2SwJfPuLHvSw^CB^$UTp*Min>VxFyP z0oc~3l-~TkIOl7M6oCG(*nD)wO58TD$|C>HFQwQ17W3h@YK7rH3-c#baHz*T%QAN; zQmee4lsd)J(>J&p%;{G_FMVjiZRub|_%pGbUafUV*ir5f(X66glG{1dW1h9>U*J-Y ztyiny!sBCO>msM$Wa(=V^ZCT97~C6NO0Rqr^Z&;F?7r*?ry)~i91-8C? zlQ-9!hWJ2OMuGL4@6BhpLL(;x1aET%Vm7j>w|JX>5}_*JloUagzW z-xr^EY2DQhf*N?T{Z|s_85+-lq5ar-n;{7f^_XW}6bSwrc7Dd|lEBNGQr+Q0%_4fU zrYyHLbtqJt%l3m#5&2Pjp$~i-;i)$-67?xTdd#ye8U<0yS^B(qLF{}vX96r8%>IYE zXSkhRY8+e(E3Ri3&EW9%#?8_5a%SB7S$nAUTw!PxT~j8xAdkp%Ocf)TNJO zJ>rF}n+r{{*#7bbg}FYha5(&zUQjRn^OxWco(p|iF?)dMZ^Z^Ih8cI*{_1ZFczXit zF%RnrYiF*j&-SZ_7v=23f)N;tRI_EQoSDU;U5us6Bw!=Sx|sq*d7m)EwC$g~u1I*Ef_Z z2)nnk@vBdjxgYEE@k&MM%2l+m_UrNhJ5TBmr+aQV$ZXNxl#)Djr_UXtlE+D&UzE%* zI`8l}Dvcb??R2~Wq3GY}>Ls%9E!~8DpgfrxA4e6<25zet-AIC! z=_`o)9nsbLaGFbP2P!z!W1cbiAX`5&gSE#*|4y=4;BDAs zcHXsUPgo`#fZz>mJ@a6(9x!|3A?UnfGL=0=`w;6f&wThO%qTL3-IrI9$0xYhAsFL7 zp4!R?o|=3ZiWVKu)<^hoe|Cu@@O1;bzpQ%+hkDGz{Wm=RWqFVQk()+PZKP;F;{F`g zW1g{dKbTa-OK%=sfX7F(uRlb6Ve8id1<#ln0+~OH>9x~Ed(_-%G{n1>(34u9`1i=C zM?CY~PB6(Ylp2?;<$SedC-^XBJk@^Pz-_Xp9Sm+ff!b!T6VJcj4GO;9_zsAD%#sC3f=g%E}24wZlkl^>=XFckD9wymuru77;eqV;(-g z*tlahJPBDzjW1Slo)(>dY`QrJw!T?G<@5;d$9l}e>)kOAuW!faF=IXE`BY!W&R+?k z=G=dIe7qNLfY5D2sCHQ-x3eFtgAv`>_-C`t+zwr`3A|Uc@x;+4hkDHOEi(wzA~H2N zJN|x#TLU1&OQwo$jd-4>7wkSYoGJ@8a$AGGH|7N{SPB=QH#O`K>1it;26Kw^qNWDR zczDyG<=_?1#+PQS5d7$=&}Jwb4=UnVk9q2~2naeoiduhc^ZRHfX*~r`ii!9qKWUlKz*6a{doKy>oG6f<2-Dh-jCgHG>C^!NIVDqA9iEw z^Ts9G>jT4=c&O^k#>>-daDVoz+wi*-8;{Nr=d)uy=Go>ffRhbb{;t14#4l$l)ci7x zs!w)s+ZwzAd|R>jH;&-8cawP#ZDZqQ@Ao*=W1cc&G3X1mrslqZ{Clat)8b6fSdSGr{|HR?45DT>Z)g7=mdEjMMCwRM zu>su1ejMKNLkG>>+5YNs{;EB^+PNnTfbx1tf0MVLjb2@$ty?*^KC1@zXA=P5;;jEV zJ&XIX9`lqX>tWlY6~xw0>?blcjE1`#Rubj@d>+4y37eqtoUKH8H;dajwYS5-gxSRO zS(F!8pN|)`2j-K(#NxNmVR-GpU9dm49WmBl$^Dp@?|F!4d;b93n%!+E&kyC{{W`sZ zj+Ydw6l_kp9 zYU2M~szS#77DNi3mc;YtgMD!G+!LMju{!r-J?2F{^`ymKmm}I)E<8S(6fe4QesMx7 z&gJ1lu6xne%~}$vvzRZc^Ujmq-SkGMd~kKB$Gn8Gr=e?tGm$<5&)@EQ&$9CqhZ7}a zHMhh5It!C}xD%=SI&N#`orXItWui>`$DtncvX`d9p$9HRx|t^Qb#6ip=V3(JQY^)u z9^S{SuzI5tkrsP#+h@;3*s*39A%AY8rXF-KQQmIm@4sM1Y5LtG zOQ+OW!tKc1QuJOBd%sLihkDGjp!^ngcO$eao}`lsM-qGbzY*$R7^agN2tU?i zUQm_?4eE1Fr*-uQI}hhSoZqa!J?MmA6LeC5V?E}1w>$zNx$ShSaUSPu)kEN3D_JK; zite3_lHxPj)0yW(qIgrS7NU@(d@I z|1-HAiT-D-$Gi%SOVZUR+=!Hr!vFt3O9^^$N;e{DZ|ZpZ`?9_>`gx zq=7{Gu#i6w>oL#f#@YwAHacZSb^g8yhBYv|%08X4`wjoTK5Q?D&$hNY;w)@K?G;dK zUYt(7=2(w;_D<#jb=sZ%`SbDj!+Oj!v^fB2qZ;cBgGK#i z{$T;#p+udjtN7m5;&ITo{XTXN>|*hKs~&>pvpVY}KZV;^k9kKViI#5EUFRDj@=MO} zkKjA{s7@}tnuia+n++qM>vhI3VY{n;pz)%UI@@f=dd%~^lL+Vf2I>s$_Hdr5%60gf z6{j-~+{_TWb`IJum zBkDu%wc${1?@^svO!%|=FNCToeRMWWm_t40C9w0`&pu##OO%2w?eWv<55c1{K&1CU zJbxNfF2Pjyp6q=8;ynLbJPyK%*)@rh-I)8a9`lTKPJ-XTwmRj&5UyALONB4nw&^70 z5`SKp=S?WkeyvWb=E3>yw+_NwOOQ?}9pF%pd9jrX(MHQ^5_zA*-&ZMIl->wo&nh>K zhxe=QPEUCOQ9Bmk{#GlC(Id0j`zA~ke5A)b;#Q02l;Dr_^<@mJWqrkzhLcc7S0k3^;LP7!|M zC5YNd;VsA~$9l{&zq|$&Sp1Ztmw9;K&yS#Dy_H0Ju0V?Yd9k%0 z!S+q_iMGEBx5L_5AwgY1$i{OH^_Z7%_BQNzGTdJ}De6<>!B=pi-?`@U_P;pK8vGc_ zl$QLZ`p(?WY5oj0)r@Q*->b)Mtj9d}p6RfL#n0TZI@hP&{{}~DuOf=ZkK68pzd;uB z+uAhewlyOiu5?^UY$vKZ)+3(0^)oE|r*5M1Q?ze1Iv4t+?9xPSf6=}PZ2cLgjck~x z7Ou~EQnV{|uCz7L_MsEEu^#gxA9>Q#EPmvq2p{{)g@&;BlaVcXcrw?Me(Sl4*fezo zuZSx(u$r{em}fJVq@AjRzjnD84}ST{lY04XI;ot~^6=U|#pt!JA5YpAH{*8H zOAU?bQ^jAI{gZ!RtjD}7YrJSdd;CL1`)Wbc67>AzdHF-S7Nbs!_WF~XE4V*) zZ83T$C4~9k^6`AE$Gm*yVUK9&`yX2iXA=E?Tt51?+y)KjvbE$THxpjoB0c6M)Y${G zdR}O$E?#_5F>3|F5V#%~yVYEJ#_&S}d1SdV#uu7_cjmpida zdF_EoN8n_~3Pc$p+AF@S{pm5NI#CaZ_K5F=!|>&G0b(pI{5eREd1}mYIPxX?nEGlQ zj}PvjhF3ieEoR<0rVX9I{XW-@f~&A~`kS?MvTJ=b@TD zl1PCINCcv+EJJ1cWKQns2S8iC(WF~{ic|U zUM^ICl@O3P=0PHI@2=YL$^21XaAfu-5|IaT0(T)$#H=B3qG!_xP> zPN`jsf3NUs8{zlOZ#revXU;P$iG;p)PwSK$V!k4{^S|(*;zylqs_#&bd9lfn&?38M zQ?;R3?}`7v(0Myx za~uDkSdV$if8W9X^UucW_USx)!oi==Y;D7)@>Ve(sTtr*53KWRN;U;^KOSGgdd%~- zT42HEg2Yx%{J)WF_Cdv@%0#n9{GZvA_rt2S?0wu9aX#MPg!PygTI3+qjDmRe>?|HW zZ1OJXaA9h^sj=w4;PEBtN({_ywKU$EA)bfznCJd?ChVJYSEsOhm+kpKedS zip=14;QDu9lrwea24cL>mo2_M*)&Z@qGmeOW1d-l06TX~i8q`O{Ruq27hB*xjM(H9 zuMQW_4{z`QCQl>r=0~eIAL}tsyXh*N&AFi?A7i-QcYPvMG=0!zSKr0$;Hil)VfkI1 z{9O1+(QDxU?|(Yq)M$r#%uBs=3iexq<27uY+nzqb0oMRZ`NwNoF6DL@yPwtbby&P% zi5O3mT~oldeA#&005M*G^_Um?bPH(0p0NK>%m=!ETnqoc|DYotdE<|7+5LW*4|JBA z|MKVgRNe|zc74?;St32LJ|C~<2AEubbG#`_@F%dmV-t4l^U}aO8b?T0f91-bicXI_*>|MFR=ZtpEv20R8bxT*0sO~kJ>s-6=7$L-2**SS%3U5kzQDjd8w~d zSUn&)-V!U)N6n0f673@5l~_?e`ox}x^WK}|HSffHcIu%+uzB<8cr{k=u^#in20nl_ zGy3butXTg3*~Vv(R3j+B@?AWSJb4bs{$}GDfxqUIBR~~?v_%Ax^5-}boKiLZbrQYa#`wPE!gasWm&yJU+n*&w-x3tRsuX_tXSEgNd7O=nQ7TcMrM`-EXGqq}QVS$9l|DMlXe?Q_B;j zemLhFFD-^*m2||mN0jfDh^3I7P@Kr;MEkF-l55|RhS#A_3UZH-$86SI=yNxEo17;7(u#~(JuOKcsh{e7_>^DI-N!R2Ag0CN#h zpBl`2Kq|ue6EpJKBOcMP=4nfvIWw=mb=nI(JQ@U8qs8~Zdd%}{xdi6?bzf&*Eb3oe z|Ka-1T6P&IRX*x`%ZT*Kr$@YCwtv!n#WS5DK$N$URdz$lOV*y-m6skKyTSR;d!4no zuzmcZU|r5_UG^8pdd$;yjRE(Rvn;>2;pvI*tI5&qhnI716SK7u_v8C+upaZ=ho(Ts zg={?2R6oi7z06$?z>#$|+5AWyUO&nSr(x1Y<~Qsh2Jink62zH5K{mIV!dD5{nP^5D-t9x&Az8tb2)@y=wQmW{$VLj#@S>#D$ z%q%`zoca4lsv3G`Y6qftP3Oz!IZZ>K7i0RfOC9PlFQL~Npru)T z*t)iA=W9k^fY=Reyz0(!ZnNDtuw~tRqBb{ioBVec);47Q-`X`C>M<`e_biO7F)&e` zv5D&g2VDZ=z1se2zkA%4UYv*aE^;C%yMfy|i`e-3ygL4*{sV`4%(H#E1e5+{<8SA0 zaeZ3mZ5SHK#zRjOPO-mF_~=`pWq#>G5pHX@Ux6g%C+)2c^_XWiJ%)gSi(1%dV;){P za04oA8t!j4XavvA3Xgh+`YY9nb6a};1U?OoXdzW-=unS&s`oRf!{Vp?F2*J_VjO_mwuI9sV~c4@>{(_J?6a+*U*%vr4z}PmRxVXQ;Pn12L5tVA#U3=8tV1N zIZ;{Z&+Vx7rRk#?f&S*k;`?Jg=7o$dO&8nq_xdQFAJ($*+J!9swl#v^YDg)Xv!4AA zyS8)x=1TvEu(OPgD(Twx0Rkjw@Zdd22rxi!2J70@Nbumn8xI~V1Q|GZ@ZiB4&!CMa zXim`JjR$WW9xQ_q9;AOht0?bm#lm z)#~}n_xm^zucFwNd$sik5t0|E=ixC0|5sbLkCJvwjU0TVU*EdgqI@3p$iw?#WTsWr za;3QczhBN==Re*bjh!o~ve!*BtG`T^qaJzIlgnvXZATsb?P96N`y<{DV+JpyYg2F6 z(Tgtes7KzEPu@Iz+�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

wHQ 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 Wj6OZBS1h?bGjEFDJTcJo#Bm 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