#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() {}