aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/demo/main.ha14
-rw-r--r--sdl2/render.ha70
2 files changed, 83 insertions, 1 deletions
diff --git a/cmd/demo/main.ha b/cmd/demo/main.ha
index 1c780fd..26025ce 100644
--- a/cmd/demo/main.ha
+++ b/cmd/demo/main.ha
@@ -1,6 +1,6 @@
use fmt;
use os;
-use sdl2::{event_type, window_flags};
+use sdl2::{event_type, window_flags, renderer_flags};
use sdl2;
use strings;
@@ -20,6 +20,18 @@ export fn main() void = {
};
defer sdl2::destroy_window(win);
+ const render = match (sdl2::create_renderer(win, -1, renderer_flags::NONE)) {
+ case let rend: *sdl2::renderer =>
+ yield rend;
+ case null =>
+ fmt::fatal("sdl2::create_renderer failed");
+ };
+ defer sdl2::destroy_renderer(render);
+
+ sdl2::set_render_draw_color(render, 255, 0, 0, 255);
+ sdl2::render_clear(render);
+ sdl2::render_present(render);
+
let ev = sdl2::event { ... };
for (sdl2::wait_event(&ev) == 1) {
switch (ev.event_type) {
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;