Compare commits

...

4 Commits

Author SHA1 Message Date
1ffee9933a improve plugin api further 2024-05-22 16:22:24 +02:00
aaa23194c5 provide imgui allocator to plugins 2024-05-22 15:19:50 +02:00
013d1fef3b error message on plugin load fail 2024-05-18 14:04:43 +02:00
35026dfa0f try improve entt across-boundry support 2024-05-18 12:29:45 +02:00
4 changed files with 53 additions and 3 deletions

View File

@ -38,6 +38,10 @@ if (TOMATO_ASAN)
endif()
endif()
# uggly, but it needs to be defined for all of tomato.
# but this also means that we can not compile tomato in the same cmake as plugins
add_compile_definitions(ENTT_API_EXPORT)
# external libs
add_subdirectory(./external) # before increasing warn levels, sad :(

View File

@ -105,3 +105,8 @@ target_link_libraries(tomato PUBLIC
SDL3_image::SDL3_image
)
# probably not enough
#target_compile_definitions(tomato PUBLIC ENTT_API_EXPORT)
set_target_properties(tomato PROPERTIES POSITION_INDEPENDENT_CODE ON)

View File

@ -73,15 +73,56 @@ MainScreen::MainScreen(SDL_Renderer* renderer_, Theme& theme_, std::string save_
// TODO: pm?
// graphics
g_provideInstance("ImGuiContext", ImGui::GetVersion(), "host", ImGui::GetCurrentContext());
g_provideInstance<ImGuiContext>("ImGuiContext", ImGui::GetVersion(), "host", ImGui::GetCurrentContext());
{
ImGuiMemAllocFunc alloc_func = nullptr;
ImGuiMemFreeFunc free_func = nullptr;
void* user_data = nullptr;
ImGui::GetAllocatorFunctions(&alloc_func, &free_func, &user_data);
// function pointers are funky
g_provideInstance("ImGuiMemAllocFunc", ImGui::GetVersion(), "host", reinterpret_cast<void*>(alloc_func));
g_provideInstance("ImGuiMemFreeFunc", ImGui::GetVersion(), "host", reinterpret_cast<void*>(free_func));
if (user_data != nullptr) { // dont register nullptrs (can be valid, we rely on the other 2 pointers to indicate)
g_provideInstance("ImGuiMemUserData", ImGui::GetVersion(), "host", user_data);
}
}
g_provideInstance<TextureUploaderI>("TextureUploaderI", "host", &sdlrtu);
}
for (const auto& ppath : plugins) {
if (!pm.add(ppath)) {
std::cerr << "MS error: loading plugin '" << ppath << "' failed!\n";
// thow?
assert(false && "failed to load plugin");
//assert(false && "failed to load plugin");
SDL_MessageBoxData mb;
mb.flags = SDL_MESSAGEBOX_ERROR;
mb.window = nullptr;
mb.title = "Tomato failed to load a plugin!";
std::string message {"Failed to load plugin '"};
message += ppath;
message += "' !";
mb.message = message.c_str();
mb.numbuttons = 2;
SDL_MessageBoxButtonData mb_buttons[2] {};
mb_buttons[0].buttonID = 1;
mb_buttons[0].flags = SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT;
mb_buttons[0].text = "Abort";
mb_buttons[1].buttonID = 2;
mb_buttons[1].flags = SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT;
mb_buttons[1].text = "Continue Anyway";
mb.buttons = mb_buttons;
mb.colorScheme = nullptr;
int button_id = 0;
SDL_ShowMessageBox(&mb, &button_id);
if (button_id == 1) {
exit(1);
}
}
}