From c468d6aadfdddbce8898ce2f2b3a8cd700b80dc1 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Thu, 9 Dec 2021 13:23:14 +0100 Subject: Initial work on SDL_render --- sdl2/render.ha | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 sdl2/render.ha (limited to 'sdl2/render.ha') diff --git a/sdl2/render.ha b/sdl2/render.ha new file mode 100644 index 0000000..e1d2c8e --- /dev/null +++ b/sdl2/render.ha @@ -0,0 +1,70 @@ +// TODO: Flesh me out + +// A structure representing rendering state. (Opaque) +export type renderer = void; + +// An efficient driver-specific representation of pixel data. (Opaque) +export type texture = void; + +// Flags used when creating a rendering context. +export type renderer_flags = enum u32 { + NONE = 0, + SOFTWARE = 0x00000001, + ACCELERATED = 0x00000002, + PRESENTVSYNC = 0x00000004, + TARGETTEXTURE = 0x00000008, +}; + +// Create a window and default renderer. +// +// 'width' and 'height' set the width and height of the window, in screen +// coordinates. 'window_flags' configure additional window parameters. +// +// 'window' and 'renderer' are out parameters, or null, which are filled in with +// the created window and renderer respectively. +// +// Returns 0 on success, or -1 on error. +export @symbol("SDL_CreateWindowAndRenderer") fn create_window_and_renderer( + width: int, height: int, window_flags: window_flags, + window: nullable **window, renderer: nullable **renderer) int; + +// Create a 2D rendering context for a window. +// +// 'window' is the window where rendering is displayed. 'index' is the index of +// the rendering driver to initialize, or -1 to initialize the first one +// supporting the requested flags. +// +// Returns a valid rendering context, or NULL if there was an error. +// +// See also: [[create_software_renderer]], [[get_renderer_info]], +// [[destroy_renderer]]. +export @symbol("SDL_CreateRenderer") fn create_renderer(window: *window, + index: int, flags: renderer_flags) nullable *renderer; + +// Destroy the rendering context for a window and free associated textures. +// +// See also: [[create_renderer]]. +export @symbol("SDL_DestroyRenderer") fn destroy_renderer(renderer: *renderer) void; + +// Opaque value for the alpha channel (255). +export def ALPHA_OPAQUE: u8 = 255; + +// Set the color used for drawing operations (Rect, Line and Clear). +// +// 'renderer' is the renderer for which drawing color should be set. 'r', 'g', +// 'b', and 'a' respectively set the red, gree, blue, and alpha channels. +// +// Returns 0 on success, or -1 on error +export @symbol("SDL_SetRenderDrawColor") fn set_render_draw_color(renderer: *renderer, + r: u8, g: u8, b: u8, a: u8) int; + +// Clear the current rendering target with the drawing color +// +// This function clears the entire rendering target, ignoring the viewport and +// the clip rectangle. +// +// Returns 0 on success, or -1 on error +export @symbol("SDL_RenderClear") fn render_clear(renderer: *renderer) int; + +// Update the screen with rendering performed. +export @symbol("SDL_RenderPresent") fn render_present(renderer: *renderer) void; -- cgit v1.2.3