mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 23:27:43 +00:00
LibGfx+LibWeb: Add ImmutableBitmap for images bitmap caching in painter
Before this change, we used Gfx::Bitmap to represent both decoded images that are not going to be mutated and bitmaps corresponding to canvases that could be mutated. This change introduces a wrapper for bitmaps that are not going to be mutated, so the painter could do caching: texture caching in the case of GPU painter and potentially scaled bitmap caching in the case of CPU painter.
This commit is contained in:
parent
abcf71a8ca
commit
f4a5c136c3
24 changed files with 146 additions and 35 deletions
|
@ -157,6 +157,16 @@ void RecordingPainter::draw_scaled_bitmap(Gfx::IntRect const& dst_rect, Gfx::Bit
|
|||
});
|
||||
}
|
||||
|
||||
void RecordingPainter::draw_scaled_immutable_bitmap(Gfx::IntRect const& dst_rect, Gfx::ImmutableBitmap const& bitmap, Gfx::IntRect const& src_rect, Gfx::Painter::ScalingMode scaling_mode)
|
||||
{
|
||||
push_command(DrawScaledImmutableBitmap {
|
||||
.dst_rect = state().translation.map(dst_rect),
|
||||
.bitmap = bitmap,
|
||||
.src_rect = src_rect,
|
||||
.scaling_mode = scaling_mode,
|
||||
});
|
||||
}
|
||||
|
||||
void RecordingPainter::draw_line(Gfx::IntPoint from, Gfx::IntPoint to, Color color, int thickness, Gfx::Painter::LineStyle style, Color alternate_color)
|
||||
{
|
||||
push_command(DrawLine {
|
||||
|
@ -436,6 +446,9 @@ void RecordingPainter::execute(PaintingCommandExecutor& executor)
|
|||
[&](DrawScaledBitmap const& command) {
|
||||
return executor.draw_scaled_bitmap(command.dst_rect, command.bitmap, command.src_rect, command.scaling_mode);
|
||||
},
|
||||
[&](DrawScaledImmutableBitmap const& command) {
|
||||
return executor.draw_scaled_immutable_bitmap(command.dst_rect, command.bitmap, command.src_rect, command.scaling_mode);
|
||||
},
|
||||
[&](SetClipRect const& command) {
|
||||
return executor.set_clip_rect(command.rect);
|
||||
},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue