12 int64_t result =
init();
15 program->
vars[
"%rax"].var_value.int_value = result;
25 if (operand.size() != 6) {
26 throw mx::Exception(
"sdl_create_window requires 6 arguments (title, x, y, w, h, flags).");
38 title = operand[0].op;
47 int64_t result =
create_window(title.c_str(), x, y, w, h, flags);
50 program->
vars[
"%rax"].var_value.int_value = result;
55 if (operand.size() != 1) {
56 throw mx::Exception(
"sdl_destroy_window requires 1 argument (window_id).");
66 if (operand.size() != 3) {
67 throw mx::Exception(
"sdl_create_renderer requires 3 arguments (window_id, index, flags).");
77 program->
vars[
"%rax"].var_value.int_value = result;
82 if (operand.size() != 1) {
83 throw mx::Exception(
"sdl_destroy_renderer requires 1 argument (renderer_id).");
93 if (operand.size() != 2) {
94 throw mx::Exception(
"sdl_set_window_title requires 2 arguments (window_id, title).");
108 title = operand[1].op;
115 if (operand.size() != 3) {
116 throw mx::Exception(
"sdl_set_window_position requires 3 arguments (window_id, x, y).");
127 if (operand.size() != 3) {
128 throw mx::Exception(
"sdl_get_window_size requires 3 arguments (window_id, w_var, h_var).");
154 if (operand.size() != 2) {
155 throw mx::Exception(
"sdl_set_window_fullscreen requires 2 arguments (window_id, fullscreen).");
165 if (operand.size() != 3) {
166 throw mx::Exception(
"sdl_get_renderer_output_size requires 3 arguments (renderer_id, w_var, h_var).");
196 program->
vars[
"%rax"].var_value.int_value = result;
203 program->
vars[
"%rax"].var_value.int_value = result;
210 program->
vars[
"%rax"].var_value.int_value = result;
217 program->
vars[
"%rax"].var_value.int_value = result;
221 if (operand.size() != 2) {
222 throw mx::Exception(
"sdl_get_mouse_state requires 2 arguments (x_var, y_var).");
246 program->
vars[
"%rax"].var_value.int_value = result;
250 if (operand.size() != 2) {
251 throw mx::Exception(
"sdl_get_relative_mouse_state requires 2 arguments (x_var, y_var).");
275 program->
vars[
"%rax"].var_value.int_value = result;
280 if (operand.size() != 1) {
281 throw mx::Exception(
"sdl_get_keyboard_state requires 1 argument (numkeys_var).");
297 program->
vars[
"%rax"].var_value.ptr_value = (
void *)result;
301 if (operand.size() != 1) {
302 throw mx::Exception(
"sdl_is_key_pressed requires 1 argument (scancode).");
310 program->
vars[
"%rax"].var_value.int_value = result;
317 program->
vars[
"%rax"].var_value.int_value = result;
322 if (operand.size() != 1) {
323 throw mx::Exception(
"sdl_set_clipboard_text requires 1 argument (text).");
335 text = operand[0].op;
346 program->
vars[
"%rax"].var_value.ptr_value = (
void *)result;
351 if (operand.size() != 1) {
352 throw mx::Exception(
"sdl_show_cursor requires 1 argument (show).");
362 if (operand.size() != 3) {
363 throw mx::Exception(
"sdl_create_rgb_surface requires 3 arguments (width, height, depth).");
373 program->
vars[
"%rax"].var_value.ptr_value = (
void *)result;
377 if (operand.size() != 1) {
378 throw mx::Exception(
"sdl_free_surface requires 1 argument (surface_ptr).");
387 if (operand.size() != 4) {
388 throw mx::Exception(
"sdl_blit_surface requires 4 arguments (src_ptr, dst_ptr, x, y).");
399 program->
vars[
"%rax"].var_value.int_value = result;
404 if (operand.size() != 1) {
405 throw mx::Exception(
"sdl_free_wav requires 1 argument (audio_buf).");
418 program->
vars[
"%rax"].var_value.int_value = result;
426 program->
vars[
"%rax"].var_value.int_value = result;
434 program->
vars[
"%rax"].var_value.int_value = result;
442 program->
vars[
"%rax"].var_value.int_value = result;
450 program->
vars[
"%rax"].var_value.int_value = result;
458 program->
vars[
"%rax"].var_value.int_value = result;
463 if (operand.size() != 5) {
464 throw mx::Exception(
"sdl_set_draw_color requires 5 arguments (renderer_id, r, g, b, a).");
478 if (operand.size() != 1) {
479 throw mx::Exception(
"sdl_clear requires 1 argument (renderer_id).");
489 if (operand.size() != 1) {
490 throw mx::Exception(
"sdl_present requires 1 argument (renderer_id).");
500 if (operand.size() != 3) {
501 throw mx::Exception(
"sdl_draw_point requires 3 arguments (renderer_id, x, y).");
513 if (operand.size() != 5) {
514 throw mx::Exception(
"sdl_draw_line requires 5 arguments (renderer_id, x1, y1, x2, y2).");
528 if (operand.size() != 5) {
529 throw mx::Exception(
"sdl_draw_rect requires 5 arguments (renderer_id, x, y, w, h).");
543 if (operand.size() != 5) {
544 throw mx::Exception(
"sdl_fill_rect requires 5 arguments (renderer_id, x, y, w, h).");
558 if (operand.size() != 5) {
559 throw mx::Exception(
"sdl_create_texture requires 5 arguments (renderer_id, format, access, w, h).");
568 int64_t result =
create_texture(renderer_id, format, access, w, h);
571 program->
vars[
"%rax"].var_value.int_value = result;
576 if (operand.size() != 1) {
577 throw mx::Exception(
"sdl_destroy_texture requires 1 argument (texture_id).");
587 if (operand.size() != 2) {
588 throw mx::Exception(
"sdl_load_texture requires 2 arguments (renderer_id, file_path).");
593 std::string file_path;
602 file_path = operand[1].op;
605 int64_t result =
load_texture(renderer_id, file_path.c_str());
608 program->
vars[
"%rax"].var_value.int_value = result;
613 if (operand.size() != 2) {
614 throw mx::Exception(
"sdl_load_texture_color_key requires 2 arguments (renderer_id, file_path).");
619 std::string file_path;
628 file_path = operand[1].op;
634 program->
vars[
"%rax"].var_value.int_value = result;
648 if (operand.size() != 5) {
649 throw mx::Exception(
"sdl_load_texture_color_key_rgb requires 5 arguments (renderer_id, file_path, r, g, b).");
654 std::string file_path;
663 file_path = operand[1].op;
673 program->
vars[
"%rax"].var_value.int_value = result;
678 if (operand.size() != 10) {
679 throw mx::Exception(
"sdl_render_texture requires 10 arguments (renderer_id, texture_id, src_x, src_y, src_w, src_h, dst_x, dst_y, dst_w, dst_h).");
693 render_texture(renderer_id, texture_id, src_x, src_y, src_w, src_h, dst_x, dst_y, dst_w, dst_h);
701 program->
vars[
"%rax"].var_value.int_value = result;
705 if (operand.size() != 1) {
716 if (operand.size() != 4) {
717 throw mx::Exception(
"sdl_open_audio requires 4 arguments (freq, format, channels, samples).");
725 int64_t result =
open_audio(frequency, format, channels, samples);
728 program->
vars[
"%rax"].var_value.int_value = result;
736 if (operand.size() != 1) {
737 throw mx::Exception(
"sdl_pause_audio requires 1 argument (pause_on).");
746 if (operand.size() != 4) {
747 throw mx::Exception(
"sdl_load_wav requires 4 arguments (file_path, audio_buf_var, audio_len_var, audio_spec_var).");
750 std::string file_path;
759 file_path = operand[0].op;
762 int64_t audio_buf, audio_len, audio_spec;
763 int64_t result =
load_wav(file_path.c_str(), &audio_buf, &audio_len, &audio_spec);
789 program->
vars[
"%rax"].var_value.int_value = result;
793 if (operand.size() != 2) {
794 throw mx::Exception(
"sdl_queue_audio requires 2 arguments (data, len).");
797 void *data =
nullptr;
804 data =
reinterpret_cast<void *
>(
static_cast<uintptr_t
>(operand[0].op_value));
812 program->
vars[
"%rax"].var_value.int_value = result;
819 program->
vars[
"%rax"].var_value.int_value = result;
828 if (operand.size() != 3) {
829 throw mx::Exception(
"sdl_update_texture requires 3 arguments (texture_id, pixels, pitch).");
834 void *pixels =
nullptr;
841 pixels =
reinterpret_cast<void *
>(
static_cast<uintptr_t
>(operand[1].op_value));
849 program->
vars[
"%rax"].var_value.int_value = result;
853 if (operand.size() != 3) {
854 throw mx::Exception(
"sdl_lock_texture requires 3 arguments (texture_id, pixels_var, pitch_var).");
861 int64_t result =
lock_texture(texture_id, &pixels, &pitch);
880 program->
vars[
"%rax"].var_value.int_value = result;
884 if (operand.size() != 1) {
885 throw mx::Exception(
"sdl_unlock_texture requires 1 argument (texture_id).");
897 program->
vars[
"%rax"].var_value.int_value = result;
905 if (operand.size() != 2) {
906 throw mx::Exception(
"sdl_load_font requires 2 arguments (file, ptsize).");
917 file = operand[0].op;
921 int64_t result =
load_font(file.c_str(), ptsize);
924 program->
vars[
"%rax"].var_value.int_value = result;
928 if (operand.size() != 9) {
929 throw mx::Exception(
"sdl_draw_text requires 9 arguments (renderer_id, font_id, text, x, y, r, g, b, a).");
943 text = operand[2].op;
953 draw_text(renderer_id, font_id, text.c_str(), x, y, r, g, b, a);
957 if (operand.size() != 3) {
958 throw mx::Exception(
"sdl_create_render_target requires 3 arguments (renderer_id, width, height).");
968 program->
vars[
"%rax"].var_value.int_value = result;
972 if (operand.size() != 2) {
973 throw mx::Exception(
"sdl_set_render_target requires 2 arguments (renderer_id, target_id).");
983 if (operand.size() != 1) {
984 throw mx::Exception(
"sdl_destroy_render_target requires 1 argument (target_id).");
993 if (operand.size() != 4) {
994 throw mx::Exception(
"sdl_present_scaled requires 4 arguments (renderer_id, target_id, src_width, src_height).");
1006 if (operand.size() != 4) {
1007 throw mx::Exception(
"sdl_present_stretched requires 4 arguments (renderer_id, target_id, dst_width, dst_height).");
1031 path = operand[0].op;
General-purpose exception with errno-aware factory method.
std::unordered_map< std::string, Variable > vars
variable symbol table
Complete MXVM program: instruction interpreter and native x64 code generator.
Variable & getVariable(const std::string &name)
Look up a variable by name, searching local scope then global.
bool isVariable(const std::string &name)
Check whether a variable exists in local or global scope.
Intermediate code representation, execution engine, and native x64 code generation (SysV + Win64).
Instruction set enum, operand/instruction structs, variable types, and Variable/Variable_Value defini...
SDL2 module C API — function declarations for SDL2 bindings exported to MXVM programs.
int64_t poll_event(void)
Poll for a pending SDL event.
void quit(void)
Shut down SDL2 and release all resources.
void fill_rect(int64_t renderer_id, int64_t x, int64_t y, int64_t w, int64_t h)
Draw a filled rectangle.
int64_t get_queued_audio_size(void)
Get the number of bytes of queued audio.
void set_draw_color(int64_t renderer_id, int64_t r, int64_t g, int64_t b, int64_t a)
Set the current draw color (RGBA).
void get_renderer_output_size(int64_t renderer_id, int64_t *w, int64_t *h)
Get the renderer output size.
int64_t create_window(const char *title, int64_t x, int64_t y, int64_t w, int64_t h, int64_t flags)
Create an SDL window.
int64_t get_relative_mouse_state(int64_t *x, int64_t *y)
Get the relative mouse state.
int64_t open_audio(int64_t freq, int64_t format, int64_t channels, int64_t samples)
Open the audio device.
void render_texture(int64_t renderer_id, int64_t texture_id, int64_t src_x, int64_t src_y, int64_t src_w, int64_t src_h, int64_t dst_x, int64_t dst_y, int64_t dst_w, int64_t dst_h)
Render a portion of a texture to a destination rectangle.
void set_clipboard_text(const char *text)
Set the system clipboard text.
const char * get_clipboard_text(void)
Get the system clipboard text.
void set_window_title(int64_t window_id, const char *title)
Set the title of a window.
int64_t get_num_keys(void)
Get the total number of keyboard keys.
int64_t get_key_code(void)
Get the key code from the last keyboard event.
void set_render_target(int64_t renderer_id, int64_t target_id)
Set the current render target (0 to render to the window).
int64_t get_mouse_state(int64_t *x, int64_t *y)
Get the current mouse state with pointer coordinates.
void free_surface(int64_t surf_ptr)
Free a surface.
int64_t get_mouse_button(void)
Get the mouse button from the last mouse event.
int64_t update_texture(int64_t texture_id, const void *pixels, int64_t pitch)
Update a texture with new pixel data.
int64_t load_wav(const char *file_path, int64_t *audio_buf, int64_t *audio_len, int64_t *audio_spec)
Load a WAV file.
int64_t get_mouse_buttons(void)
Get the current mouse button bitmask (pointerless variant).
int64_t create_rgb_surface(int64_t width, int64_t height, int64_t depth)
Create an RGB surface.
void quit_text(void)
Shut down the SDL_ttf subsystem.
void set_window_position(int64_t window_id, int64_t x, int64_t y)
Set the position of a window.
int64_t get_relative_mouse_y(void)
Get the relative mouse y delta (pointerless variant).
int64_t create_renderer(int64_t window_id, int64_t index, int64_t flags)
Create a hardware-accelerated renderer for a window.
void destroy_renderer(int64_t renderer_id)
Destroy a renderer by ID.
void delay(int64_t ms)
Pause execution for the given number of milliseconds.
int64_t get_keyboard_state(int64_t *numkeys)
Get the keyboard state array.
void get_window_size(int64_t window_id, int64_t *w, int64_t *h)
Get the size of a window.
void clear_queued_audio(void)
Clear all queued audio data.
int64_t get_event_type(void)
Get the type of the last polled event.
int64_t init(void)
Initialize SDL2 subsystems.
int64_t load_texture_color_key_rgb(int64_t renderer_id, const char *file_path, int64_t r, int64_t g, int64_t b)
Load a BMP file as a texture with a custom RGB color-key transparency.
void draw_rect(int64_t renderer_id, int64_t x, int64_t y, int64_t w, int64_t h)
Draw a rectangle outline.
int64_t get_relative_mouse_x(void)
Get the relative mouse x delta (pointerless variant).
int64_t get_mouse_y(void)
Get the mouse y coordinate from the last mouse event.
void show_cursor(int64_t show)
Show or hide the mouse cursor.
void clear(int64_t renderer_id)
Clear the renderer with the current draw color.
void pause_audio(int64_t pause_on)
Pause or unpause audio playback.
void draw_text(int64_t renderer_id, int64_t font_id, const char *text, int64_t x, int64_t y, int64_t r, int64_t g, int64_t b, int64_t a)
Draw text with a font at the given position and color.
void destroy_window(int64_t window_id)
Destroy a window by ID.
void free_wav(int64_t audio_buf)
Free a loaded WAV buffer.
int64_t get_relative_mouse_buttons(void)
Get the relative mouse button bitmask (pointerless variant).
int64_t load_texture_color_key(int64_t renderer_id, const char *file_path)
Load a BMP file as a texture with black color-key transparency.
void destroy_render_target(int64_t target_id)
Destroy a render target texture.
int64_t is_key_pressed(int64_t scancode)
Check whether a specific key is currently pressed.
int64_t get_mouse_x(void)
Get the mouse x coordinate from the last mouse event.
int64_t create_texture(int64_t renderer_id, int64_t format, int64_t access, int64_t w, int64_t h)
Create a blank texture.
void draw_line(int64_t renderer_id, int64_t x1, int64_t y1, int64_t x2, int64_t y2)
Draw a line between two points.
void present_stretched(int64_t renderer_id, int64_t target_id, int64_t dst_width, int64_t dst_height)
Present a render target stretched to the given dimensions.
void set_window_icon(uint64_t window_id, const char *path)
Set the window icon from an image file.
int64_t queue_audio(const void *data, int64_t len)
Queue audio data for playback.
void set_window_fullscreen(int64_t window_id, int64_t fullscreen)
Set or clear fullscreen mode for a window.
void close_audio(void)
Close the audio device.
int64_t load_font(const char *file, int64_t ptsize)
Load a TrueType font.
int64_t create_render_target(int64_t renderer_id, int64_t width, int64_t height)
Create an off-screen render target texture.
void present_scaled(int64_t renderer_id, int64_t target_id, int64_t scale_width, int64_t scale_height)
Present a render target scaled to the given dimensions.
int64_t load_texture(int64_t renderer_id, const char *file_path)
Load a texture from an image file.
void unlock_texture(int64_t texture_id)
Unlock a previously locked texture.
void present(int64_t renderer_id)
Present the renderer's back buffer to the screen.
int64_t get_ticks(void)
Get the number of milliseconds since SDL initialization.
int64_t init_text(void)
Initialize the SDL_ttf text rendering subsystem.
int64_t blit_surface(int64_t src_ptr, int64_t dst_ptr, int64_t x, int64_t y)
Blit a source surface onto a destination surface at (x, y).
int64_t lock_texture(int64_t texture_id, void **pixels, int64_t *pitch)
Lock a texture for direct pixel access.
void draw_point(int64_t renderer_id, int64_t x, int64_t y)
Draw a single pixel.
void destroy_texture(int64_t texture_id)
Destroy a texture.
void mxvm_sdl_set_window_title(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_delay(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_open_audio(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_relative_mouse_y(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_create_rgb_surface(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_render_texture(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_fill_rect(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_present(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_create_render_target(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_show_cursor(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_update_texture(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_renderer_output_size(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_relative_mouse_state(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_queue_audio(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_set_clipboard_text(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_free_wav(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_destroy_window(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_set_window_fullscreen(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_relative_mouse_buttons(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_relative_mouse_x(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_destroy_renderer(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_destroy_render_target(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_create_window(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_close_audio(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_load_font(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_destroy_texture(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_key_code(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_create_renderer(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_mouse_state(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_load_texture_color_key_rgb(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
MXVM binding for load_texture_color_key_rgb.
void mxvm_sdl_draw_rect(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_clipboard_text(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_mouse_x(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_free_surface(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_lock_texture(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_pause_audio(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_window_size(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_draw_text(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_load_wav(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_quit_text(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_set_draw_color(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_num_keys(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_mouse_y(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_draw_point(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_set_render_target(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_load_texture_color_key(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_draw_line(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_is_key_pressed(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_present_stretched(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_create_texture(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_event_type(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_ticks(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_present_scaled(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_init(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_set_window_position(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_set_window_icon(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_mouse_buttons(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_unlock_texture(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_quit(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_blit_surface(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_poll_event(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_clear(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_init_text(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_keyboard_state(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_clear_queued_audio(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_queued_audio_size(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_get_mouse_button(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
void mxvm_sdl_load_texture(mxvm::Program *program, std::vector< mxvm::Operand > &operand)
A named variable with type, value, and optional object association.