summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitya Selivanov <automainint@guattari.tech>2025-01-15 00:47:52 +0100
committerMitya Selivanov <automainint@guattari.tech>2025-01-15 00:47:52 +0100
commitfe6c2a13cb0d4819f05fb5867f8619e54c5b9191 (patch)
tree0725fdd3241ac8d1249fe0cfd1d4051b2ee2693e
parenta14a2e0d933e64b1c28b45ac10e651af7f749b3e (diff)
downloadreduced_system_layer-fe6c2a13cb0d4819f05fb5867f8619e54c5b9191.zip
Defaults in web; Drop file interface
-rw-r--r--index.htm267
-rwxr-xr-xreduced_system_layer.c283
2 files changed, 380 insertions, 170 deletions
diff --git a/index.htm b/index.htm
index 0e5b1fb..d426609 100644
--- a/index.htm
+++ b/index.htm
@@ -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;
}