#include "xe_engine.hpp" #include "xe_image.hpp" #include #include #include #include namespace xe { Engine::Engine(int width, int height, std::string name) : xeWindow{width, height, name}, xeDevice{xeWindow}, xeRenderer{xeWindow, xeDevice}, xeCamera{} { loadDescriptorPool(); alutInit(0, NULL); std::cout << "Audio device: " << alcGetString(NULL, ALC_DEFAULT_DEVICE_SPECIFIER) << "\n"; }; Engine::~Engine() { alutExit(); }; void Engine::loadDescriptorPool() { xeDescriptorPool = DescriptorPool::Builder(xeDevice) .setMaxSets(SwapChain::MAX_FRAMES_IN_FLIGHT) .addPoolSize(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, SwapChain::MAX_FRAMES_IN_FLIGHT) .addPoolSize(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, SwapChain::MAX_FRAMES_IN_FLIGHT) .addPoolSize(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, SwapChain::MAX_FRAMES_IN_FLIGHT) .build(); } std::shared_ptr Engine::loadModelFromFile(const std::string &filename) { return Model::createModelFromFile(xeDevice, filename); } std::shared_ptr Engine::loadModelFromData(std::vector vertexData, uint32_t vertexSize, std::vector indices) { Model::Builder builder{}; builder.vertexData = vertexData; builder.vertexSize = vertexSize; if(indices.size() > 0) { builder.indices = indices; } return std::make_shared(xeDevice, builder); } std::shared_ptr Engine::loadImageFromFile(const std::string &filename) { return std::make_shared(xeDevice, filename); } bool Engine::poll() { glfwPollEvents(); auto newTime = std::chrono::high_resolution_clock::now(); frameTime = std::chrono::duration(newTime - currentTime).count(); currentTime = newTime; float aspect = xeRenderer.getAspectRatio(); xeCamera.setPerspectiveProjection(glm::radians(FOV), aspect, 0.1f, 100.f); return !xeWindow.shouldClose(); } }