[wip, win32] wip implementing missing win32 platform functions

This commit is contained in:
martinfouilleul 2023-06-16 20:07:26 +02:00
parent e884b14b25
commit f5f7c5d8ff
4 changed files with 133 additions and 82 deletions

@ -1 +1 @@
Subproject commit 6499bcd2a213028577f9543f50e84563a6695141 Subproject commit e93bf76adcf8e26b4d039da1066847bdf7b80d1f

View File

@ -35,7 +35,7 @@ io_cmp orca_io_wait_single_req(io_req* wasmReq)
{ {
//NOTE: change root to app local folder //NOTE: change root to app local folder
req.handle = orca->rootDir; req.handle = orca->rootDir;
req.openFlags |= FILE_OPEN_RESTRICT; req.open.flags |= FILE_OPEN_RESTRICT;
} }
} }
cmp = io_wait_single_req_with_table(&req, &orca->fileTable); cmp = io_wait_single_req_with_table(&req, &orca->fileTable);

View File

@ -357,7 +357,7 @@ void* orca_runloop(void* user)
M3Result res = m3_CompileModule(app->runtime.m3Module); M3Result res = m3_CompileModule(app->runtime.m3Module);
if(res) if(res)
{ {
M3ErrorInfo errInfo = {}; M3ErrorInfo errInfo = {0};
m3_GetErrorInfo(app->runtime.m3Runtime, &errInfo); m3_GetErrorInfo(app->runtime.m3Runtime, &errInfo);
log_error("wasm error: %s\n", errInfo.message); log_error("wasm error: %s\n", errInfo.message);
@ -424,7 +424,7 @@ void* orca_runloop(void* user)
str8 localRootPath = path_executable_relative(mem_scratch(), STR8("../app/data")); str8 localRootPath = path_executable_relative(mem_scratch(), STR8("../app/data"));
io_req req = {.op = IO_OP_OPEN_AT, io_req req = {.op = IO_OP_OPEN_AT,
.openFlags = FILE_OPEN_READ, .open.rights = FILE_ACCESS_READ,
.size = localRootPath.len, .size = localRootPath.len,
.buffer = localRootPath.ptr}; .buffer = localRootPath.ptr};
io_cmp cmp = io_wait_single_req_with_table(&req, &app->fileTable); io_cmp cmp = io_wait_single_req_with_table(&req, &app->fileTable);

View File

@ -1,78 +1,129 @@
/************************************************************//** /************************************************************//**
* *
* @file: orca_runtime.h * @file: orca_runtime.h
* @author: Martin Fouilleul * @author: Martin Fouilleul
* @date: 17/04/2023 * @date: 17/04/2023
* *
*****************************************************************/ *****************************************************************/
#ifndef __ORCA_RUNTIME_H_ #ifndef __ORCA_RUNTIME_H_
#define __ORCA_RUNTIME_H_ #define __ORCA_RUNTIME_H_
#include"wasm3.h" #include"platform/platform_io_internal.h"
#include"m3_env.h"
#include"m3_compile.h" #include"wasm3.h"
#include"m3_env.h"
#define G_EVENTS(X) \ #include"m3_compile.h"
X(G_EVENT_START, "OnInit", "", "") \
X(G_EVENT_MOUSE_DOWN, "OnMouseDown", "", "i") \ #define G_EVENTS(X) \
X(G_EVENT_MOUSE_UP, "OnMouseUp", "", "i") \ X(G_EVENT_START, "OnInit", "", "") \
X(G_EVENT_MOUSE_ENTER, "OnMouseEnter", "", "") \ X(G_EVENT_MOUSE_DOWN, "OnMouseDown", "", "i") \
X(G_EVENT_MOUSE_LEAVE, "OnMouseLeave", "", "") \ X(G_EVENT_MOUSE_UP, "OnMouseUp", "", "i") \
X(G_EVENT_MOUSE_MOVE, "OnMouseMove", "", "ffff") \ X(G_EVENT_MOUSE_ENTER, "OnMouseEnter", "", "") \
X(G_EVENT_MOUSE_WHEEL, "OnMouseWheel", "", "ff") \ X(G_EVENT_MOUSE_LEAVE, "OnMouseLeave", "", "") \
X(G_EVENT_KEY_DOWN, "OnKeyDown", "", "i") \ X(G_EVENT_MOUSE_MOVE, "OnMouseMove", "", "ffff") \
X(G_EVENT_KEY_UP, "OnKeyUp", "", "i") \ X(G_EVENT_MOUSE_WHEEL, "OnMouseWheel", "", "ff") \
X(G_EVENT_FRAME_REFRESH, "OnFrameRefresh", "", "") \ X(G_EVENT_KEY_DOWN, "OnKeyDown", "", "i") \
X(G_EVENT_FRAME_RESIZE, "OnFrameResize", "", "ii") X(G_EVENT_KEY_UP, "OnKeyUp", "", "i") \
X(G_EVENT_FRAME_REFRESH, "OnFrameRefresh", "", "") \
typedef enum { X(G_EVENT_FRAME_RESIZE, "OnFrameResize", "", "ii")
#define G_EVENT_KIND(kind, ...) kind,
G_EVENTS(G_EVENT_KIND) typedef enum {
G_EVENT_COUNT #define G_EVENT_KIND(kind, ...) kind,
} guest_event_kind; G_EVENTS(G_EVENT_KIND)
G_EVENT_COUNT
} guest_event_kind;
typedef struct g_event_handler_desc
{
str8 name; typedef struct g_event_handler_desc
str8 retTags; {
str8 argTags; str8 name;
} g_event_handler_desc; str8 retTags;
str8 argTags;
const g_event_handler_desc G_EVENT_HANDLER_DESC[] = { } g_event_handler_desc;
#define STR8LIT(s) {sizeof(s), s} //NOTE: msvc doesn't accept STR8(s) as compile-time constant... const g_event_handler_desc G_EVENT_HANDLER_DESC[] = {
#define G_EVENT_HANDLER_DESC_ENTRY(kind, name, rets, args) {STR8LIT(name), STR8LIT(rets), STR8LIT(args)}, #define STR8LIT(s) {sizeof(s), s} //NOTE: msvc doesn't accept STR8(s) as compile-time constant...
#define G_EVENT_HANDLER_DESC_ENTRY(kind, name, rets, args) {STR8LIT(name), STR8LIT(rets), STR8LIT(args)},
G_EVENTS(G_EVENT_HANDLER_DESC_ENTRY)
G_EVENTS(G_EVENT_HANDLER_DESC_ENTRY)
#undef G_EVENT_HANDLER_DESC_ENTRY
#undef STR8LIT #undef G_EVENT_HANDLER_DESC_ENTRY
}; #undef STR8LIT
};
typedef struct wasm_memory
{ typedef struct wasm_memory
char* ptr; {
u64 reserved; char* ptr;
u64 committed; u64 reserved;
u64 committed;
} wasm_memory;
} wasm_memory;
typedef struct orca_runtime
{ typedef struct orca_runtime
str8 wasmBytecode; {
wasm_memory wasmMemory; str8 wasmBytecode;
wasm_memory wasmMemory;
// wasm3 data
IM3Environment m3Env; // wasm3 data
IM3Runtime m3Runtime; IM3Environment m3Env;
IM3Module m3Module; IM3Runtime m3Runtime;
IM3Function eventHandlers[G_EVENT_COUNT]; IM3Module m3Module;
IM3Function eventHandlers[G_EVENT_COUNT];
} orca_runtime;
} orca_runtime;
orca_runtime* orca_runtime_get(); typedef struct log_entry
{
list_elt listElt;
#endif //__ORCA_RUNTIME_H_ u64 cap;
log_level level;
str8 file;
str8 function;
int line;
str8 msg;
u64 recordIndex;
} log_entry;
typedef struct orca_debug_overlay
{
bool show;
mg_surface surface;
mg_canvas canvas;
mg_font fontReg;
mg_font fontBold;
ui_context ui;
mem_arena logArena;
list_info logEntries;
list_info logFreeList;
u32 entryCount;
u32 maxEntries;
u64 logEntryTotalCount;
bool logScrollToLast;
} orca_debug_overlay;
typedef struct orca_app
{
mp_window window;
mg_surface surface;
mg_canvas canvas;
file_table fileTable;
file_handle rootDir;
orca_runtime runtime;
orca_debug_overlay debugOverlay;
} orca_app;
orca_app* orca_app_get();
orca_runtime* orca_runtime_get();
#endif //__ORCA_RUNTIME_H_