Program Listing for File prismGraphicCore.h

Return to documentation for file (PrismEngine/src/prismGraphicCore.h)

#pragma once
#include <vector>
#include <string>
#include <SDL.h>
#include <vulkan/vulkan.h>
#include <optional>
#include <stdexcept>
#include <utility> // для std::pair
#include <SDL_vulkan.h>
#include <memory>
#include <set>
#include <iostream>
#include <map>
#include <algorithm>
#include <chrono>
#include "config.h"
#include "logger.h"
#include "vertex.h"
#include "fmath.h"
#define GLM_FORCE_RADIANS
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include <glm.hpp>
#include <gtc/matrix_transform.hpp>
#include "base.h"
#include "deviceWrapper.h"
#include "deviceChecker.h"
#include "swapChain.h"
#include "utils.h"
#include "renderPass.h"
#include "descriptorSetLayout.h"
#include "graphicsPipeline.h"
#include "bufferWrapper.h"
#include "descriptorSet.h"
#include "resourcesCreater.h"

namespace prism {
    namespace PGC {
        class PrismGraphicCore {
        public:
            // === Деструктор и контрруктор ===
            PrismGraphicCore();
            void init(utils::Settings settings);
            void drawFrame();
            void startRender();
            prism::PGC::utils::CameraData* getCameraDataPtr();
            PGC::SwapChain* getSwapChainPtr();

            void cleanup();
            void awaitRenderingCompletion();
            bool isWindowReadyForRendering(SDL_Window* window);

            bool* windowResized;
            bool* windowMinimized;

            PGC::utils::Settings settings;
            PGC::utils::Context context;
        private:
            void createBase();
            void createSwapChain();
            void createGraphicsPipeline();
            void createRenderPass();
            void createFramebuffers();
            void createCommandPool();
            void createCommandBuffer();
            void createSyncObjects();
            void createDescriptorSetLayout();
            void createTextureDescriptorSetLayout();
            void createTextureDescriptorSet();
            void createUniformBuffers();
            void createDescriptorPool();
            void createDescriptorSets();
            void createDepthResources();
            void createColorResources();

            SDL_Window* window;

            PGC::base::Base base;
            PGC::SwapChain swapChain;
            PGC::RenderPass renderPass;
            PGC::DescriptorSetLayout descriptorSetLayout;
            PGC::GraphicsPipeline graphicsPipeline;
            PGC::DescriptorSet descriptorSet;

            void generateMipmaps(VkImage image, VkFormat imageFormat, int32_t texWidth, int32_t texHeight, uint32_t mipLevels);

            VkSampleCountFlagBits getMaxUsableSampleCount();
        };

    } // namespace render
} // namespace prism