VoxelEngine/src/graphics/core/PostProcessing.h
2024-04-30 00:31:13 +03:00

43 lines
1.3 KiB
C++

#ifndef GRAPHICS_CORE_POST_PROCESSING_HPP_
#define GRAPHICS_CORE_POST_PROCESSING_HPP_
#include "Viewport.hpp"
#include "DrawContext.hpp"
#include <memory>
class Mesh;
class Shader;
class Framebuffer;
/// @brief Framebuffer with blitting with shaders.
/// @attention Current implementation does not support multiple render passes
/// for multiple effects. Will be implemented in v0.21
class PostProcessing {
/// @brief Main framebuffer (lasy field)
std::unique_ptr<Framebuffer> fbo;
/// @brief Fullscreen quad mesh as the post-processing canvas
std::unique_ptr<Mesh> quadMesh;
public:
PostProcessing();
~PostProcessing();
/// @brief Prepare and bind framebuffer
/// @param context graphics context will be modified
void use(DrawContext& context);
/// @brief Render fullscreen quad using the passed shader
/// with framebuffer texture bound
/// @param context graphics context
/// @param screenShader shader used for fullscreen quad
/// @throws std::runtime_error if use(...) wasn't called before
void render(const DrawContext& context, Shader* screenShader);
/// @brief Make an image from the last rendered frame
std::unique_ptr<ImageData> toImage();
Framebuffer* getFramebuffer() const;
};
#endif // GRAPHICS_CORE_POST_PROCESSING_HPP_