#pragma once #include "xe_window.hpp" #include "xe_device.hpp" #include "xe_renderer.hpp" #include "xe_camera.hpp" #include "xe_descriptors.hpp" #include "xe_image.hpp" #include #include namespace xe { class XeEngine { public: XeEngine(int width, int height, std::string name); ~XeEngine(); XeEngine(const XeEngine&) = delete; XeEngine operator=(const XeEngine&) = delete; XeWindow& getWindow() {return xeWindow;} XeCamera& getCamera() {return xeCamera;} std::shared_ptr loadModelFromFile(const std::string &filename); std::shared_ptr loadModelFromData(std::vector vertices, std::vector indices); std::shared_ptr loadImage(const std::string &filename); bool beginFrame() { return xeRenderer.beginFrame(); } void endFrame() { xeRenderer.endFrame(); } void close() { vkDeviceWaitIdle(xeDevice.device()); } bool poll(); float getFrameTime() { return frameTime; } private: void loadDescriptorPool(); XeWindow xeWindow; XeDevice xeDevice; XeRenderer xeRenderer; XeCamera xeCamera; std::chrono::_V2::system_clock::time_point currentTime; float frameTime; float FOV = 50.f; std::unique_ptr xeDescriptorPool; friend class XeRenderSystem; }; }