14 auto fs_atmospherics = am.get_asset<
gfx::shader>(
"engine:/data/shaders/tonemapping/fs_tonemapping.sc");
16 tonemapping_program_.program = std::make_unique<gpu_program>(vs_clip_quad_ex, fs_atmospherics);
17 tonemapping_program_.cache_uniforms();
30 auto input_sz =
input->get_size();
31 auto input_format =
input->get_texture(0)->info.format;
36 bool needs_recreate =
false;
38 if(!output_ || input_sz != output_->get_size() || input_format != output_->get_texture()->info.format)
40 needs_recreate =
true;
56 auto output_tex = std::make_shared<gfx::texture>(input_sz.width,
60 gfx::texture_format::RGBA8,
66 output_ = std::make_shared<gfx::frame_buffer>();
67 output_->populate({output_tex});
128 const auto&
input = params.input;
129 auto output = create_or_update_output_fb(params.input, params.output);
132 pass.
bind(output.get());
134 const auto output_size = output->get_size();
136 tonemapping_program_.program->begin();
138 float tonemap[4] = {params.config.exposure,
static_cast<float>(params.config.method), 0.0f, 0.0f};
145 gfx::set_state(topology | BGFX_STATE_WRITE_RGB | BGFX_STATE_WRITE_A);
146 gfx::submit(pass.
id, tonemapping_program_.program->native_handle());
148 tonemapping_program_.program->end();
std::shared_ptr< frame_buffer > ptr
Manages assets, including loading, unloading, and storage.
auto get_asset(const std::string &key, load_flags flags=load_flags::standard) -> asset_handle< T >
Gets an asset by its key.
auto run(gfx::render_view &rview, const run_params ¶ms) -> gfx::frame_buffer::ptr
auto init(rtti::context &ctx) -> bool
void submit(view_id _id, program_handle _handle, int32_t _depth, bool _preserveState)
uint16_t set_scissor(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
void set_state(uint64_t _state, uint32_t _rgba)
void discard(uint8_t _flags)
void set_uniform(uniform_handle _handle, const void *_value, uint16_t _num)
auto clip_quad(float depth, float width, float height) -> uint64_t
void set_texture(uint8_t _stage, uniform_handle _sampler, texture_handle _handle, uint32_t _flags)
void bind(const frame_buffer *fb=nullptr) const