summaryrefslogtreecommitdiff
path: root/src/core.hpp
diff options
context:
space:
mode:
authorFrederico Linhares <fred@linhares.blue>2022-08-02 16:52:33 -0300
committerFrederico Linhares <fred@linhares.blue>2022-08-02 16:52:33 -0300
commitf88712a929ee3543f8e1d45c6071f676df339cdb (patch)
treead4c9272ead49eb205b1c655bb1d878654863e26 /src/core.hpp
parent9c6a166fa2b00a1ab177d9e9216a839b87e36ca7 (diff)
refa Use Vulkan for graphics
This is a partial refactory. Some functionalities implemented in SDL were removed and need reimplementation.
Diffstat (limited to 'src/core.hpp')
-rw-r--r--src/core.hpp103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/core.hpp b/src/core.hpp
new file mode 100644
index 0000000..117a81f
--- /dev/null
+++ b/src/core.hpp
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2022 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 <random>
+
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/compile.h>
+#include <mruby/data.h>
+#include <mruby/dump.h>
+#include <mruby/variable.h>
+
+#include <SDL2/SDL.h>
+#include <SDL2/SDL_vulkan.h>
+#include <SDL2/SDL_image.h>
+#include <SDL2/SDL_mixer.h>
+
+#include "command.hpp"
+
+#include "vk/device.hpp"
+#include "vk/graphics_pipeline.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;
+
+ const char *config_file;
+
+ /// Text displayed in the game window.
+ char *game_name;
+
+ /**
+ * @{
+ * This is the amount of pixel the games use to render a buffer. The image in
+ * this buffer is then rendered to the screen.
+ */
+ uint32_t game_width, game_height;
+ /// @}
+
+ /**
+ * @{
+ * This is the ammount of pixel that the games uses when rendering to the
+ * screen.
+ */
+ uint32_t screen_width, screen_height;
+ /// @}
+
+ int game_version_major, game_version_minor, game_version_patch;
+
+ Uint32 fps;
+ Uint32 max_frame_duration_ms;
+
+ SDL_Window *window;
+
+ VkSurfaceKHR window_surface;
+ VkInstance vk_instance;
+
+#ifdef DEBUG
+ VkDebugUtilsMessengerEXT vk_callback;
+#endif
+
+ // Vulkan devices.
+ std::vector<VK::Device> vk_devices;
+ VK::Device *vk_device_with_swapchain;
+ VK::Swapchain *vk_swapchain;
+ VK::GraphicsPipeline *vk_graphics_pipeline;
+
+ bool quit_game;
+};
+
+extern cg_sCore cg_core;
+
+#endif /* CANDY_GEAR_CORE_H */