diff options
| author | Drew DeVault <sir@cmpwn.com> | 2021-12-09 13:23:14 +0100 |
|---|---|---|
| committer | Drew DeVault <sir@cmpwn.com> | 2021-12-09 13:23:14 +0100 |
| commit | c468d6aadfdddbce8898ce2f2b3a8cd700b80dc1 (patch) | |
| tree | 4ab2d17165178470fa1025f0af1132eb21d49522 | |
| parent | Rig up events, partially rig up video (diff) | |
| download | hare-chip8-c468d6aadfdddbce8898ce2f2b3a8cd700b80dc1.tar.gz | |
Initial work on SDL_render
Diffstat (limited to '')
| -rw-r--r-- | cmd/demo/main.ha | 14 | ||||
| -rw-r--r-- | sdl2/render.ha | 70 |
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; |
