|
roo_display
API Documentation for roo_display
|
Display output filter that avoids redundant background fills. More...
#include <background_fill_optimizer.h>
Data Structures | |
| class | FrameBuffer |
| Backing buffer for the optimizer state. More... | |
Public Member Functions | |
| BackgroundFillOptimizer (DisplayOutput &output, FrameBuffer &frame_buffer) | |
| Create a background fill optimizer filter. | |
| virtual | ~BackgroundFillOptimizer () |
| void | setPalette (const Color *palette, uint8_t palette_size) |
| void | setPalette (std::initializer_list< Color > palette) |
| void | setAddress (uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, BlendingMode mode) override |
Set a rectangular window filled by subsequent calls to write(). | |
| void | write (Color *color, uint32_t pixel_count) override |
| Write pixels into the current address window. | |
| void | fill (Color color, uint32_t pixel_count) override |
Write pixel_count copies of the same color into the current address window. | |
| void | writeRects (BlendingMode mode, Color *color, int16_t *x0, int16_t *y0, int16_t *x1, int16_t *y1, uint16_t count) override |
| Draw the specified rectangles (per-rectangle colors). Invalidates the address window. | |
| void | fillRects (BlendingMode mode, Color color, int16_t *x0, int16_t *y0, int16_t *x1, int16_t *y1, uint16_t count) override |
| Draw the specified rectangles using the same color. Invalidates the address window. | |
| void | writePixels (BlendingMode mode, Color *color, int16_t *x, int16_t *y, uint16_t pixel_count) override |
| Draw the specified pixels (per-pixel colors). Invalidates the address window. | |
| void | fillPixels (BlendingMode mode, Color color, int16_t *x, int16_t *y, uint16_t pixel_count) override |
| Draw the specified pixels using the same color. Invalidates the address window. | |
| void | drawDirectRect (const roo::byte *data, size_t row_width_bytes, int16_t src_x0, int16_t src_y0, int16_t src_x1, int16_t src_y1, int16_t dst_x0, int16_t dst_y0) override |
| Draw a rectangle represented in the device's native color format. | |
| const ColorFormat & | getColorFormat () const override |
| Return the native color format used by this device for direct drawing. | |
Public Member Functions inherited from roo_display::DisplayOutput | |
| virtual | ~DisplayOutput () |
| virtual void | begin () |
| Enter a write transaction. | |
| virtual void | end () |
| Finalize the previously entered write transaction, flushing any pending writes. | |
| virtual void | flush () |
| Wait until pending asynchronous drawing operations complete. | |
| void | setAddress (const Box &bounds, BlendingMode blending_mode) |
Convenience overload for setAddress() using a Box. | |
| void | fillRect (BlendingMode blending_mode, const Box &rect, Color color) |
| Fill a single rectangle. Invalidates the address window. | |
| void | fillRect (BlendingMode blending_mode, int16_t x0, int16_t y0, int16_t x1, int16_t y1, Color color) |
| Fill a single rectangle. Invalidates the address window. | |
| void | fillRect (int16_t x0, int16_t y0, int16_t x1, int16_t y1, Color color) |
Fill a single rectangle using BlendingMode::kSource. | |
| virtual void | drawDirectRectAsync (const roo::byte *data, size_t row_width_bytes, int16_t src_x0, int16_t src_y0, int16_t src_x1, int16_t src_y1, int16_t dst_x0, int16_t dst_y0) |
| Asynchronous variant of drawDirectRect(). | |
Static Public Attributes | |
| static constexpr const int | kBlock = 4 |
| Size of the coarse background grid in pixels. | |
| static constexpr const int | kDynamicPaletteMinWidth = 8 |
| Minimum rectangle width for dynamic palette enrollment. | |
| static constexpr const int | kDynamicPaletteMinHeight = 8 |
| Minimum rectangle height for dynamic palette enrollment. | |
Friends | |
| class | BackgroundFillOptimizerDevice |
Display output filter that avoids redundant background fills.
Definition at line 50 of file background_fill_optimizer.h.
| roo_display::BackgroundFillOptimizer::BackgroundFillOptimizer | ( | DisplayOutput & | output, |
| FrameBuffer & | frame_buffer | ||
| ) |
Create a background fill optimizer filter.
Definition at line 95 of file background_fill_optimizer.cpp.
References color.
|
inlinevirtual |
Definition at line 114 of file background_fill_optimizer.h.
|
overridevirtual |
Draw a rectangle represented in the device's native color format.
Source data pointer correspond to the (0, 0) point in the source coordinate system, with stride of row_width_bytes. The source rectangle at (src_x0, src_y0, src_x1, src_y1) relative to the data pointer, gets copied to the destination rectangle with top-left corner at (dst_x0, dst_y0). The caller must ensure that the destination rectangle fits within the device's bounds.
The default implementation processes the rectangle by small tiles, converting the data to an array of regular colors, and calling regular window functions to draw them. Specific devices can override this method to provide a more efficient implementation that draws directly from the source data.
Reimplemented from roo_display::DisplayOutput.
Definition at line 797 of file background_fill_optimizer.cpp.
References roo_display::DisplayOutput::drawDirectRect(), roo_display::internal::NibbleRect::get(), getColorFormat(), and kBlock.
Referenced by roo_display::BackgroundFillOptimizerDevice::drawDirectRect().
|
overridevirtual |
Write pixel_count copies of the same color into the current address window.
The same preconditions as write() apply: the address must be set via setAddress() and not invalidated by any of the write* / fill* methods. Otherwise, the behavior is undefined.
Default implementation falls back to chunked write(). Drivers and filters can override this for a more efficient single-color path.
Reimplemented from roo_display::DisplayOutput.
Definition at line 594 of file background_fill_optimizer.cpp.
References color.
Referenced by roo_display::BackgroundFillOptimizerDevice::fill().
|
overridevirtual |
Draw the specified pixels using the same color. Invalidates the address window.
| blending_mode | Blending mode used for drawing. |
| color | The color to use for all pixels. |
| x | Pointer to x-coordinates for each pixel. |
| y | Pointer to y-coordinates for each pixel. |
| pixel_count | Number of pixels. |
Implements roo_display::DisplayOutput.
Definition at line 753 of file background_fill_optimizer.cpp.
References color, roo_display::DisplayOutput::fillPixels(), roo_display::internal::NibbleRect::get(), and kBlock.
Referenced by roo_display::BackgroundFillOptimizerDevice::fillPixels().
|
overridevirtual |
Draw the specified rectangles using the same color. Invalidates the address window.
| blending_mode | Blending mode used for drawing. |
| color | The color to use for all rectangles. |
| x0 | Pointer to left coordinates for each rectangle. |
| y0 | Pointer to top coordinates for each rectangle. |
| x1 | Pointer to right coordinates for each rectangle. |
| y1 | Pointer to bottom coordinates for each rectangle. |
| count | Number of rectangles. |
Implements roo_display::DisplayOutput.
Definition at line 683 of file background_fill_optimizer.cpp.
References color, kBlock, kDynamicPaletteMinHeight, kDynamicPaletteMinWidth, and writer.
Referenced by roo_display::BackgroundFillOptimizerDevice::fillRects().
|
inlineoverridevirtual |
Return the native color format used by this device for direct drawing.
Implements roo_display::DisplayOutput.
Definition at line 143 of file background_fill_optimizer.h.
References roo_display::DisplayOutput::getColorFormat().
Referenced by drawDirectRect().
|
overridevirtual |
Set a rectangular window filled by subsequent calls to write().
| x0 | Left coordinate (inclusive). |
| y0 | Top coordinate (inclusive). |
| x1 | Right coordinate (inclusive). |
| y1 | Bottom coordinate (inclusive). |
| blending_mode | Blending mode for subsequent writes. |
Implements roo_display::DisplayOutput.
Definition at line 256 of file background_fill_optimizer.cpp.
References roo_display::Box::area(), and kBlock.
Referenced by roo_display::BackgroundFillOptimizerDevice::setAddress().
| void roo_display::BackgroundFillOptimizer::setPalette | ( | const Color * | palette, |
| uint8_t | palette_size | ||
| ) |
Definition at line 45 of file background_fill_optimizer.cpp.
References palette.
Referenced by roo_display::BackgroundFillOptimizerDevice::setPalette().
Definition at line 55 of file background_fill_optimizer.cpp.
References palette.
|
overridevirtual |
Write pixels into the current address window.
The address must be set via setAddress() and not invalidated by any of the write* / fill* methods. Otherwise, the behavior is undefined.
| color | Pointer to source pixels. |
| pixel_count | Number of pixels to write. |
Implements roo_display::DisplayOutput.
Definition at line 530 of file background_fill_optimizer.cpp.
References color.
Referenced by roo_display::BackgroundFillOptimizerDevice::write().
|
overridevirtual |
Draw the specified pixels (per-pixel colors). Invalidates the address window.
| blending_mode | Blending mode used for drawing. |
| color | Pointer to colors for each pixel. |
| x | Pointer to x-coordinates for each pixel. |
| y | Pointer to y-coordinates for each pixel. |
| pixel_count | Number of pixels. |
Implements roo_display::DisplayOutput.
Definition at line 719 of file background_fill_optimizer.cpp.
References color, roo_display::internal::NibbleRect::get(), kBlock, and roo_display::DisplayOutput::writePixels().
Referenced by roo_display::BackgroundFillOptimizerDevice::writePixels().
|
overridevirtual |
Draw the specified rectangles (per-rectangle colors). Invalidates the address window.
| blending_mode | Blending mode used for drawing. |
| color | Pointer to colors for each rectangle. |
| x0 | Pointer to left coordinates for each rectangle. |
| y0 | Pointer to top coordinates for each rectangle. |
| x1 | Pointer to right coordinates for each rectangle. |
| y1 | Pointer to bottom coordinates for each rectangle. |
| count | Number of rectangles. |
Implements roo_display::DisplayOutput.
Definition at line 644 of file background_fill_optimizer.cpp.
References color, kBlock, kDynamicPaletteMinHeight, kDynamicPaletteMinWidth, and writer.
Referenced by roo_display::BackgroundFillOptimizerDevice::writeRects().
Definition at line 148 of file background_fill_optimizer.h.
Size of the coarse background grid in pixels.
Definition at line 53 of file background_fill_optimizer.h.
Referenced by drawDirectRect(), fillPixels(), fillRects(), roo_display::BackgroundFillOptimizer::FrameBuffer::invalidateRect(), setAddress(), roo_display::BackgroundFillOptimizer::FrameBuffer::SizeForDimensions(), writePixels(), and writeRects().
|
staticconstexpr |
Minimum rectangle height for dynamic palette enrollment.
Definition at line 59 of file background_fill_optimizer.h.
Referenced by fillRects(), and writeRects().
|
staticconstexpr |
Minimum rectangle width for dynamic palette enrollment.
Definition at line 56 of file background_fill_optimizer.h.
Referenced by fillRects(), and writeRects().