#include <@APP_INCLUDE@> #include #include #include "engine.hpp" #include "file.hpp" #include "gfx_webgpu.hpp" #include "platform.hpp" #include "string_utils.hpp" @APP_CLASS@* app = nullptr; GFX* gfx_interface = nullptr; EM_BOOL draw(double time, void* userData) { engine->update(time); engine->begin_frame(time); engine->render((void*)1); engine->end_frame(); return true; } extern "C" int __main__(int argc, char* argv[]) { engine = new prism::engine(argc, argv); GFXCreateInfo info = {}; gfx_interface = new GFXWebGPU(); if (gfx_interface->initialize(info)) { engine->set_gfx(gfx_interface); } else { return -1; } app = new @APP_CLASS@(); app_main(engine); engine->set_app(app); engine->add_window((void*)1, (void*)1, {100, 100}); app->initialize_render(); emscripten_request_animation_frame_loop(draw, nullptr); return 0; } void platform::capture_mouse(const bool capture) {} PlatformTheme platform::get_theme() { return PlatformTheme::Light; } void platform::begin_text_input() {} void platform::end_text_input() {} void* platform::create_surface(window_ptr window, void* surface_creation_info) { return nullptr; } void* platform::get_next_image(window_ptr window) { return nullptr; } bool platform::is_main_window(platform::window_ptr index) { return true; } void* platform::get_context_information() { return nullptr; } bool platform::supports_context(GFXContext context) { return true; } void platform::show_window(const platform::window_ptr index) {} bool platform::supports_feature(const PlatformFeature feature) { return false; } prism::Offset platform::get_cursor_position() { return {0, 0}; } std::tuple platform::get_right_stick_position() { return {0, 0}; } std::tuple platform::get_left_stick_position() { return {0, 0}; } bool platform::get_key_down(InputButton key) { return false; } platform::window_ptr platform::open_window(const std::string_view title, const prism::Rectangle rect, const WindowFlags flags) { return (void*)1; } void platform::set_window_title(const platform::window_ptr index, const std::string_view title) {} bool platform::is_window_focused(const platform::window_ptr index) { return true; } void platform::set_window_focused(const platform::window_ptr index) {} prism::Extent platform::get_window_size(const platform::window_ptr index) { return {100, 100}; } prism::Extent platform::get_window_drawable_size(const platform::window_ptr index) { return {100, 100}; } prism::Offset platform::get_window_position(const platform::window_ptr index) { return {0, 0}; } void platform::set_window_size(const platform::window_ptr index, const prism::Extent extent) {} void platform::set_window_position(const platform::window_ptr index, const prism::Offset offset) {} void platform::close_window(const platform::window_ptr index) {} int platform::get_keycode(const InputButton button) { return 0; } prism::Rectangle platform::get_monitor_resolution() { return {0, 0, 100, 100}; } prism::Rectangle platform::get_monitor_work_area() { return {0, 0, 100, 100}; } prism::Offset platform::get_screen_cursor_position() { return {0, 0}; } bool platform::get_mouse_button_down(const int index) { return false; } float platform::get_monitor_dpi() { return 1.0f; } std::tuple platform::get_wheel_delta() { return {0, 0}; } const char* platform::get_name() { return "Web"; } void prism::set_domain_path(const prism::domain domain, const prism::path& path) { domain_data[(int)domain] = replace_substring(path.string(), "{resource_dir}/", ""); } prism::path prism::get_writeable_directory() {}