Program Listing for File render_system.h

Return to documentation for file (rootex/framework/systems/render_system.h)

#pragma once

#include "core/renderer/renderer.h"
#include "core/renderer/render_pass.h"
#include "core/resource_files/basic_material_resource_file.h"
#include "main/window.h"
#include "framework/components/visual/camera_component.h"
#include "components/visual/model/model_component.h"
#include "components/visual/model/animated_model_component.h"
#include "components/visual/model/sprite_component.h"
#include "transform_system.h"

#include "ASSAO/ASSAO.h"

class RenderSystem : public System
{
    EventBinder<RenderSystem> m_Binder;

    struct LineRequests
    {
        Vector<float> m_Endpoints;
        Vector<unsigned short> m_Indices;
    };

    CameraComponent* m_Camera;

    Ptr<Renderer> m_Renderer;

    Ref<BasicMaterialResourceFile> m_LineMaterial;
    LineRequests m_CurrentFrameLines;

    Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerFrameVSCB;
    Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerCameraChangeVSCB;

    Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerCameraChangePSCB;
    Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerFrameCustomPSCB;
    Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerFramePSCB;
    Microsoft::WRL::ComPtr<ID3D11Buffer> m_PerScenePSCB;

    bool m_IsEditorRenderPassEnabled;

    RenderSystem();
    RenderSystem(RenderSystem&) = delete;

    void renderPassRender(float deltaMilliseconds, RenderPass renderPass);

    Variant onOpenedScene(const Event* event);

public:
    static RenderSystem* GetSingleton();

    void setConfig(const SceneSettings& sceneSettings) override;
    void update(float deltaMilliseconds) override;
    void renderLines();

    void submitLine(const Vector3& from, const Vector3& to);

    void submitBox(const Vector3& min, const Vector3& max);
    void submitSphere(const Vector3& center, const float& radius);
    void submitCone(const Matrix& transform, const float& height, const float& radius);

    void recoverLostDevice();

    void setCamera(CameraComponent* camera);
    void restoreCamera();

    void enableWireframeRasterizer();
    void resetDefaultRasterizer();

    void setPerCameraVSCBs();
    void setPerFrameVSCBs(float fogStart, float fogEnd);
    void setPerCameraChangePSCBs();
    void setPerFramePSCBs(const Color& fogColor);
    void setPerScenePSCBs();
    void updateStaticLights();
    void updatePerSceneBinds();

    void setIsEditorRenderPass(bool enabled) { m_IsEditorRenderPassEnabled = enabled; }

    void enableLineRenderMode();
    void resetRenderMode();

    CameraComponent* getCamera() const { return m_Camera; }
    Renderer* getRenderer() const { return m_Renderer.get(); }

    void draw() override;
};