feat: Add displayGrayscaleBase method for differential refresh
(#2334) Introduces a new display method that prepares the framebuffer as a base frame for grayscale overlays. On X3 panels, this uses the OEM differential base waveform (AA-pre-BW) without forcing a resync. Other panels fall back to normal display with configurable refresh mode. Dependent upon matching SDK commit to work
This commit is contained in:
@@ -1587,6 +1587,30 @@ size_t GfxRenderer::getBufferSize() const { return frameBufferSize; }
|
||||
// unused
|
||||
// void GfxRenderer::grayscaleRevert() const { display.grayscaleRevert(); }
|
||||
|
||||
void GfxRenderer::displayGrayscaleBase(HalDisplay::RefreshMode fallback) const {
|
||||
display.displayGrayscaleBase(fallback, fadingFix);
|
||||
}
|
||||
|
||||
void GfxRenderer::preconditionGrayscale() const { display.preconditionGrayscale(); }
|
||||
|
||||
void GfxRenderer::preconditionGrayscale(int x, int y, int w, int h) const {
|
||||
if (w <= 0 || h <= 0) return;
|
||||
// Rotate the logical rect's opposite corners to physical panel coords; the
|
||||
// physical bbox stays axis-aligned for all four orientations.
|
||||
int ax, ay, bx, by;
|
||||
rotateCoordinates(orientation, x, y, &ax, &ay, panelWidth, panelHeight);
|
||||
rotateCoordinates(orientation, x + w - 1, y + h - 1, &bx, &by, panelWidth, panelHeight);
|
||||
int x0 = ax < bx ? ax : bx, x1 = ax > bx ? ax : bx;
|
||||
int y0 = ay < by ? ay : by, y1 = ay > by ? ay : by;
|
||||
if (x0 < 0) x0 = 0;
|
||||
if (y0 < 0) y0 = 0;
|
||||
if (x1 >= panelWidth) x1 = panelWidth - 1;
|
||||
if (y1 >= panelHeight) y1 = panelHeight - 1;
|
||||
if (x1 < x0 || y1 < y0) return;
|
||||
display.preconditionGrayscale(static_cast<uint16_t>(x0), static_cast<uint16_t>(y0),
|
||||
static_cast<uint16_t>(x1 - x0 + 1), static_cast<uint16_t>(y1 - y0 + 1));
|
||||
}
|
||||
|
||||
void GfxRenderer::copyGrayscaleLsbBuffers() const { display.copyGrayscaleLsbBuffers(frameBuffer); }
|
||||
|
||||
void GfxRenderer::copyGrayscaleMsbBuffers() const { display.copyGrayscaleMsbBuffers(frameBuffer); }
|
||||
|
||||
Reference in New Issue
Block a user