diff options
author | Mitya Selivanov <automainint@guattari.tech> | 2025-01-15 00:47:52 +0100 |
---|---|---|
committer | Mitya Selivanov <automainint@guattari.tech> | 2025-01-15 00:47:52 +0100 |
commit | fe6c2a13cb0d4819f05fb5867f8619e54c5b9191 (patch) | |
tree | 0725fdd3241ac8d1249fe0cfd1d4051b2ee2693e | |
parent | a14a2e0d933e64b1c28b45ac10e651af7f749b3e (diff) | |
download | reduced_system_layer-fe6c2a13cb0d4819f05fb5867f8619e54c5b9191.zip |
Defaults in web; Drop file interface
-rw-r--r-- | index.htm | 267 | ||||
-rwxr-xr-x | reduced_system_layer.c | 283 |
2 files changed, 380 insertions, 170 deletions
@@ -74,7 +74,7 @@ this.sound_buffer_address = program.exports.js_sound_buffer(); this.pixels_address = program.exports.js_pixels(); - this.frames = new Float32Array(this.memory_buffer, this.sound_buffer_address, program.exports.js_max_num_audio_frames()); + this.frames = new Float32Array(this.memory_buffer, this.sound_buffer_address, program.exports.js_max_num_sound_frames()); let bytes = new Uint8Array(this.memory_buffer); let title_address = program.exports.js_title(); @@ -181,106 +181,7 @@ ); </script> <script type="text/javascript"> - const KEY_PASTE = 118; - - let key_map = { - "Backspace" : 8, - "Tab" : 9, - "Enter" : 10, - "ControlLeft" : 11, - "ControlRight" : 12, - "ShiftLeft" : 13, - "ShiftRight" : 14, - "AltLeft" : 15, - "AltRight" : 16, - "ArrowLeft" : 17, - "ArrowRight" : 18, - "ArrowUp" : 19, - "ArrowDown" : 20, - "Pause" : 21, - "Insert" : 22, - "Home" : 23, - "End" : 24, - "PageUp" : 25, - "PageDown" : 26, - "Escape" : 27, - "PrintScreen" : 28, - "Space" : 32, - "MetaLeft" : 33, - "MetaRight" : 34, - "Quote" : 39, - "Comma" : 44, - "Minus" : 45, - "Period" : 46, - "Slash" : 47, - "Digit0" : 48, - "Digit1" : 49, - "Digit2" : 50, - "Digit3" : 51, - "Digit4" : 52, - "Digit5" : 53, - "Digit6" : 54, - "Digit7" : 55, - "Digit8" : 56, - "Digit9" : 57, - "Semicolon" : 59, - "Equal" : 61, - "BracketLeft" : 91, - "Backslash" : 92, - "BracketRight" : 93, - "Backquote" : 96, - "KeyA" : 97, - "KeyB" : 98, - "KeyC" : 99, - "KeyD" : 100, - "KeyE" : 101, - "KeyF" : 102, - "KeyG" : 103, - "KeyH" : 104, - "KeyI" : 105, - "KeyJ" : 106, - "KeyK" : 107, - "KeyL" : 108, - "KeyM" : 109, - "KeyN" : 110, - "KeyO" : 111, - "KeyP" : 112, - "KeyQ" : 113, - "KeyR" : 114, - "KeyS" : 115, - "KeyT" : 116, - "KeyU" : 117, - "KeyV" : KEY_PASTE, - "KeyW" : 119, - "KeyX" : 120, - "KeyY" : 121, - "KeyZ" : 122, - "Delete" : 127, - "F1" : 145, - "F2" : 146, - "F3" : 147, - "F4" : 148, - "F5" : 149, - "F6" : 150, - "F7" : 151, - "F8" : 152, - "F9" : 153, - "F10" : 154, - "F11" : 155, - "F12" : 156, - "F13" : 157, - "F14" : 158, - "F15" : 159, - "F16" : 160, - "F17" : 161, - "F18" : 162, - "F19" : 163, - "F20" : 164, - "F21" : 165, - "F22" : 166, - "F23" : 167, - "F24" : 168, - }; + let key_map = {}; function key_from_code(code) { if (code in key_map) @@ -303,9 +204,159 @@ return ev.key.charCodeAt(0); } + async function obtain_defaults(wasm) { + let program = await WebAssembly.instantiate( + wasm, + { + wasi_snapshot_preview1 : { + clock_time_get : () => {}, + args_sizes_get : () => {}, + args_get : () => {}, + proc_exit : () => {}, + fd_close : () => {}, + fd_write : () => {}, + fd_seek : () => {}, + }, + env : { + p_clipboard_write_impl : () => {}, + p_time_impl : () => {}, + + floor : () => {}, + ceil : () => {}, + sqrt : () => {}, + cbrt : () => {}, + pow : () => {}, + log : () => {}, + log2 : () => {}, + log10 : () => {}, + exp : () => {}, + sin : () => {}, + cos : () => {}, + tan : () => {}, + asin : () => {}, + acos : () => {}, + atan : () => {}, + atan2 : () => {}, + }, + } + ); + + let num = program.exports.js_max_num_keys(); + let address = program.exports.js_key_map(); + let keys = new Uint16Array(program.exports.memory.buffer, address, num); + + let n = 0; + + key_map["Backspace"] = keys[n++]; + key_map["Tab"] = keys[n++]; + key_map["Enter"] = keys[n++]; + key_map["ControlLeft"] = keys[n++]; + key_map["ControlRight"] = keys[n++]; + key_map["ShiftLeft"] = keys[n++]; + key_map["ShiftRight"] = keys[n++]; + key_map["AltLeft"] = keys[n++]; + key_map["AltRight"] = keys[n++]; + key_map["ArrowLeft"] = keys[n++]; + key_map["ArrowRight"] = keys[n++]; + key_map["ArrowUp"] = keys[n++]; + key_map["ArrowDown"] = keys[n++]; + key_map["Pause"] = keys[n++]; + key_map["Insert"] = keys[n++]; + key_map["Home"] = keys[n++]; + key_map["End"] = keys[n++]; + key_map["PageUp"] = keys[n++]; + key_map["PageDown"] = keys[n++]; + key_map["Escape"] = keys[n++]; + key_map["PrintScreen"] = keys[n++]; + key_map["Space"] = keys[n++]; + key_map["MetaLeft"] = keys[n++]; + key_map["MetaRight"] = keys[n++]; + key_map["Quote"] = keys[n++]; + key_map["Comma"] = keys[n++]; + key_map["Minus"] = keys[n++]; + key_map["Period"] = keys[n++]; + key_map["Slash"] = keys[n++]; + key_map["Digit0"] = keys[n++]; + key_map["Digit1"] = keys[n++]; + key_map["Digit2"] = keys[n++]; + key_map["Digit3"] = keys[n++]; + key_map["Digit4"] = keys[n++]; + key_map["Digit5"] = keys[n++]; + key_map["Digit6"] = keys[n++]; + key_map["Digit7"] = keys[n++]; + key_map["Digit8"] = keys[n++]; + key_map["Digit9"] = keys[n++]; + key_map["Semicolon"] = keys[n++]; + key_map["Equal"] = keys[n++]; + key_map["BracketLeft"] = keys[n++]; + key_map["Backslash"] = keys[n++]; + key_map["BracketRight"] = keys[n++]; + key_map["Backquote"] = keys[n++]; + key_map["KeyA"] = keys[n++]; + key_map["KeyB"] = keys[n++]; + key_map["KeyC"] = keys[n++]; + key_map["KeyD"] = keys[n++]; + key_map["KeyE"] = keys[n++]; + key_map["KeyF"] = keys[n++]; + key_map["KeyG"] = keys[n++]; + key_map["KeyH"] = keys[n++]; + key_map["KeyI"] = keys[n++]; + key_map["KeyJ"] = keys[n++]; + key_map["KeyK"] = keys[n++]; + key_map["KeyL"] = keys[n++]; + key_map["KeyM"] = keys[n++]; + key_map["KeyN"] = keys[n++]; + key_map["KeyO"] = keys[n++]; + key_map["KeyP"] = keys[n++]; + key_map["KeyQ"] = keys[n++]; + key_map["KeyR"] = keys[n++]; + key_map["KeyS"] = keys[n++]; + key_map["KeyT"] = keys[n++]; + key_map["KeyU"] = keys[n++]; + key_map["KeyV"] = keys[n++]; + key_map["KeyW"] = keys[n++]; + key_map["KeyX"] = keys[n++]; + key_map["KeyY"] = keys[n++]; + key_map["KeyZ"] = keys[n++]; + key_map["Delete"] = keys[n++]; + key_map["F1"] = keys[n++]; + key_map["F2"] = keys[n++]; + key_map["F3"] = keys[n++]; + key_map["F4"] = keys[n++]; + key_map["F5"] = keys[n++]; + key_map["F6"] = keys[n++]; + key_map["F7"] = keys[n++]; + key_map["F8"] = keys[n++]; + key_map["F9"] = keys[n++]; + key_map["F10"] = keys[n++]; + key_map["F11"] = keys[n++]; + key_map["F12"] = keys[n++]; + key_map["F13"] = keys[n++]; + key_map["F14"] = keys[n++]; + key_map["F15"] = keys[n++]; + key_map["F16"] = keys[n++]; + key_map["F17"] = keys[n++]; + key_map["F18"] = keys[n++]; + key_map["F19"] = keys[n++]; + key_map["F20"] = keys[n++]; + key_map["F21"] = keys[n++]; + key_map["F22"] = keys[n++]; + key_map["F23"] = keys[n++]; + key_map["F24"] = keys[n++]; + + let defaults = { + sound_sample_rate : program.exports.js_sound_sample_rate(), + num_sound_channels : program.exports.js_num_sound_channels(), + key_paste : key_map["KeyV"], + }; + + return defaults; + } + async function run(attrs) { - let sound_sample_rate = 44100; // TODO - let sound_num_channels = 2; // TODO + let wasm = await WebAssembly.compileStreaming(attrs.wasm); + + let { sound_sample_rate, num_sound_channels, key_paste } = await obtain_defaults(wasm); let frame_width = 0; let frame_height = 0; @@ -388,7 +439,7 @@ sound_context, "Sound_Node", { numberOfInputs : 0, - outputChannelCount : [ sound_num_channels ], + outputChannelCount : [ num_sound_channels ], processorOptions : { href : new TextEncoder("utf8").encode(document.location.href) }, } ); @@ -418,8 +469,10 @@ sound_node.port.postMessage({ id : "wasm", - wasm : await WebAssembly.compileStreaming(attrs.wasm), + wasm : wasm, }); + + wasm = undefined; }; canvas.addEventListener("mousedown", (ev) => { @@ -467,7 +520,7 @@ let mod = mod_from_event(ev); let ch = char_from_event(ev); - if (ev.ctrlKey && key == KEY_PASTE) { + if (ev.ctrlKey && key == key_paste) { paste_mod = mod; paste_ch = ch; } else @@ -506,7 +559,7 @@ id : "paste", bytes : new TextEncoder("utf8").encode(ev.clipboardData.getData("text")), mod : paste_mod, - key : KEY_PASTE, + key : key_paste, ch : paste_ch, }); }); diff --git a/reduced_system_layer.c b/reduced_system_layer.c index d86945e..8af0007 100755 --- a/reduced_system_layer.c +++ b/reduced_system_layer.c @@ -49,7 +49,23 @@ #/ - Vector math #/ - Anti-aliasing #/ - Logging -#/ - Parsing +#/ - Test suite +#/ - Long term +#/ - Parsing +#/ - Printing +#/ - File system +#/ - Secure random +#/ - Process +#/ - Shared memory +#/ - Shared mutex +#/ - Stackless coroutines +#/ - Big integer +#/ - Mersenne Twister 64 +#/ - Arithmetic coding +#/ - Threads - https://nachtimwald.com/2019/04/05/cross-platform-thread-wrapper +#/ - Web sockets +#/ - HTTP +#/ - Cryptography - https://github.com/jedisct1/supercop #/ #/ Done #/ @@ -191,6 +207,14 @@ typedef struct { f64 v[16]; } mat4; #define MAX_PIXEL_SIZE 16 #endif +#ifndef DEFAULT_PIXEL_SIZE +#if defined(__wasm__) +#define DEFAULT_PIXEL_SIZE 3 +#else +#define DEFAULT_PIXEL_SIZE 1 +#endif +#endif + #ifndef MIN_FRAME_DURATION #define MIN_FRAME_DURATION 9 #endif @@ -219,6 +243,10 @@ typedef struct { f64 v[16]; } mat4; #define MAX_NUM_SOUND_FRAMES (10 * SOUND_SAMPLE_RATE * NUM_SOUND_CHANNELS) #endif +#ifndef DROP_FILE_BUFFER_SIZE +#define DROP_FILE_BUFFER_SIZE (20 * 1024 * 1024) +#endif + // ================================================================ // // PLATFORM API @@ -240,7 +268,9 @@ extern "C" { enum { IPv4_UDP = 1, IPv6_UDP = 2, +}; +enum { MOD_CTRL = 1, MOD_SHIFT = 2, MOD_ALT = 3, @@ -379,6 +409,15 @@ typedef struct { } Input_Key; typedef struct { + i32 x; + i32 y; + i64 name_size; + c8 *name; + i64 data_size; + u8 *data; +} Drop_File; + +typedef struct { c8 *title; i32 frame_width; i32 frame_height; @@ -388,8 +427,10 @@ typedef struct { b8 done; b8 has_focus; b8 has_cursor; + b8 files_dropped; i32 real_width; i32 real_height; + i32 pixel_size; i64 input_size; i64 clipboard_size; i32 cursor_x; @@ -401,12 +442,16 @@ typedef struct { i64 sound_clock_time; i64 sound_clock_carry; + i64 num_drop_files; + Drop_File *drop_files; + vec4_f32 pixels [MAX_NUM_PIXELS]; f32 sound_ring [MAX_NUM_SOUND_FRAMES]; Input_Key input [MAX_INPUT_SIZE]; c8 clipboard [MAX_CLIPBOARD_SIZE]; b8 key_down [MAX_NUM_KEYS]; b8 key_pressed [MAX_NUM_KEYS]; + u8 drop_buffer [DROP_FILE_BUFFER_SIZE]; } Platform; typedef struct { @@ -1203,7 +1248,6 @@ void p_queue_sound(i64 delay_in_samples, i64 num_samples, f32 *frames) { #include <X11/Xatom.h> static i64 _frame_time = 0; -static i32 _pixel_size = 0; static XImage _image = {0}; static Display *_display = NULL; static GC _gc = NULL; @@ -1708,29 +1752,32 @@ i32 p_handle_events(void) { _image.width = attrs.width; _image.height = attrs.height; _image.bytes_per_line = _image.width * 4; + } - i32 width = _image.width; - i32 height = _image.height; + i32 width = _image.width; + i32 height = _image.height; - if (_pixel_size <= MIN_PIXEL_SIZE) - _pixel_size = MIN_PIXEL_SIZE; + if (g_platform.pixel_size <= 0) + g_platform.pixel_size = DEFAULT_PIXEL_SIZE; - if (_pixel_size > 1) { - width = (i32) floor(((f64) _image.width) / _pixel_size + .5); - height = (i32) floor(((f64) _image.height) / _pixel_size + .5); - } + if (g_platform.pixel_size <= MIN_PIXEL_SIZE) + g_platform.pixel_size = MIN_PIXEL_SIZE; - if (g_platform.real_width != _image.width || g_platform.real_height != _image.height) { - ++num_events; - g_platform.real_width = _image.width; - g_platform.real_height = _image.height; - } + if (g_platform.pixel_size > 1) { + width = (i32) floor(((f64) _image.width) / g_platform.pixel_size + .5); + height = (i32) floor(((f64) _image.height) / g_platform.pixel_size + .5); + } - if (g_platform.frame_width != width || g_platform.frame_height != height) { - ++num_events; - g_platform.frame_width = width; - g_platform.frame_height = height; - } + if (g_platform.real_width != _image.width || g_platform.real_height != _image.height) { + ++num_events; + g_platform.real_width = _image.width; + g_platform.real_height = _image.height; + } + + if (g_platform.frame_width != width || g_platform.frame_height != height) { + ++num_events; + g_platform.frame_width = width; + g_platform.frame_height = height; } return num_events; @@ -1777,10 +1824,10 @@ void p_render_frame(void) { if (!g_platform.exact_resolution) { i64 frame_duration = p_time() - _frame_time; - if (_pixel_size < MAX_PIXEL_SIZE && frame_duration > MAX_FRAME_DURATION) - ++_pixel_size; - else if (_pixel_size > MIN_PIXEL_SIZE && frame_duration < MIN_FRAME_DURATION) - --_pixel_size; + if (g_platform.pixel_size < MAX_PIXEL_SIZE && frame_duration > MAX_FRAME_DURATION) + ++g_platform.pixel_size; + else if (g_platform.pixel_size > MIN_PIXEL_SIZE && frame_duration < MIN_FRAME_DURATION) + --g_platform.pixel_size; } } @@ -1809,7 +1856,6 @@ void p_clipboard_write(i64 size, c8 *data) { static i32 _frame_width = 0; static i32 _frame_height = 0; -static i32 _pixel_size = 0; static i32 _num_events = 0; static i32 _input_size = 0; static b8 _wait_events = 0; @@ -1817,6 +1863,7 @@ static i64 _timeout = 0; static i64 _sound_position = 0; static i64 _sound_read = 0; +static u16 _key_map [MAX_NUM_KEYS] = {0}; static c8 _href [4096] = {0}; static u32 _pixels_scaled [MAX_NUM_PIXELS] = {0}; static u32 _pixels_internal [MAX_NUM_PIXELS] = {0}; @@ -1948,6 +1995,129 @@ void p_queue_sound(i64 delay_in_samples, i64 num_samples, f32 *frames) { } } +__attribute__((export_name("js_max_num_keys"))) i32 js_max_num_keys(void) { + return MAX_NUM_KEYS; +} + +__attribute__((export_name("js_key_map"))) void *js_key_map(void) { + i32 n = 0; + + _key_map[n++] = KEY_BACKSPACE; + _key_map[n++] = KEY_TAB; + _key_map[n++] = KEY_ENTER; + _key_map[n++] = KEY_LCTRL; + _key_map[n++] = KEY_RCTRL; + _key_map[n++] = KEY_LSHIFT; + _key_map[n++] = KEY_RSHIFT; + _key_map[n++] = KEY_LALT; + _key_map[n++] = KEY_RALT; + _key_map[n++] = KEY_LEFT; + _key_map[n++] = KEY_RIGHT; + _key_map[n++] = KEY_UP; + _key_map[n++] = KEY_DOWN; + _key_map[n++] = KEY_PAUSE; + _key_map[n++] = KEY_INSERT; + _key_map[n++] = KEY_HOME; + _key_map[n++] = KEY_END; + _key_map[n++] = KEY_PAGEUP; + _key_map[n++] = KEY_PAGEDOWN; + _key_map[n++] = KEY_ESCAPE; + _key_map[n++] = KEY_PRINTSCREEN; + _key_map[n++] = KEY_SPACE; + _key_map[n++] = KEY_LMETA; + _key_map[n++] = KEY_RMETA; + _key_map[n++] = KEY_QUOTE; + _key_map[n++] = KEY_COMMA; + _key_map[n++] = KEY_MINUS; + _key_map[n++] = KEY_PERIOD; + _key_map[n++] = KEY_SLASH; + _key_map[n++] = KEY_0; + _key_map[n++] = KEY_1; + _key_map[n++] = KEY_2; + _key_map[n++] = KEY_3; + _key_map[n++] = KEY_4; + _key_map[n++] = KEY_5; + _key_map[n++] = KEY_6; + _key_map[n++] = KEY_7; + _key_map[n++] = KEY_8; + _key_map[n++] = KEY_9; + _key_map[n++] = KEY_COLON; + _key_map[n++] = KEY_EQUAL; + _key_map[n++] = KEY_LBRACE; + _key_map[n++] = KEY_BACKSLASH; + _key_map[n++] = KEY_RBRACE; + _key_map[n++] = KEY_TILDE; + _key_map[n++] = KEY_A; + _key_map[n++] = KEY_B; + _key_map[n++] = KEY_C; + _key_map[n++] = KEY_D; + _key_map[n++] = KEY_E; + _key_map[n++] = KEY_F; + _key_map[n++] = KEY_G; + _key_map[n++] = KEY_H; + _key_map[n++] = KEY_I; + _key_map[n++] = KEY_J; + _key_map[n++] = KEY_K; + _key_map[n++] = KEY_L; + _key_map[n++] = KEY_M; + _key_map[n++] = KEY_N; + _key_map[n++] = KEY_O; + _key_map[n++] = KEY_P; + _key_map[n++] = KEY_Q; + _key_map[n++] = KEY_R; + _key_map[n++] = KEY_S; + _key_map[n++] = KEY_T; + _key_map[n++] = KEY_U; + _key_map[n++] = KEY_V; + _key_map[n++] = KEY_W; + _key_map[n++] = KEY_X; + _key_map[n++] = KEY_Y; + _key_map[n++] = KEY_Z; + _key_map[n++] = KEY_DELETE; + _key_map[n++] = KEY_F1; + _key_map[n++] = KEY_F2; + _key_map[n++] = KEY_F3; + _key_map[n++] = KEY_F4; + _key_map[n++] = KEY_F5; + _key_map[n++] = KEY_F6; + _key_map[n++] = KEY_F7; + _key_map[n++] = KEY_F8; + _key_map[n++] = KEY_F9; + _key_map[n++] = KEY_F10; + _key_map[n++] = KEY_F11; + _key_map[n++] = KEY_F12; + _key_map[n++] = KEY_F13; + _key_map[n++] = KEY_F14; + _key_map[n++] = KEY_F15; + _key_map[n++] = KEY_F16; + _key_map[n++] = KEY_F17; + _key_map[n++] = KEY_F18; + _key_map[n++] = KEY_F19; + _key_map[n++] = KEY_F20; + _key_map[n++] = KEY_F21; + _key_map[n++] = KEY_F22; + _key_map[n++] = KEY_F23; + _key_map[n++] = KEY_F24; + + return _key_map; +} + +__attribute__((export_name("js_sound_sample_rate"))) f64 js_sound_sample_rate(void) { + return (f64) SOUND_SAMPLE_RATE; +} + +__attribute__((export_name("js_num_sound_channels"))) i32 js_num_sound_channels(void) { + return NUM_SOUND_CHANNELS; +} + +__attribute__((export_name("js_max_num_sound_frames"))) i32 js_max_num_sound_frames(void) { + return MAX_NUM_SOUND_FRAMES; +} + +__attribute__((export_name("js_sound_buffer"))) void *js_sound_buffer(void) { + return _sound_buffer; +} + __attribute__((export_name("js_href"))) void *js_href(void) { return _href; } @@ -1974,29 +2144,32 @@ __attribute__((export_name("js_frame"))) void js_frame(i32 frame_width, i32 fram if (frame_width > 0 && frame_height > 0 && frame_width * frame_height <= MAX_NUM_PIXELS) { _frame_width = frame_width; _frame_height = frame_height; + } - i32 width = _frame_width; - i32 height = _frame_height; + i32 width = _frame_width; + i32 height = _frame_height; - if (_pixel_size <= MIN_PIXEL_SIZE) - _pixel_size = MIN_PIXEL_SIZE; + if (g_platform.pixel_size <= 0) + g_platform.pixel_size = DEFAULT_PIXEL_SIZE; - if (_pixel_size > 1) { - width = (i32) floor(((f64) _frame_width) / _pixel_size + .5); - height = (i32) floor(((f64) _frame_height) / _pixel_size + .5); - } + if (g_platform.pixel_size <= MIN_PIXEL_SIZE) + g_platform.pixel_size = MIN_PIXEL_SIZE; - if (g_platform.real_width != _frame_width || g_platform.real_height != _frame_height) { - ++_num_events; - g_platform.real_width = frame_width; - g_platform.real_height = frame_height; - } + if (g_platform.pixel_size > 1) { + width = (i32) floor(((f64) _frame_width) / g_platform.pixel_size + .5); + height = (i32) floor(((f64) _frame_height) / g_platform.pixel_size + .5); + } - if (g_platform.frame_width != width || g_platform.frame_height != height) { - ++_num_events; - g_platform.frame_width = width; - g_platform.frame_height = height; - } + if (g_platform.real_width != _frame_width || g_platform.real_height != _frame_height) { + ++_num_events; + g_platform.real_width = _frame_width; + g_platform.real_height = _frame_height; + } + + if (g_platform.frame_width != width || g_platform.frame_height != height) { + ++_num_events; + g_platform.frame_width = width; + g_platform.frame_height = height; } g_platform.done = 0; @@ -2021,10 +2194,10 @@ __attribute__((export_name("js_frame"))) void js_frame(i32 frame_width, i32 fram if (!g_platform.exact_resolution && do_render) { i64 frame_duration = p_time() - frame_time; - if (_pixel_size < MAX_PIXEL_SIZE && frame_duration > MAX_FRAME_DURATION) - ++_pixel_size; - else if (_pixel_size > MIN_PIXEL_SIZE && frame_duration < MIN_FRAME_DURATION) - --_pixel_size; + if (g_platform.pixel_size < MAX_PIXEL_SIZE && frame_duration > MAX_FRAME_DURATION) + ++g_platform.pixel_size; + else if (g_platform.pixel_size > MIN_PIXEL_SIZE && frame_duration < MIN_FRAME_DURATION) + --g_platform.pixel_size; } } @@ -2081,22 +2254,6 @@ __attribute__((export_name("js_keyup"))) void js_keyup(u32 key, u32 mod) { g_platform.key_down[MOD_META] = (mod & 8) ? 1 : 0; } -__attribute__((export_name("js_sample_rate"))) f64 js_sample_rate(void) { - return (f64) SOUND_SAMPLE_RATE; -} - -__attribute__((export_name("js_num_sound_channels"))) i32 js_num_sound_channels(void) { - return NUM_SOUND_CHANNELS; -} - -__attribute__((export_name("js_max_num_sound_frames"))) i32 js_max_num_sound_frames(void) { - return MAX_NUM_SOUND_FRAMES; -} - -__attribute__((export_name("js_sound_buffer"))) void *js_sound_buffer(void) { - return _sound_buffer; -} - __attribute__((export_name("js_clipboard_size"))) i32 js_clipboard_size(void) { return g_platform.clipboard_size; } |