Skip to content

File Renderer.h

File List > render > Renderer.h

Go to the documentation of this file

#pragma once

#include "buffers/FrameBuffer.h"
#include "ShadowSystem.h"

#include "RenderConfigs.h"
#include "Context.h"

#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <vector>
#include <unordered_map>

class Window; 

class Renderer
{
private:
    enum _BuildinPPS
    {
        _PBR_COMP_PPS,      
        _EDIT_VISUAL_PPS    
    };

    enum _BuildinBuffLoc
    {
        _RASTER,  
        _AO_ELS   
    };

public:
    static GLint max_resolution_w; 
    static GLint max_resolution_h; 

public:

    // TODO: remove for stateless renderer
    GLuint r_frame_width{};  
    GLuint r_frame_height{}; 

private:
    int r_sample_step{ 1 };

private:

    // TODO: remove for stateless renderer
    std::shared_ptr<FrameBuffer> r_render_result; 

    void FrameResize(GLuint _w, GLuint _h);

    void FrameBufferResize(const glm::vec2& size);

public:

    // TODO: remove for stateless renderer
    std::vector<FrameBuffer> r_buffer_list; 

    void InitFrameBuffer();

    void BindFrameBuffer(int slot);

    void EndFrameBuffer(int slot);

    FrameBuffer* GetFrameBufferPtr() { return r_render_result.get(); }

public:

    Renderer(EventPool& evt, Window& w);

    ~Renderer();

    Renderer(const Renderer&) = delete;
    Renderer& operator=(const Renderer&) = delete;

public:

    // TODO: move to editor layer / RenderContext
    bool r_render_icons = true; 
    bool r_is_preview = true;   

public:

    // TODO: remove for stateless renderer
    ShadowSystem r_shadow_system;  
    RenderConfigs r_config;        

    RenderConfigs* GetConfig() { return &r_config; }

public:

    void NewFrame();

    void Render(const Context& ctx, bool rend = true, bool buff = true);

public:

    void Reset();

    void ConstructSDF(const Context& ctx);

public:

    void ScreenShot();

};