MCPcopy Create free account
hub / github.com/WayfireWM/wayfire / add_texture

Method add_texture

src/render.cpp:487–518  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

485}
486
487void wf::render_pass_t::add_texture(const wf::texture_t& texture, const wf::render_target_t& adjusted_target,
488 const wlr_fbox& geometry, const wf::region_t& damage, float alpha)
489{
490 if (wlr_renderer_is_gles2(this->get_wlr_renderer()))
491 {
492 // This is a hack to make sure that plugins can do whatever they want and we render on the correct
493 // target. For example, managing auxilliary textures can mess up with the state of the pipeline on
494 // GLES but not on Vulkan, so to make it easier to write plugins, we just bind the render target again
495 // here to ensure that the state is correct.
496 wf::gles::bind_render_buffer(adjusted_target);
497 }
498
499 wf::region_t fb_damage = adjusted_target.framebuffer_region_from_geometry_region(damage);
500
501 wlr_render_texture_options opts{};
502 opts.texture = texture.texture;
503 opts.alpha = α
504 opts.blend_mode = WLR_RENDER_BLEND_MODE_PREMULTIPLIED;
505
506 // use GL_NEAREST for integer scale.
507 // GL_NEAREST makes scaled text blocky instead of blurry, which looks better
508 // but only for integer scale.
509 const auto preferred_filter = ((adjusted_target.scale - floor(adjusted_target.scale)) < 0.001) ?
510 WLR_SCALE_FILTER_NEAREST : WLR_SCALE_FILTER_BILINEAR;
511 opts.filter_mode = texture.filter_mode.value_or(preferred_filter);
512 opts.transform = wlr_output_transform_compose(wlr_output_transform_invert(texture.transform),
513 adjusted_target.wl_transform);
514 opts.clip = fb_damage.to_pixman();
515 opts.src_box = texture.source_box.value_or(wlr_fbox{0, 0, 0, 0});
516 opts.dst_box = fbox_to_geometry(adjusted_target.framebuffer_box_from_geometry_box(geometry));
517 wlr_render_pass_add_texture(get_wlr_pass(), &opts);
518}
519
520void wf::render_pass_t::add_rect(const wf::color_t& color, const wf::render_target_t& adjusted_target,
521 const wlr_fbox& geometry, const wf::region_t& damage)

Callers 11

renderMethod · 0.80
renderMethod · 0.80
renderMethod · 0.80
renderMethod · 0.80
renderMethod · 0.80
renderMethod · 0.80
renderMethod · 0.80
renderMethod · 0.80
renderMethod · 0.80
renderMethod · 0.80
renderMethod · 0.80

Tested by

no test coverage detected