sdl3.c3l/sdl3_renderer.c3i

217 lines
20 KiB
Plaintext

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");