/* * Copyright 2022-2023 Frederico de Oliveira Linhares * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef CANDY_GEAR_CORE_H #define CANDY_GEAR_CORE_H 1 #define CANDY_GEAR_VERSION_MAJOR 0 #define CANDY_GEAR_VERSION_MINOR 1 #define CANDY_GEAR_VERSION_PATCH 0 #define DATA_DIR "/usr/local/share/candy_gear" #include #include #include #include #include #include #include #include #define SDL_MAIN_HANDLED #include #include #include #include #include FT_FREETYPE_H #include "command.hpp" #include "job_queue.hpp" #include "log.hpp" #include "worker.hpp" #include "vk/device.hpp" #include "vk/descriptor_set_layout.hpp" #include "vk/render_pass.hpp" #include "vk/framebuffer.hpp" #include "vk/graphics_pipeline_2d_solid_layout.hpp" #include "vk/graphics_pipeline_2d_wired_layout.hpp" #include "vk/light.hpp" #include "vk/graphics_pipeline_2d_solid.hpp" #include "vk/graphics_pipeline_2d_wired.hpp" #include "vk/graphics_pipeline_3d_layout.hpp" #include "vk/graphics_pipeline_3d.hpp" #include "vk/graphics_pipeline_3d_skeletal.hpp" #include "vk/graphics_pipeline_sprite_3d.hpp" #include "vk/renderer.hpp" #include "vk/swapchain.hpp" extern std::random_device random_seed; extern std::mt19937 random_number_generator; /** * The Core class stores all global states that the engine needs to work. * Global variables are not evil if you use them carefully. */ struct cg_sCore { static const CommandChain loader; Log::Logger log; JobQueue job_queue; std::vector workers; std::vector threads; mrb_state *mrb; std::string game_file; /// mruby symbols mrb_sym sym_config, sym_debug, sym_error, sym_fatal, sym_information, sym_init, sym_key_down, sym_key_up, sym_quit, sym_tick, sym_trace, sym_warning; /// Text displayed in the game window. std::string game_name; /** * @{ * This is the ammount of pixel that the games uses when rendering to the * screen. */ uint32_t display_width, display_height; /// @} int game_version_major, game_version_minor, game_version_patch; Uint32 fps; std::chrono::duration max_frame_duration; float delta_time; SDL_Window *window; FT_Library font_library; VkSurfaceKHR window_surface; VkInstance vk_instance; #ifdef DEBUG VkDebugUtilsMessengerEXT vk_callback; #endif // Vulkan devices. std::vector vk_devices; VK::Device *vk_device_with_swapchain; VK::Swapchain *vk_swapchain; VK::Framebuffer *vk_framebuffer; VK::RenderPass *vk_render_pass; VK::DescriptorSetLayout *vk_descriptor_set_layout; VK::GraphicsPipeline3DLayout *vk_graphics_pipeline_3d_layout; VK::GraphicsPipeline2DSolidLayout *vk_graphics_pipeline_2d_solid_layout; VK::GraphicsPipeline2DWiredLayout *vk_graphics_pipeline_2d_wired_layout; VK::Light *vk_light; std::unique_ptr vk_graphics_pipeline_3d; std::unique_ptr vk_graphics_pipeline_3d_skeletal; std::unique_ptr vk_graphics_pipeline_sprite_3d; std::unique_ptr vk_graphics_pipeline_2d_solid; std::unique_ptr vk_graphics_pipeline_2d_wired; VK::Renderer *vk_renderer; bool quit_game; }; extern cg_sCore cg_core; #endif /* CANDY_GEAR_CORE_H */