aboutsummaryrefslogtreecommitdiff
path: root/sdl2/render.ha
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2021-12-10 09:42:10 +0100
committerDrew DeVault <sir@cmpwn.com>2021-12-10 09:44:50 +0100
commit9607eb0de784fab1a99833f567c0eaca72b67e4a (patch)
tree7f79a0914a6db1d963d877bed051f6856c54cfa8 /sdl2/render.ha
parentMakefile: drop -T+libc (diff)
downloadhare-chip8-9607eb0de784fab1a99833f567c0eaca72b67e4a.tar.gz
all: rig up Hare-native error handling
Diffstat (limited to 'sdl2/render.ha')
-rw-r--r--sdl2/render.ha92
1 files changed, 64 insertions, 28 deletions
diff --git a/sdl2/render.ha b/sdl2/render.ha
index 5bf1b09..649e786 100644
--- a/sdl2/render.ha
+++ b/sdl2/render.ha
@@ -15,6 +15,10 @@ export type renderer_flags = enum u32 {
TARGETTEXTURE = 0x00000008,
};
+@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 window and default renderer.
//
// 'width' and 'height' set the width and height of the window, in screen
@@ -22,11 +26,17 @@ export type renderer_flags = enum u32 {
//
// '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;
+export fn create_window_and_renderer(
+ width: int,
+ height: int,
+ window_flags: window_flags,
+ window: nullable **window,
+ renderer: nullable **renderer,
+) (void | error) = wrapvoid(_create_window_and_renderer(width, height,
+ window_flags, window, renderer));
+
+@symbol("SDL_CreateRenderer") fn _create_renderer(window: *window,
+ index: int, flags: renderer_flags) nullable *renderer;
// Create a 2D rendering context for a window.
//
@@ -34,12 +44,14 @@ export @symbol("SDL_CreateWindowAndRenderer") fn create_window_and_renderer(
// 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;
+export fn create_renderer(
+ window: *window,
+ index: int,
+ flags: renderer_flags,
+) (*renderer | error) =
+ wrapptr(_create_renderer(window, index, flags))?: *renderer;
// Destroy the rendering context for a window and free associated textures.
//
@@ -49,22 +61,27 @@ export @symbol("SDL_DestroyRenderer") fn destroy_renderer(renderer: *renderer) v
// Opaque value for the alpha channel (255).
export def ALPHA_OPAQUE: u8 = 255;
+@symbol("SDL_SetRenderDrawColor") fn _set_render_draw_color(renderer: *renderer,
+ r: u8, g: u8, b: u8, a: u8) int;
+
// 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;
+export fn set_render_draw_color(
+ renderer: *renderer,
+ r: u8, g: u8, b: u8, a: u8,
+) (void | error) = wrapvoid(_set_render_draw_color(renderer, r, g, b, a));
+
+@symbol("SDL_RenderClear") fn _render_clear(renderer: *renderer) 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;
+export fn render_clear(renderer: *renderer) (void | error) = {
+ return wrapvoid(_render_clear(renderer));
+};
// Update the screen with rendering performed.
export @symbol("SDL_RenderPresent") fn render_present(renderer: *renderer) void;
@@ -72,13 +89,23 @@ export @symbol("SDL_RenderPresent") fn render_present(renderer: *renderer) void;
// Destroy the specified texture.
export @symbol("SDL_DestroyTexture") fn destroy_texture(texture: *texture) void;
-// Query the attributes of a texture
-//
-// Returns 0 on success, or -1 if the texture is not valid.
-export @symbol("SDL_QueryTexture") fn query_texture(texture: *texture,
+@symbol("SDL_QueryTexture") fn _query_texture(texture: *texture,
format: nullable *u32, access: nullable *int,
w: nullable *int, h: nullable *int) int;
+// Query the attributes of a texture
+export fn query_texture(
+ texture: *texture,
+ format: nullable *u32,
+ access: nullable *int,
+ w: nullable *int, h: nullable *int,
+) (void | error) = {
+ return wrapvoid(_query_texture(texture, format, access, w, h));
+};
+
+@symbol("SDL_SetTextureColorMod") fn _set_texture_color_mod(
+ texture: *texture, r: u8, g: u8, b: u8) int;
+
// Set an additional color value multiplied into render copy operations.
//
// When this texture is rendered, during the copy operation each source color
@@ -89,13 +116,22 @@ export @symbol("SDL_QueryTexture") fn query_texture(texture: *texture,
//
// Color modulation is not always supported by the renderer; it will return -1
// if color modulation is not supported.
-//
-// Returns 0 on success or a negative error code on failure.
-export @symbol("SDL_SetTextureColorMod") fn set_texture_color_mod(
- texture: *texture, r: u8, g: u8, b: u8) int;
+export fn set_texture_color_mod(
+ texture: *texture,
+ r: u8, g: u8, b: u8,
+) (void | error) = {
+ return wrapvoid(_set_texture_color_mod(texture, r, g, b));
+};
-// Copy a portion of the texture to the current rendering target.
-//
-// Returns 0 on success, or -1 on error
-export @symbol("SDL_RenderCopy") fn render_copy(renderer: *renderer,
+@symbol("SDL_RenderCopy") fn _render_copy(renderer: *renderer,
texture: *texture, srcrect: nullable *rect, dstrect: nullable *rect) int;
+
+// Copy a portion of the texture to the current rendering target.
+export fn render_copy(
+ renderer: *renderer,
+ texture: *texture,
+ srcrect: nullable *rect,
+ dstrect: nullable *rect,
+) (void | error) = {
+ return wrapvoid(_render_copy(renderer, texture, srcrect, dstrect));
+};