1/*  Part of the SDL3 pack for SWI-Prolog.
    2
    3    This module is the sole loader of the sdl.so foreign extension.  It
    4    owns the raw C++ predicates (with _ suffix) and the bare C++ predicates
    5    that have no Prolog wrapper (e.g. sdl_quit/0, sdl_destroywindow/1).
    6
    7    Themed submodules (library(sdl/init), library(sdl/gpu), etc.) import
    8    the _ suffix predicates from here and define the user-facing wrappers
    9    that do type checking and data conversion.
   10
   11    The hub module library(sdl) re-exports all themed submodules, giving
   12    users a single-entry-point superset of the entire API.
   13*/
   14
   15:- module(sdl_foreign, [
   16    % --- SDL_init.h ---
   17    sdl_init_/1,
   18    sdl_quit/0,
   19
   20    % --- SDL_video.h ---
   21    sdl_window_blob_portray/2,
   22    sdl_createwindow_/5,
   23    sdl_setwindowposition_/3,
   24    sdl_destroywindow/1,
   25
   26    % --- SDL_render.h ---
   27    sdl_renderer_blob_portray/2,
   28    sdl_texture_blob_portray/2,
   29    sdl_createrenderer_/3,
   30    sdl_setrendervsync_/2,
   31    sdl_destroyrenderer/1,
   32    sdl_renderclear/1,
   33    sdl_rendertexture_/4,
   34    sdl_renderpresent/1,
   35    sdl_createtexturefromsurface_/3,
   36    sdl_createtexture_/6,
   37    sdl_destroytexture/1,
   38    sdl_setrenderdrawcolor_/5,
   39    sdl_renderrect_/2,
   40    sdl_renderfillrect_/2,
   41    sdl_updatetexture_/4,
   42    sdl_locktexture_/4,
   43    sdl_unlocktexture_/1,
   44
   45    % --- SDL_events.h ---
   46    sdl_pollevent_/1,
   47
   48    % --- SDL_surface.h ---
   49    sdl_surface_blob_portray/2,
   50    sdl_destroysurface/1,
   51    sdl_createsurfacefrom_/6,
   52
   53    % --- SDL_image ---
   54    img_load_/2,
   55
   56    % --- SDL_gpu.h: blob portray ---
   57    sdl_gpu_device_blob_portray/2,
   58    sdl_gpu_cmdbuf_blob_portray/2,
   59    sdl_gpu_swapchain_texture_blob_portray/2,
   60    sdl_gpu_renderpass_blob_portray/2,
   61    sdl_gpu_texture_blob_portray/2,
   62    sdl_gpu_shader_blob_portray/2,
   63    sdl_gpu_pipeline_blob_portray/2,
   64    sdl_gpu_buffer_blob_portray/2,
   65    sdl_gpu_transfer_buffer_blob_portray/2,
   66    sdl_gpu_copypass_blob_portray/2,
   67
   68    % --- SDL_gpu.h: device ---
   69    sdl_creategpudevice_/4,
   70    sdl_destroygpudevice_/1,
   71    sdl_getnumgpudrivers/1,
   72    sdl_getgpudriver/2,
   73    sdl_claimwindowforgpudevice_/2,
   74    sdl_releasewindowfromgpudevice_/2,
   75
   76    % --- SDL_gpu.h: command buffer ---
   77    sdl_acquiregpucommandbuffer_/2,
   78    sdl_submitgpucommandbuffer_/1,
   79    sdl_cancelgpucommandbuffer_/1,
   80
   81    % --- SDL_gpu.h: swapchain texture ---
   82    sdl_acquiregpuswapchaintexture_/5,
   83    sdl_waitandacquiregpuswapchaintexture_/5,
   84
   85    % --- SDL_gpu.h: render pass ---
   86    sdl_begingpurenderpass_/4,
   87    sdl_endgpurenderpass_/1,
   88
   89    % --- SDL_gpu.h: texture ---
   90    sdl_creategputexture_/3,
   91    sdl_releasegputexture_/1,
   92
   93    % --- SDL_gpu.h: shader ---
   94    sdl_creategpushader_/3,
   95    sdl_releasegpushader_/1,
   96
   97    % --- SDL_gpu.h: graphics pipeline ---
   98    sdl_creategpugraphicspipeline_/3,
   99    sdl_releasegpugraphicspipeline_/1,
  100
  101    % --- SDL_gpu.h: buffer ---
  102    sdl_creategpubuffer_/4,
  103    sdl_releasegpubuffer_/1,
  104
  105    % --- SDL_gpu.h: transfer buffer ---
  106    sdl_creategputransferbuffer_/4,
  107    sdl_releasegputransferbuffer_/1,
  108    sdl_mapgputransferbuffer_/3,
  109    sdl_unmapgputransferbuffer_/1,
  110
  111    % --- SDL_gpu.h: copy pass ---
  112    sdl_begingpucopypass_/2,
  113    sdl_endgpucopypass_/1,
  114
  115    % --- SDL_gpu.h: upload to buffer ---
  116    sdl_uploadtogpubuffer_/4,
  117
  118    % --- SDL_gpu.h: draw commands ---
  119    sdl_bindgpugraphicspipeline_/2,
  120    sdl_bindgpuvertexbuffers_/3,
  121    sdl_bindgpuindexbuffer_/3,
  122    sdl_drawgpuindexedprimitives_/6,
  123    sdl_drawgpuprimitives_/5,
  124
  125    % --- shared utility ---
  126    or_list/2
  127]).  128
  129:- use_foreign_library(foreign(sdl)).  130
  131or_list(List, Or) :-
  132   foldl([B, A, C]>>(C is A \/ B), List, 0, Or)