19 auto fs_blit = am.get_asset<
gfx::shader>(
"engine:/data/shaders/fs_blit.sc");
22 blit_program_.program = std::make_unique<gpu_program>(vs_fullscreen, fs_blit);
23 blit_program_.cache_uniforms();
38 auto input_sz =
input->get_size();
39 auto input_tex =
input->get_texture();
40 auto input_format = input_tex->info.format;
42 bool needs_recreate =
false;
45 needs_recreate =
true;
49 auto out_sz = output_->get_size();
50 auto out_format = output_->get_texture()->info.format;
51 if(out_sz != input_sz || out_format != input_format)
53 needs_recreate =
true;
70 auto output_tex = std::make_shared<gfx::texture>(input_sz.width,
79 output_ = std::make_shared<gfx::frame_buffer>();
80 output_->populate({output_tex});
88 const auto& input_fb = params.input;
95 auto actual_output = create_or_update_output_fb(input_fb, params.output);
99 pass.
bind(actual_output.get());
102 blit_program_.program->begin();
112 gfx::set_state(topology | BGFX_STATE_WRITE_RGB | BGFX_STATE_WRITE_A);
115 gfx::submit(pass.
id, blit_program_.program->native_handle());
120 blit_program_.program->end();
125 return actual_output;
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 init(rtti::context &ctx) -> bool
Must be called once (after bgfx::init() and after asset_manager is registered in context).
auto run(const run_params ¶ms) -> gfx::frame_buffer::ptr
Executes the blit: copies params.input → params.output. Returns the actual output framebuffer.
void submit(view_id _id, program_handle _handle, int32_t _depth, bool _preserveState)
void set_state(uint64_t _state, uint32_t _rgba)
void discard(uint8_t _flags)
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