Program Listing for File renderer.h

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

#pragma once
#include "prismGraphicCore.h"
#include "cameraComponent.h"
#include "materialComponent.h"
#include "meshComponent.h"
#include "windowResource.h"
#include "transformComponent.h"
#include "bufferObjects.h"

namespace prism {
    namespace render {
        struct InstanceData
        {
            prism::scene::TransformComponent* transform;
            prism::scene::MaterialComponent* texture;
        };

        struct LightData {
            std::vector<scene::PointLightComponent> pointLights;
            std::vector<scene::DirectionalLightComponents> directionalLights;
        };

       class Renderer
        {
        public:
            Renderer() : window(nullptr) {};
            void linkWindow(prism::scene::WindowResource* window);
            void setDefaultSettings();
            void init();
            ~Renderer();

            bool isRenderingActive();
            void beginFrame();
            void beginRender();
            void endRender();
            void endFrame();
            void updateCamera(prism::scene::TransformComponent* transform, prism::scene::CameraComponent* camera);
            void updateInstances(std::vector<InstanceData> instanceData);
            void updateLights(LightData* lightData);
            void bindDefault();
            void bindObjectsData();
            void drawMesh(uint32_t meshId, uint32_t instanceCount, uint32_t firstIndex);

            TextureId addTexture(const std::string& texturePath);
            bool removeTexture(TextureId texture);
            void remodeMaterial(scene::MaterialComponent material);
            void clearTextures();


            scene::MeshComponent addMesh(std::string texturePath);
            void updateMeshes();
            void clearMeshes();

            void awaitRenderingCompletion();
            void destroy();

            PGC::utils::Settings settings;
        private:

            PGC::PrismGraphicCore pgc;
            prism::scene::WindowResource* window;
        };
    }
}