module sdl3::sdl; const ZString SOFTWARE_RENDERER @builtin = "software"; struct Vertex { FPoint position; FColor color; FPoint tex_coord; } enum TextureAccess : inline CInt { TEXTUREACCESS_STATIC, TEXTUREACCESS_STREAMING, TEXTUREACCESS_TARGET } enum RendererLogicalPresentation { LOGICAL_PRESENTATION_DISABLED, LOGICAL_PRESENTATION_STRETCH, LOGICAL_PRESENTATION_LETTERBOX, LOGICAL_PRESENTATION_OVERSCAN, LOGICAL_PRESENTATION_INTEGER_SCALE } typedef Renderer = void; typedef Texture = void; extern fn int get_num_render_drivers() @extern("SDL_GetNumRenderDrivers"); extern fn ZString get_render_driver(int index) @extern("SDL_GetRenderDriver"); extern fn bool create_window_and_renderer(ZString title, int width, int height, WindowFlags window_flags, Window **window, Renderer **renderer) @extern("SDL_CreateWindowAndRenderer"); extern fn Renderer* create_renderer(Window* window, ZString name) @extern("SDL_CreateRenderer"); extern fn Renderer* create_renderer_with_properties(PropertiesID props) @extern("SDL_CreateRendererWithProperties"); const ZString PROP_RENDERER_CREATE_NAME_STRING @builtin = "SDL.renderer.create.name"; const ZString PROP_RENDERER_CREATE_WINDOW_POINTER @builtin = "SDL.renderer.create.window"; const ZString PROP_RENDERER_CREATE_SURFACE_POINTER @builtin = "SDL.renderer.create.surface"; const ZString PROP_RENDERER_CREATE_OUTPUT_COLORSPACE_NUMBER @builtin = "SDL.renderer.create.output_colorspace"; const ZString PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER @builtin = "SDL.renderer.create.present_vsync"; const ZString PROP_RENDERER_CREATE_VULKAN_INSTANCE_POINTER @builtin = "SDL.renderer.create.vulkan.instance"; const ZString PROP_RENDERER_CREATE_VULKAN_SURFACE_NUMBER @builtin = "SDL.renderer.create.vulkan.surface"; const ZString PROP_RENDERER_CREATE_VULKAN_PHYSICAL_DEVICE_POINTER @builtin = "SDL.renderer.create.vulkan.physical_device"; const ZString PROP_RENDERER_CREATE_VULKAN_DEVICE_POINTER @builtin = "SDL.renderer.create.vulkan.device"; const ZString PROP_RENDERER_CREATE_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER @builtin = "SDL.renderer.create.vulkan.graphics_queue_family_index"; const ZString PROP_RENDERER_CREATE_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER @builtin = "SDL.renderer.create.vulkan.present_queue_family_index"; extern fn Renderer* create_software_renderer(Surface *surface) @extern("SDL_CreateSoftwareRenderer"); extern fn Renderer* get_renderer(Window* window) @extern("SDL_GetRenderer"); extern fn Window* get_render_window(Renderer* renderer) @extern("SDL_GetRenderWindow"); extern fn ZString get_renderer_name(Renderer* renderer) @extern("SDL_GetRendererName"); extern fn PropertiesID get_renderer_properties(Renderer* renderer) @extern("SDL_GetRendererProperties"); const ZString PROP_RENDERER_NAME_STRING @builtin = "SDL.renderer.name"; const ZString PROP_RENDERER_WINDOW_POINTER @builtin = "SDL.renderer.window"; const ZString PROP_RENDERER_SURFACE_POINTER @builtin = "SDL.renderer.surface"; const ZString PROP_RENDERER_VSYNC_NUMBER @builtin = "SDL.renderer.vsync"; const ZString PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER @builtin = "SDL.renderer.max_texture_size"; const ZString PROP_RENDERER_TEXTURE_FORMATS_POINTER @builtin = "SDL.renderer.texture_formats"; const ZString PROP_RENDERER_OUTPUT_COLORSPACE_NUMBER @builtin = "SDL.renderer.output_colorspace"; const ZString PROP_RENDERER_HDR_ENABLED_BOOLEAN @builtin = "SDL.renderer.HDR_enabled"; const ZString PROP_RENDERER_SDR_WHITE_POINT_FLOAT @builtin = "SDL.renderer.SDR_white_point"; const ZString PROP_RENDERER_HDR_HEADROOM_FLOAT @builtin = "SDL.renderer.HDR_headroom"; const ZString PROP_RENDERER_D3D9_DEVICE_POINTER @builtin = "SDL.renderer.d3d9.device"; const ZString PROP_RENDERER_D3D11_DEVICE_POINTER @builtin = "SDL.renderer.d3d11.device"; const ZString PROP_RENDERER_D3D11_SWAPCHAIN_POINTER @builtin = "SDL.renderer.d3d11.swap_chain"; const ZString PROP_RENDERER_D3D12_DEVICE_POINTER @builtin = "SDL.renderer.d3d12.device"; const ZString PROP_RENDERER_D3D12_SWAPCHAIN_POINTER @builtin = "SDL.renderer.d3d12.swap_chain"; const ZString PROP_RENDERER_D3D12_COMMAND_QUEUE_POINTER @builtin = "SDL.renderer.d3d12.command_queue"; const ZString PROP_RENDERER_VULKAN_INSTANCE_POINTER @builtin = "SDL.renderer.vulkan.instance"; const ZString PROP_RENDERER_VULKAN_SURFACE_NUMBER @builtin = "SDL.renderer.vulkan.surface"; const ZString PROP_RENDERER_VULKAN_PHYSICAL_DEVICE_POINTER @builtin = "SDL.renderer.vulkan.physical_device"; const ZString PROP_RENDERER_VULKAN_DEVICE_POINTER @builtin = "SDL.renderer.vulkan.device"; const ZString PROP_RENDERER_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER @builtin = "SDL.renderer.vulkan.graphics_queue_family_index"; const ZString PROP_RENDERER_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER @builtin = "SDL.renderer.vulkan.present_queue_family_index"; const ZString PROP_RENDERER_VULKAN_SWAPCHAIN_IMAGE_COUNT_NUMBER @builtin = "SDL.renderer.vulkan.swapchain_image_count"; const ZString PROP_RENDERER_GPU_DEVICE_POINTER @builtin = "SDL.renderer.gpu.device"; extern fn bool get_render_output_size(Renderer* renderer, int *w, int *h) @extern("SDL_GetRenderOutputSize"); extern fn bool get_current_render_output_size(Renderer* renderer, int *w, int *h) @extern("SDL_GetCurrentRenderOutputSize"); extern fn Texture* create_texture(Renderer* renderer, PixelFormat format, TextureAccess access, int w, int h) @extern("SDL_CreateTexture"); extern fn Texture* create_texture_from_surface(Renderer* renderer, Surface *surface) @extern("SDL_CreateTextureFromSurface"); extern fn Texture* create_texture_with_properties(Renderer* renderer, PropertiesID props) @extern("SDL_CreateTextureWithProperties"); const ZString PROP_TEXTURE_CREATE_COLORSPACE_NUMBER @builtin = "SDL.texture.create.colorspace"; const ZString PROP_TEXTURE_CREATE_FORMAT_NUMBER @builtin = "SDL.texture.create.format"; const ZString PROP_TEXTURE_CREATE_ACCESS_NUMBER @builtin = "SDL.texture.create.access"; const ZString PROP_TEXTURE_CREATE_WIDTH_NUMBER @builtin = "SDL.texture.create.width"; const ZString PROP_TEXTURE_CREATE_HEIGHT_NUMBER @builtin = "SDL.texture.create.height"; const ZString PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT @builtin = "SDL.texture.create.SDR_white_point"; const ZString PROP_TEXTURE_CREATE_HDR_HEADROOM_FLOAT @builtin = "SDL.texture.create.HDR_headroom"; const ZString PROP_TEXTURE_CREATE_D3D11_TEXTURE_POINTER @builtin = "SDL.texture.create.d3d11.texture"; const ZString PROP_TEXTURE_CREATE_D3D11_TEXTURE_U_POINTER @builtin = "SDL.texture.create.d3d11.texture_u"; const ZString PROP_TEXTURE_CREATE_D3D11_TEXTURE_V_POINTER @builtin = "SDL.texture.create.d3d11.texture_v"; const ZString PROP_TEXTURE_CREATE_D3D12_TEXTURE_POINTER @builtin = "SDL.texture.create.d3d12.texture"; const ZString PROP_TEXTURE_CREATE_D3D12_TEXTURE_U_POINTER @builtin = "SDL.texture.create.d3d12.texture_u"; const ZString PROP_TEXTURE_CREATE_D3D12_TEXTURE_V_POINTER @builtin = "SDL.texture.create.d3d12.texture_v"; const ZString PROP_TEXTURE_CREATE_METAL_PIXELBUFFER_POINTER @builtin = "SDL.texture.create.metal.pixelbuffer"; const ZString PROP_TEXTURE_CREATE_OPENGL_TEXTURE_NUMBER @builtin = "SDL.texture.create.opengl.texture"; const ZString PROP_TEXTURE_CREATE_OPENGL_TEXTURE_UV_NUMBER @builtin = "SDL.texture.create.opengl.texture_uv"; const ZString PROP_TEXTURE_CREATE_OPENGL_TEXTURE_U_NUMBER @builtin = "SDL.texture.create.opengl.texture_u"; const ZString PROP_TEXTURE_CREATE_OPENGL_TEXTURE_V_NUMBER @builtin = "SDL.texture.create.opengl.texture_v"; const ZString PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER @builtin = "SDL.texture.create.opengles2.texture"; const ZString PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_UV_NUMBER @builtin = "SDL.texture.create.opengles2.texture_uv"; const ZString PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_U_NUMBER @builtin = "SDL.texture.create.opengles2.texture_u"; const ZString PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_V_NUMBER @builtin = "SDL.texture.create.opengles2.texture_v"; const ZString PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER @builtin = "SDL.texture.create.vulkan.texture"; extern fn PropertiesID get_texture_properties(Texture* texture) @extern("SDL_GetTextureProperties"); const ZString PROP_TEXTURE_COLORSPACE_NUMBER @builtin = "SDL.texture.colorspace"; const ZString PROP_TEXTURE_FORMAT_NUMBER @builtin = "SDL.texture.format"; const ZString PROP_TEXTURE_ACCESS_NUMBER @builtin = "SDL.texture.access"; const ZString PROP_TEXTURE_WIDTH_NUMBER @builtin = "SDL.texture.width"; const ZString PROP_TEXTURE_HEIGHT_NUMBER @builtin = "SDL.texture.height"; const ZString PROP_TEXTURE_SDR_WHITE_POINT_FLOAT @builtin = "SDL.texture.SDR_white_point"; const ZString PROP_TEXTURE_HDR_HEADROOM_FLOAT @builtin = "SDL.texture.HDR_headroom"; const ZString PROP_TEXTURE_D3D11_TEXTURE_POINTER @builtin = "SDL.texture.d3d11.texture"; const ZString PROP_TEXTURE_D3D11_TEXTURE_U_POINTER @builtin = "SDL.texture.d3d11.texture_u"; const ZString PROP_TEXTURE_D3D11_TEXTURE_V_POINTER @builtin = "SDL.texture.d3d11.texture_v"; const ZString PROP_TEXTURE_D3D12_TEXTURE_POINTER @builtin = "SDL.texture.d3d12.texture"; const ZString PROP_TEXTURE_D3D12_TEXTURE_U_POINTER @builtin = "SDL.texture.d3d12.texture_u"; const ZString PROP_TEXTURE_D3D12_TEXTURE_V_POINTER @builtin = "SDL.texture.d3d12.texture_v"; const ZString PROP_TEXTURE_OPENGL_TEXTURE_NUMBER @builtin = "SDL.texture.opengl.texture"; const ZString PROP_TEXTURE_OPENGL_TEXTURE_UV_NUMBER @builtin = "SDL.texture.opengl.texture_uv"; const ZString PROP_TEXTURE_OPENGL_TEXTURE_U_NUMBER @builtin = "SDL.texture.opengl.texture_u"; const ZString PROP_TEXTURE_OPENGL_TEXTURE_V_NUMBER @builtin = "SDL.texture.opengl.texture_v"; const ZString PROP_TEXTURE_OPENGL_TEXTURE_TARGET_NUMBER @builtin = "SDL.texture.opengl.target"; const ZString PROP_TEXTURE_OPENGL_TEX_W_FLOAT @builtin = "SDL.texture.opengl.tex_w"; const ZString PROP_TEXTURE_OPENGL_TEX_H_FLOAT @builtin = "SDL.texture.opengl.tex_h"; const ZString PROP_TEXTURE_OPENGLES2_TEXTURE_NUMBER @builtin = "SDL.texture.opengles2.texture"; const ZString PROP_TEXTURE_OPENGLES2_TEXTURE_UV_NUMBER @builtin = "SDL.texture.opengles2.texture_uv"; const ZString PROP_TEXTURE_OPENGLES2_TEXTURE_U_NUMBER @builtin = "SDL.texture.opengles2.texture_u"; const ZString PROP_TEXTURE_OPENGLES2_TEXTURE_V_NUMBER @builtin = "SDL.texture.opengles2.texture_v"; const ZString PROP_TEXTURE_OPENGLES2_TEXTURE_TARGET_NUMBER @builtin = "SDL.texture.opengles2.target"; const ZString PROP_TEXTURE_VULKAN_TEXTURE_NUMBER @builtin = "SDL.texture.vulkan.texture"; extern fn Renderer* get_renderer_from_texture(Texture* texture) @extern("SDL_GetRendererFromTexture"); extern fn bool get_texture_size(Texture* texture, float *w, float *h) @extern("SDL_GetTextureSize"); extern fn bool set_texture_color_mod(Texture* texture, char r, char g, char b) @extern("SDL_SetTextureColorMod"); extern fn bool set_texture_color_mod_float(Texture* texture, float r, float g, float b) @extern("SDL_SetTextureColorModFloat"); extern fn bool get_texture_color_mod(Texture* texture, char* r, char* g, char* b) @extern("SDL_GetTextureColorMod"); extern fn bool get_texture_color_mod_float(Texture* texture, float *r, float *g, float *b) @extern("SDL_GetTextureColorModFloat"); extern fn bool set_texture_alpha_mod(Texture* texture, char alpha) @extern("SDL_SetTextureAlphaMod"); extern fn bool set_texture_alpha_mod_float(Texture* texture, float alpha) @extern("SDL_SetTextureAlphaModFloat"); extern fn bool get_texture_alpha_mod(Texture* texture, char* alpha) @extern("SDL_GetTextureAlphaMod"); extern fn bool get_texture_alpha_mod_float(Texture* texture, float *alpha) @extern("SDL_GetTextureAlphaModFloat"); extern fn bool set_texture_blend_mode(Texture* texture, BlendMode blendMode) @extern("SDL_SetTextureBlendMode"); extern fn bool get_texture_blend_mode(Texture* texture, BlendMode *blendMode) @extern("SDL_GetTextureBlendMode"); extern fn bool set_texture_scale_mode(Texture* texture, ScaleMode scaleMode) @extern("SDL_SetTextureScaleMode"); extern fn bool get_texture_scale_mode(Texture* texture, ScaleMode *scaleMode) @extern("SDL_GetTextureScaleMode"); extern fn bool update_texture(Texture* texture, Rect* rect, void* pixels, int pitch) @extern("SDL_UpdateTexture"); extern fn bool update_yuv_texture(Texture* texture, Rect* rect, char* yplane, int ypitch, char* uplane, int upitch, char* vplane, int vpitch) @extern("SDL_UpdateYUVTexture"); extern fn bool update_nv_texture(Texture* texture, Rect* rect, char* yplane, int ypitch, char* u_vplane, int u_vpitch) @extern("SDL_UpdateNVTexture"); extern fn bool lock_texture(Texture* texture, Rect* rect, void **pixels, int *pitch) @extern("SDL_LockTexture"); extern fn bool lock_texture_to_surface(Texture* texture, Rect* rect, Surface **surface) @extern("SDL_LockTextureToSurface"); extern fn void unlock_texture(Texture* texture) @extern("SDL_UnlockTexture"); extern fn bool set_render_target(Renderer* renderer, Texture* texture) @extern("SDL_SetRenderTarget"); extern fn Texture* get_render_target(Renderer* renderer) @extern("SDL_GetRenderTarget"); extern fn bool set_render_logical_presentation(Renderer* renderer, int w, int h, RendererLogicalPresentation mode) @extern("SDL_SetRenderLogicalPresentation"); extern fn bool get_render_logical_presentation(Renderer* renderer, int *w, int *h, RendererLogicalPresentation *mode) @extern("SDL_GetRenderLogicalPresentation"); extern fn bool get_render_logical_presentation_rect(Renderer* renderer, FRect *rect) @extern("SDL_GetRenderLogicalPresentationRect"); extern fn bool render_coordinates_from_window(Renderer* renderer, float window_x, float window_y, float *x, float *y) @extern("SDL_RenderCoordinatesFromWindow"); extern fn bool render_coordinates_to_window(Renderer* renderer, float x, float y, float *window_x, float *window_y) @extern("SDL_RenderCoordinatesToWindow"); extern fn bool convert_event_to_render_coordinates(Renderer* renderer, Event *event) @extern("SDL_ConvertEventToRenderCoordinates"); extern fn bool set_render_viewport(Renderer* renderer, Rect* rect) @extern("SDL_SetRenderViewport"); extern fn bool get_render_viewport(Renderer* renderer, Rect* rect) @extern("SDL_GetRenderViewport"); extern fn bool render_viewport_set(Renderer* renderer) @extern("SDL_RenderViewportSet"); extern fn bool get_render_safe_area(Renderer* renderer, Rect* rect) @extern("SDL_GetRenderSafeArea"); extern fn bool set_render_clip_rect(Renderer* renderer, Rect* rect) @extern("SDL_SetRenderClipRect"); extern fn bool get_render_clip_rect(Renderer* renderer, Rect* rect) @extern("SDL_GetRenderClipRect"); extern fn bool render_clip_enabled(Renderer* renderer) @extern("SDL_RenderClipEnabled"); extern fn bool set_render_scale(Renderer* renderer, float scaleX, float scaleY) @extern("SDL_SetRenderScale"); extern fn bool get_render_scale(Renderer* renderer, float *scaleX, float *scaleY) @extern("SDL_GetRenderScale"); extern fn bool set_render_draw_color(Renderer* renderer, char r, char g, char b, char a) @extern("SDL_SetRenderDrawColor"); extern fn bool set_render_draw_color_float(Renderer* renderer, float r, float g, float b, float a) @extern("SDL_SetRenderDrawColorFloat"); extern fn bool get_render_draw_color(Renderer* renderer, char* r, char* g, char* b, char* a) @extern("SDL_GetRenderDrawColor"); extern fn bool get_render_draw_color_float(Renderer* renderer, float *r, float *g, float *b, float *a) @extern("SDL_GetRenderDrawColorFloat"); extern fn bool set_render_color_scale(Renderer* renderer, float scale) @extern("SDL_SetRenderColorScale"); extern fn bool get_render_color_scale(Renderer* renderer, float *scale) @extern("SDL_GetRenderColorScale"); extern fn bool set_render_draw_blend_mode(Renderer* renderer, BlendMode blendMode) @extern("SDL_SetRenderDrawBlendMode"); extern fn bool get_render_draw_blend_mode(Renderer* renderer, BlendMode *blendMode) @extern("SDL_GetRenderDrawBlendMode"); extern fn bool render_clear(Renderer* renderer) @extern("SDL_RenderClear"); extern fn bool render_point(Renderer* renderer, float x, float y) @extern("SDL_RenderPoint"); extern fn bool render_points(Renderer* renderer, FPoint* points, int count) @extern("SDL_RenderPoints"); extern fn bool render_line(Renderer* renderer, float x1, float y1, float x2, float y2) @extern("SDL_RenderLine"); extern fn bool render_lines(Renderer* renderer, FPoint* points, int count) @extern("SDL_RenderLines"); extern fn bool render_rect(Renderer* renderer, FRect* rect) @extern("SDL_RenderRect"); extern fn bool render_rects(Renderer* renderer, FRect* rects, int count) @extern("SDL_RenderRects"); extern fn bool render_fill_rect(Renderer* renderer, FRect* rect) @extern("SDL_RenderFillRect"); extern fn bool render_fill_rects(Renderer* renderer, FRect* rects, int count) @extern("SDL_RenderFillRects"); extern fn bool render_texture(Renderer* renderer, Texture* texture, FRect* srcrect, FRect* dstrect) @extern("SDL_RenderTexture"); extern fn bool render_texture_rotated(Renderer* renderer, Texture* texture, FRect* srcrect, FRect* dstrect, double angle, FPoint* center, FlipMode flip) @extern("SDL_RenderTextureRotated"); extern fn bool render_texture_affine(Renderer* renderer, Texture* texture, FRect* srcrect, FPoint* origin, FPoint* right, FPoint* down) @extern("SDL_RenderTextureAffine"); extern fn bool render_texture_tiled(Renderer* renderer, Texture* texture, FRect* srcrect, float scale, FRect* dstrect) @extern("SDL_RenderTextureTiled"); extern fn bool render_texture9_grid(Renderer* renderer, Texture* texture, FRect* srcrect, float left_width, float right_width, float top_height, float bottom_height, float scale, FRect* dstrect) @extern("SDL_RenderTexture9Grid"); extern fn bool render_geometry(Renderer* renderer, Texture* texture, Vertex* vertices, int num_vertices, int* indices, int num_indices) @extern("SDL_RenderGeometry"); extern fn bool render_geometry_raw(Renderer* renderer, Texture* texture, float* xy, int xy_stride, FColor* color, int color_stride, float* uv, int uv_stride, int num_vertices, void* indices, int num_indices, int size_indices) @extern("SDL_RenderGeometryRaw"); extern fn Surface* render_read_pixels(Renderer* renderer, Rect* rect) @extern("SDL_RenderReadPixels"); extern fn bool render_present(Renderer* renderer) @extern("SDL_RenderPresent"); extern fn void destroy_texture(Texture* texture) @extern("SDL_DestroyTexture"); extern fn void destroy_renderer(Renderer* renderer) @extern("SDL_DestroyRenderer"); extern fn bool flush_renderer(Renderer* renderer) @extern("SDL_FlushRenderer"); extern fn void* get_render_metal_layer(Renderer* renderer) @extern("SDL_GetRenderMetalLayer"); extern fn void* get_render_metal_command_encoder(Renderer* renderer) @extern("SDL_GetRenderMetalCommandEncoder"); extern fn bool add_vulkan_render_semaphores(Renderer* renderer, uint wait_stage_mask, long wait_semaphore, long signal_semaphore) @extern("SDL_AddVulkanRenderSemaphores"); extern fn bool set_render_v_sync(Renderer* renderer, int vsync) @extern("SDL_SetRenderVSync"); const int RENDERER_VSYNC_DISABLED = 0; const int RENDERER_VSYNC_ADAPTIVE = -1; extern fn bool get_render_v_sync(Renderer* renderer, int* vsync) @extern("SDL_GetRenderVSync"); const int DEBUG_TEXT_FONT_CHARACTER_SIZE = 8; extern fn bool render_debug_text(Renderer* renderer, float x, float y, ZString str) @extern("SDL_RenderDebugText"); extern fn bool render_debug_text_format(Renderer* renderer, float x, float y, ZString fmt, ...) @extern("SDL_RenderDebugTextFormat");