diff options
Diffstat (limited to 'src/core.cpp')
-rw-r--r-- | src/core.cpp | 748 |
1 files changed, 148 insertions, 600 deletions
diff --git a/src/core.cpp b/src/core.cpp index f524e36..7e5253b 100644 --- a/src/core.cpp +++ b/src/core.cpp @@ -38,62 +38,9 @@ #include <sstream> #endif -std::random_device random_seed; -std::mt19937 random_number_generator; - namespace { -#ifdef DEBUG -VKAPI_ATTR VkBool32 VKAPI_CALL -vk_debug_callback( - VkDebugUtilsMessageSeverityFlagBitsEXT message_severity, - VkDebugUtilsMessageTypeFlagsEXT message_type, - const VkDebugUtilsMessengerCallbackDataEXT* callback_data, - void* _obj) -{ - // Set level. - Log::Level log_level; - switch(message_severity) - { - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT: - log_level = Log::Level::Trace; - break; - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT: - log_level = Log::Level::Information; - break; - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: - log_level = Log::Level::Warning; - break; - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: - default: - log_level = Log::Level::Error; - break; - } - - // Log message. - cg_core.log.message(log_level, callback_data->pMessage); - - return VK_FALSE; -} -#endif - -void -load_threads(void *obj) -{ - auto num_threads{std::thread::hardware_concurrency() - 1}; - for(auto i{0}; i < num_threads; i++) - cg_core.threads.emplace_back( - cg_core.workers.emplace_back(&cg_core.job_queue)); -} - -void -unload_threads(void *obj) -{ - cg_core.job_queue.stop(); - for(auto &t: cg_core.threads) t.join(); -} - void load_mruby_symbols(void *obj) { @@ -114,27 +61,24 @@ load_mruby_symbols(void *obj) void load_game(void *obj) { - using namespace std::chrono; - FILE *fp; mrb_value main_obj{mrb_top_self(cg_core.mrb)}; - cg_core.game_name = "CandyGear Game"; + BluCat::core.game_name = "CandyGear Game"; - cg_core.display_width = 800; - cg_core.display_height = 600; + BluCat::core.display_width = 800; + BluCat::core.display_height = 600; - cg_core.game_version_major = 0; - cg_core.game_version_minor = 1; - cg_core.game_version_patch = 0; + BluCat::core.game_version_major = 0; + BluCat::core.game_version_minor = 1; + BluCat::core.game_version_patch = 0; - cg_core.fps = 30; + BluCat::core.fps = 30; mrb_define_module(cg_core.mrb, "CandyGear"); cg_candy_gear_init_config(cg_core.mrb); cg_graphic_init_config(cg_core.mrb); - fp = fopen(cg_core.game_file.c_str(), "rb"); mrb_load_irep_file(cg_core.mrb, fp); fclose(fp); @@ -153,11 +97,6 @@ load_game(void *obj) cg_candy_gear_finish_config(cg_core.mrb); cg_graphic_finish_config(cg_core.mrb); - - cg_core.max_frame_duration = - duration<long long, std::milli>(1000 / cg_core.fps); - // FIXME: actually calculates the real delta time. - cg_core.delta_time = 1.0f / cg_core.fps; } void @@ -227,8 +166,9 @@ load_window(void *obj) { cg_core.window = NULL; cg_core.window = SDL_CreateWindow( - cg_core.game_name.c_str(), SDL_WINDOWPOS_UNDEFINED, - SDL_WINDOWPOS_UNDEFINED, cg_core.display_width, cg_core.display_height, + BluCat::core.game_name.c_str(), + SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, + BluCat::core.display_width, BluCat::core.display_height, SDL_WINDOW_VULKAN); if(cg_core.window == NULL) { @@ -245,168 +185,156 @@ unload_window(void *obj) } void -load_font_library(void *obj) -{ - FT_Error error{FT_Init_FreeType(&cg_core.font_library)}; - if(error) throw CommandError{"Failed to open the FreeType library."}; -} - -void -unload_font_library(void *obj) -{ - FT_Done_FreeType(cg_core.font_library); -} - -void -load_blucat_instance(void *obj) +load_vk_instance(void *obj) { - std::vector<const char*> vk_extensions; - std::vector<const char*> vk_required_layers_names; + std::vector<const char*> vk_extensions; + std::vector<const char*> vk_required_layers_names; - // Get extensions. - { - uint32_t vk_extensions_count; - std::vector<const char*> vk_required_extensions; + // Get extensions. + { + uint32_t vk_extensions_count; + std::vector<const char*> vk_required_extensions; - // Load debuging layers. + // Load debuging layers. #ifdef DEBUG - vk_required_extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); - vk_required_layers_names.push_back("VK_LAYER_KHRONOS_validation"); + vk_required_extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + vk_required_layers_names.push_back("VK_LAYER_KHRONOS_validation"); #endif - // Get extensions for SDL. - { - uint32_t vk_sdl_extension_count; - std::vector<const char*> vk_sdl_extensions; - - if(!SDL_Vulkan_GetInstanceExtensions( - cg_core.window, &vk_sdl_extension_count, nullptr)) - { - std::string error{ - "Vulkan extensions could not be loaded by SDL! SDL_Error: "}; - error += SDL_GetError(); - throw CommandError{error}; - } - - vk_sdl_extensions.resize(vk_sdl_extension_count); - SDL_Vulkan_GetInstanceExtensions( - cg_core.window, &vk_sdl_extension_count, vk_sdl_extensions.data()); - - // Combine all extensions. - vk_extensions_count = vk_sdl_extension_count + - vk_required_extensions.size(); - vk_extensions.resize(vk_extensions_count); - for(auto i{0}; i < vk_sdl_extension_count; i++) - vk_extensions[i] = vk_sdl_extensions[i]; - for(auto i{0}; i < vk_required_extensions.size(); i++) - vk_extensions[i + vk_sdl_extension_count] = vk_required_extensions[i]; - } + // Get extensions for SDL. + { + uint32_t vk_sdl_extension_count; + std::vector<const char*> vk_sdl_extensions; + + if(!SDL_Vulkan_GetInstanceExtensions( + cg_core.window, &vk_sdl_extension_count, nullptr)) + { + std::string error{ + "Vulkan extensions could not be loaded by SDL! SDL_Error: "}; + error += SDL_GetError(); + throw CommandError{error}; + } + + vk_sdl_extensions.resize(vk_sdl_extension_count); + SDL_Vulkan_GetInstanceExtensions( + cg_core.window, &vk_sdl_extension_count, vk_sdl_extensions.data()); + + // Combine all extensions. + vk_extensions_count = vk_sdl_extension_count + + vk_required_extensions.size(); + vk_extensions.resize(vk_extensions_count); + for(auto i{0}; i < vk_sdl_extension_count; i++) + vk_extensions[i] = vk_sdl_extensions[i]; + for(auto i{0}; i < vk_required_extensions.size(); i++) + vk_extensions[i + vk_sdl_extension_count] = vk_required_extensions[i]; + } #ifdef DEBUG - cg_core.log.message(Log::Level::Trace, "Enabled VK extensions."); - for(auto vk_extension: vk_extensions) - { - std::string message{"Extension name: "}; - message += vk_extension; - cg_core.log.message(Log::Level::Trace, message); - } + BluCat::core.log.message(Log::Level::Trace, "Enabled VK extensions."); + for(auto vk_extension: vk_extensions) + { + std::string message{"Extension name: "}; + message += vk_extension; + BluCat::core.log.message(Log::Level::Trace, message); + } #endif - } - - // Get available instance layers. - { - uint32_t vk_available_layers_count; - std::vector<VkLayerProperties> vk_available_layers; - std::vector<const char*> vk_available_layers_names; - - vkEnumerateInstanceLayerProperties(&vk_available_layers_count, nullptr); - vk_available_layers.resize(vk_available_layers_count); - vkEnumerateInstanceLayerProperties(&vk_available_layers_count, - vk_available_layers.data()); - vk_available_layers_names.resize(vk_available_layers_count); + } + + // Get available instance layers. + { + uint32_t vk_available_layers_count; + std::vector<VkLayerProperties> vk_available_layers; + std::vector<const char*> vk_available_layers_names; + + vkEnumerateInstanceLayerProperties(&vk_available_layers_count, nullptr); + vk_available_layers.resize(vk_available_layers_count); + vkEnumerateInstanceLayerProperties(&vk_available_layers_count, + vk_available_layers.data()); + vk_available_layers_names.resize(vk_available_layers_count); #ifdef DEBUG - cg_core.log.message(Log::Level::Trace, "Available VK instance layers."); + BluCat::core.log.message( + Log::Level::Trace, "Available VK instance layers."); #endif - for(uint32_t i = 0; i < vk_available_layers_count; i++) - { + for(uint32_t i = 0; i < vk_available_layers_count; i++) + { #ifdef DEBUG - std::stringstream message{}; - message << "\nname: " << vk_available_layers[i].layerName << std::endl; - message << "Description: " << vk_available_layers[i].description << - std::endl; - message << "Spec version: " << vk_available_layers[i].specVersion << - std::endl; - message << "Implementation version: " << - vk_available_layers[i].implementationVersion << std::endl; - cg_core.log.message(Log::Level::Trace, message.str()); + std::stringstream message{}; + message << "\nname: " << vk_available_layers[i].layerName << std::endl; + message << "Description: " << vk_available_layers[i].description << + std::endl; + message << "Spec version: " << vk_available_layers[i].specVersion << + std::endl; + message << "Implementation version: " << + vk_available_layers[i].implementationVersion << std::endl; + BluCat::core.log.message(Log::Level::Trace, message.str()); #endif - vk_available_layers_names[i] = vk_available_layers[i].layerName; - } - - // If required layers are not all available. - if(!std::includes( - vk_available_layers_names.begin(), vk_available_layers_names.end(), - vk_required_layers_names.begin(), vk_required_layers_names.begin())) - throw CommandError{"Some required Vulkan layers are not available."}; - } - - { - VkApplicationInfo app_info; - app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; - app_info.pNext = nullptr; - app_info.pApplicationName = cg_core.game_name.c_str(); - app_info.applicationVersion = VK_MAKE_VERSION( - cg_core.game_version_major, - cg_core.game_version_minor, - cg_core.game_version_patch); - app_info.pEngineName = "CandyGear"; - app_info.engineVersion = VK_MAKE_VERSION( - CANDY_GEAR_VERSION_MAJOR, - CANDY_GEAR_VERSION_MINOR, - CANDY_GEAR_VERSION_PATCH); - app_info.apiVersion = VK_API_VERSION_1_0; - - VkInstanceCreateInfo create_info; - create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; - create_info.pNext = nullptr; - create_info.flags = 0; - create_info.pApplicationInfo = &app_info; - create_info.enabledExtensionCount = vk_extensions.size(); - create_info.ppEnabledExtensionNames = vk_extensions.data(); - create_info.enabledLayerCount = vk_required_layers_names.size(); - create_info.ppEnabledLayerNames = vk_required_layers_names.data(); - - VkResult result = - vkCreateInstance(&create_info, nullptr, &cg_core.vk_instance); - if(result != VK_SUCCESS) - { - std::string error{""}; - switch(result) - { - case VK_ERROR_LAYER_NOT_PRESENT: - error = " Layer not present."; - break; - case VK_ERROR_EXTENSION_NOT_PRESENT: - error = " Extension not present."; - } - error = "Failed to create Vulkan instance." + error; - throw CommandError{error}; - } - } -} - -void -unload_blucat_instance(void *obj) -{ - vkDestroyInstance(cg_core.vk_instance, nullptr); + vk_available_layers_names[i] = vk_available_layers[i].layerName; + } + + // If required layers are not all available. + if(!std::includes( + vk_available_layers_names.begin(), vk_available_layers_names.end(), + vk_required_layers_names.begin(), vk_required_layers_names.begin())) + throw CommandError{"Some required Vulkan layers are not available."}; + } + + { + VkApplicationInfo app_info; + app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; + app_info.pNext = nullptr; + app_info.pApplicationName = BluCat::core.game_name.c_str(); + app_info.applicationVersion = VK_MAKE_VERSION( + BluCat::core.game_version_major, + BluCat::core.game_version_minor, + BluCat::core.game_version_patch); + app_info.pEngineName = "CandyGear"; + app_info.engineVersion = VK_MAKE_VERSION( + CANDY_GEAR_VERSION_MAJOR, + CANDY_GEAR_VERSION_MINOR, + CANDY_GEAR_VERSION_PATCH); + app_info.apiVersion = VK_API_VERSION_1_0; + + VkInstanceCreateInfo create_info; + create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + create_info.pNext = nullptr; + create_info.flags = 0; + create_info.pApplicationInfo = &app_info; + create_info.enabledExtensionCount = vk_extensions.size(); + create_info.ppEnabledExtensionNames = vk_extensions.data(); + create_info.enabledLayerCount = vk_required_layers_names.size(); + create_info.ppEnabledLayerNames = vk_required_layers_names.data(); + + VkResult result = + vkCreateInstance(&create_info, nullptr, &BluCat::core.vk_instance); + if(result != VK_SUCCESS) + { + std::string error{""}; + switch(result) + { + case VK_ERROR_LAYER_NOT_PRESENT: + error = " Layer not present."; + break; + case VK_ERROR_EXTENSION_NOT_PRESENT: + error = " Extension not present."; + } + error = "Failed to create Vulkan instance." + error; + throw CommandError{error}; + } + } +} + +void +unload_vk_instance(void *obj) +{ + vkDestroyInstance(BluCat::core.vk_instance, nullptr); } void load_window_surface(void *obj) { if(!SDL_Vulkan_CreateSurface( - cg_core.window, cg_core.vk_instance, &cg_core.window_surface)) + cg_core.window, BluCat::core.vk_instance, &BluCat::core.window_surface)) { std::string error{"Failed to create a window surface → "}; error += SDL_GetError(); @@ -417,373 +345,20 @@ load_window_surface(void *obj) void unload_window_surface(void *obj) { - vkDestroySurfaceKHR(cg_core.vk_instance, cg_core.window_surface, nullptr); -} - -#ifdef DEBUG -void -load_blucat_debug_callback(void *obj) -{ - PFN_vkCreateDebugUtilsMessengerEXT debug_messenger; - - // A Vulkan instance extension named VK_EXT_debug_utils and a Vulkan instance - // layer named VK_LAYER_LUNARG_standard_validation are required to enable - // this callback. These instance extension and instance layer are loaded at - // Instance::load_blucat_instance. - VkDebugUtilsMessengerCreateInfoEXT create_info; - create_info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; - create_info.pNext = nullptr; - create_info.messageSeverity = - VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | - VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | - VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | - VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; - create_info.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | - VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | - VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; - create_info.pfnUserCallback = vk_debug_callback; - create_info.pUserData = nullptr; - create_info.flags = 0; - - debug_messenger = (PFN_vkCreateDebugUtilsMessengerEXT) - vkGetInstanceProcAddr(cg_core.vk_instance, - "vkCreateDebugUtilsMessengerEXT"); - - if(debug_messenger(cg_core.vk_instance, &create_info, nullptr, - &cg_core.vk_callback) != VK_SUCCESS) - CommandError{"Failed to setup debug callback for Vulkan."}; -} - -void -unload_blucat_debug_callback(void *obj) -{ - PFN_vkDestroyDebugUtilsMessengerEXT debug_messenger; - - debug_messenger = (PFN_vkDestroyDebugUtilsMessengerEXT) - vkGetInstanceProcAddr(cg_core.vk_instance, - "vkDestroyDebugUtilsMessengerEXT"); - - debug_messenger(cg_core.vk_instance, cg_core.vk_callback, nullptr); -} -#endif - -void -load_blucat_devices(void *obj) -{ - uint32_t devices_count; - std::vector<VkPhysicalDevice> vk_physical_devices; - - // Enumerate physical devices - { - vkEnumeratePhysicalDevices(cg_core.vk_instance, &devices_count, nullptr); - if(devices_count < 1) - CommandError{"Failed to find GPUs with Vulkan support."}; - vk_physical_devices.resize(devices_count); - vkEnumeratePhysicalDevices( - cg_core.vk_instance, &devices_count, vk_physical_devices.data()); - } - -#ifdef DEBUG - cg_core.log.message(Log::Level::Trace, "Physical devices properties"); -#endif - - cg_core.vk_devices.reserve(devices_count); - for(auto i = 0; i < devices_count; i++) - { - // Use swapchain on first device. - if(i == 0) - { - cg_core.vk_devices.emplace_back(vk_physical_devices[i], true); - cg_core.vk_device_with_swapchain = &cg_core.vk_devices[i]; - } - else - cg_core.vk_devices.emplace_back(vk_physical_devices[i], false); - } -} - -void -unload_blucat_devices(void *obj) -{ - cg_core.vk_devices.clear(); -} - -static void -load_blucat_swapchain(void *obj) -{ - try { cg_core.vk_swapchain = new BluCat::Swapchain(); } - catch(const CommandError &error) - { - std::string error_message{"Failed to create swapchain → "}; - error_message += error.what(); - throw CommandError{error_message}; - } -} - -void -unload_blucat_swapchain(void *obj) -{ - delete cg_core.vk_swapchain; -} - -void -load_blucat_framebuffer(void *obj) -{ - try - { - cg_core.vk_framebuffer = new BluCat::Framebuffer(); - } - catch(const CommandError &e) - { - throw CommandError{"Failed to create framebuffer."}; - } -} - -void -unload_blucat_framebuffer(void *obj) -{ - delete cg_core.vk_framebuffer; -} - -void -load_blucat_render_pass(void *obj) -{ - try - { - cg_core.vk_render_pass = new BluCat::RenderPass(); - } - catch(const CommandError &e) - { - throw CommandError{"Failed to create render pass."}; - } -} - -void -unload_blucat_render_pass(void *obj) -{ - delete cg_core.vk_render_pass; -} - -void -load_blucat_descriptor_set_layout(void *obj) -{ - try - { - cg_core.vk_descriptor_set_layout = new BluCat::DescriptorSetLayout(); - } - catch(const CommandError &e) - { - throw CommandError{"Failed to create descriptor set layouts."}; - } -} - -void -unload_blucat_descriptor_set_layout(void *obj) -{ - delete cg_core.vk_descriptor_set_layout; -} - -void -load_blucat_graphics_pipeline_3d_layout(void *obj) -{ - try - { - cg_core.vk_graphics_pipeline_3d_layout = - new BluCat::GraphicsPipeline3DLayout(); - } - catch(const CommandError &e) - { - throw CommandError{"Failed to create 3d graphics pipeline."}; - } -} - -void -unload_blucat_graphics_pipeline_3d_layout(void *obj) -{ - delete cg_core.vk_graphics_pipeline_3d_layout; -} - -void -load_blucat_graphics_pipeline_2d_solid_layout(void *obj) -{ - try - { - cg_core.vk_graphics_pipeline_2d_solid_layout = - new BluCat::GraphicsPipeline2DSolidLayout(); - } - catch(const CommandError &e) - { - throw CommandError{"Failed to create 2d graphics pipeline."}; - } -} - -void -unload_blucat_graphics_pipeline_2d_solid_layout(void *obj) -{ - delete cg_core.vk_graphics_pipeline_2d_solid_layout; -} - -void -load_blucat_graphics_pipeline_2d_wired_layout(void *obj) -{ - try - { - cg_core.vk_graphics_pipeline_2d_wired_layout = - new BluCat::GraphicsPipeline2DWiredLayout(); - } - catch(const CommandError &e) - { - throw CommandError{"Failed to create 2d graphics pipeline."}; - } + vkDestroySurfaceKHR( + BluCat::core.vk_instance, BluCat::core.window_surface, nullptr); } void -unload_blucat_graphics_pipeline_2d_wired_layout(void *obj) +load_blucat(void *obj) { - delete cg_core.vk_graphics_pipeline_2d_wired_layout; + BluCat::core.loader.execute(nullptr); } void -load_blucat_light(void *obj) +unload_blucat(void *obj) { - try - { - cg_core.vk_light = new BluCat::Light(); - } - catch(const CommandError &e) - { - throw CommandError{"Failed to descriptor sets for light."}; - } -} - -void -unload_blucat_light(void *obj) -{ - delete cg_core.vk_light; -} - -void -load_blucat_graphics_pipeline_3d(void *obj) -{ - try - { - cg_core.vk_graphics_pipeline_3d = - std::make_unique<BluCat::GraphicsPipeline3D>(); - } - catch(const CommandError &e) - { - throw CommandError{"Failed to create 3d graphics pipeline."}; - } -} - -void -unload_blucat_graphics_pipeline_3d(void *obj) -{ - cg_core.vk_graphics_pipeline_3d = nullptr; -} - -void -load_blucat_graphics_pipeline_3d_skeletal(void *obj) -{ - try - { - cg_core.vk_graphics_pipeline_3d_skeletal = - std::make_unique<BluCat::GraphicsPipeline3DSkeletal>(); - } - catch(const CommandError &e) - { - throw CommandError{"Failed to create 3d skeletal graphics pipeline."}; - } -} - -void -unload_blucat_graphics_pipeline_3d_skeletal(void *obj) -{ - cg_core.vk_graphics_pipeline_3d_skeletal = nullptr; -} - -void -load_blucat_graphics_pipeline_sprite_3d(void *obj) -{ - try - { - cg_core.vk_graphics_pipeline_sprite_3d = - std::make_unique<BluCat::GraphicsPipelineSprite3D>(); - } - catch(const CommandError &e) - { - throw CommandError{"Failed to create sprite 3d graphics pipeline."}; - } -} - -void -unload_blucat_graphics_pipeline_sprite_3d(void *obj) -{ - cg_core.vk_graphics_pipeline_sprite_3d = nullptr; -} - -void -load_blucat_graphics_pipeline_2d_solid(void *obj) -{ - try - { - cg_core.vk_graphics_pipeline_2d_solid = - std::make_unique<BluCat::GraphicsPipeline2DSolid>(); - } - catch(const CommandError &e) - { - throw CommandError{"Failed to create 2d graphics pipeline."}; - } -} - -void -unload_blucat_graphics_pipeline_2d_solid(void *obj) -{ - cg_core.vk_graphics_pipeline_2d_solid = nullptr; -} - -void -load_blucat_graphics_pipeline_2d_wired(void *obj) -{ - try - { - cg_core.vk_graphics_pipeline_2d_wired = - std::make_unique<BluCat::GraphicsPipeline2DWired>(); - } - catch(const CommandError &e) - { - throw CommandError{"Failed to create 2d graphics pipeline."}; - } -} - -void -unload_blucat_graphics_pipeline_2d_wired(void *obj) -{ - cg_core.vk_graphics_pipeline_2d_wired = nullptr; -} - -void -load_blucat_renderer(void *obj) -{ - try - { - glm::vec4 region( - 0.f, 0.f, - static_cast<float>(cg_core.display_width), - static_cast<float>(cg_core.display_height)); - cg_core.vk_renderer = new BluCat::Renderer( - {}, - {std::make_shared<BluCat::View3D>(region, region.z, region.w)}); - } - catch(const CommandError &e) - { - throw CommandError{"Failed to create renderer."}; - } -} - -void -unload_blucat_renderer(void *obj) -{ - delete cg_core.vk_renderer; + BluCat::core.loader.revert(nullptr); } void @@ -810,41 +385,14 @@ load_mruby_interface(void *obj) } const CommandChain cg_sCore::loader{ - {&load_threads, &unload_threads}, {&load_mruby_symbols, nullptr}, {&load_game, nullptr}, {&load_sdl, &unload_sdl}, {&load_sdl_mixer, &unload_sdl_mixer}, {&load_sdl_open_audio, &unload_sdl_open_audio}, {&load_window, &unload_window}, - {&load_font_library, &unload_font_library}, - {&load_blucat_instance, &unload_blucat_instance}, + {&load_vk_instance, &unload_vk_instance}, {&load_window_surface, &unload_window_surface}, -#ifdef DEBUG - {&load_blucat_debug_callback, &unload_blucat_debug_callback}, -#endif - {&load_blucat_devices, &unload_blucat_devices}, - {&load_blucat_swapchain, &unload_blucat_swapchain}, - - {&load_blucat_render_pass, &unload_blucat_render_pass}, - {&load_blucat_framebuffer, &unload_blucat_framebuffer}, - {&load_blucat_descriptor_set_layout, &unload_blucat_descriptor_set_layout}, - {&load_blucat_graphics_pipeline_3d_layout, - &unload_blucat_graphics_pipeline_3d_layout}, - {&load_blucat_graphics_pipeline_2d_solid_layout, - &unload_blucat_graphics_pipeline_2d_solid_layout}, - {&load_blucat_graphics_pipeline_2d_wired_layout, - &unload_blucat_graphics_pipeline_2d_wired_layout}, - {&load_blucat_light, &unload_blucat_light}, - // TODO: finish skeletal mesh animation - {&load_blucat_graphics_pipeline_3d_skeletal, - &unload_blucat_graphics_pipeline_3d_skeletal}, - {&load_blucat_graphics_pipeline_3d, &unload_blucat_graphics_pipeline_3d}, - {&load_blucat_graphics_pipeline_sprite_3d, - &unload_blucat_graphics_pipeline_sprite_3d}, - {&load_blucat_graphics_pipeline_2d_solid, &unload_blucat_graphics_pipeline_2d_solid}, - {&load_blucat_graphics_pipeline_2d_wired, &unload_blucat_graphics_pipeline_2d_wired}, - - {&load_blucat_renderer, &unload_blucat_renderer}, + {&load_blucat, &unload_blucat}, {&load_mruby_interface, nullptr} }; |