asfml_2.6.0_24478793/include/sf-window-vulkan.adb

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
with System;
with Interfaces.C.Strings;

package body Sf.Window.Vulkan is
   
   function getGraphicsRequiredInstanceExtensions return sfArrayOfStrings is
      use Interfaces.C;
      use Interfaces.C.Strings;

      function Internal return Standard.System.Address;
      pragma Import (C, Internal, "sfVulkan_getGraphicsRequiredInstanceExtensions");
      
      -- Arbitrary maximum
      Maximum : constant := 256;
      result : constant Standard.System.Address := Internal;
      Last : sfSize_t;
      subtype Sf_Chars_Ptr_Array is Strings.Chars_Ptr_Array (0 .. Maximum - 1);
      cGraphicsRequiredInstanceExtensions : Sf_Chars_Ptr_Array;
      pragma Import (Ada, cGraphicsRequiredInstanceExtensions);
      for cGraphicsRequiredInstanceExtensions'Address use result;

      AdaGraphicsRequiredInstanceExtensions : sfArrayOfStrings (0 .. Maximum - 1);
      
   begin
      -- Empty case
      if cGraphicsRequiredInstanceExtensions (0) = Null_Ptr then
         return AdaGraphicsRequiredInstanceExtensions (1 .. 0);
      end if;

      for i in Sf_Chars_Ptr_Array'Range loop
         exit when cGraphicsRequiredInstanceExtensions (i) = Null_Ptr;
         Last := sfSize_t (i);
         AdaGraphicsRequiredInstanceExtensions (Last) := 
           Ada.Strings.Unbounded.To_Unbounded_String
             (Interfaces.C.Strings.Value (cGraphicsRequiredInstanceExtensions (i)));
      end loop;

      return AdaGraphicsRequiredInstanceExtensions (0 .. Last);
   end getGraphicsRequiredInstanceExtensions;

   
end Sf.Window.Vulkan;