From b419a79f8fd2e693b7ff202ee3b9e1cca03ddec9 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Thu, 21 Oct 2021 15:19:39 -0400 Subject: [PATCH] app_server: Remove IsDoubleBuffered() default implementation from HWInterface. It just causes confusion and is wrong in the case where double buffering status changed during the object lifetime. Change-Id: Ia1a9ae3f5a1b1b7d521b79c7d1c7be92cef60a06 Reviewed-on: https://review.haiku-os.org/c/haiku/+/4633 Reviewed-by: waddlesplash --- src/servers/app/drawing/BitmapHWInterface.cpp | 5 ++--- src/servers/app/drawing/HWInterface.cpp | 11 +---------- src/servers/app/drawing/HWInterface.h | 6 ++---- src/servers/app/drawing/ViewHWInterface.cpp | 8 +++++--- .../drawing/interface/local/AccelerantHWInterface.cpp | 5 ++--- 5 files changed, 12 insertions(+), 23 deletions(-) diff --git a/src/servers/app/drawing/BitmapHWInterface.cpp b/src/servers/app/drawing/BitmapHWInterface.cpp index 993493c7b6..d3c8e4d7d8 100644 --- a/src/servers/app/drawing/BitmapHWInterface.cpp +++ b/src/servers/app/drawing/BitmapHWInterface.cpp @@ -24,7 +24,7 @@ using std::nothrow; BitmapHWInterface::BitmapHWInterface(ServerBitmap* bitmap) : - HWInterface(false, false), + HWInterface(), fBackBuffer(NULL), fFrontBuffer(new(nothrow) BitmapBuffer(bitmap)) { @@ -204,9 +204,8 @@ BitmapHWInterface::BackBuffer() const bool BitmapHWInterface::IsDoubleBuffered() const { - // overwrite double buffered preference if (fFrontBuffer.IsSet()) return fBackBuffer.IsSet(); - return HWInterface::IsDoubleBuffered(); + return false; } diff --git a/src/servers/app/drawing/HWInterface.cpp b/src/servers/app/drawing/HWInterface.cpp index 91e91913cc..474274053d 100644 --- a/src/servers/app/drawing/HWInterface.cpp +++ b/src/servers/app/drawing/HWInterface.cpp @@ -40,7 +40,7 @@ HWInterfaceListener::~HWInterfaceListener() // #pragma mark - HWInterface -HWInterface::HWInterface(bool doubleBuffered, bool enableUpdateQueue) +HWInterface::HWInterface() : MultiLocker("hw interface lock"), fFloatingOverlaysLock("floating overlays lock"), @@ -52,12 +52,10 @@ HWInterface::HWInterface(bool doubleBuffered, bool enableUpdateQueue) fCursorObscured(false), fHardwareCursorEnabled(false), fCursorLocation(0, 0), - fDoubleBuffered(doubleBuffered), fVGADevice(-1), fUpdateExecutor(NULL), fListeners(20) { - SetAsyncDoubleBuffered(doubleBuffered && enableUpdateQueue); } @@ -307,13 +305,6 @@ HWInterface::SetAsyncDoubleBuffered(bool doubleBuffered) } -bool -HWInterface::IsDoubleBuffered() const -{ - return fDoubleBuffered; -} - - /*! The object needs to be already locked! */ status_t diff --git a/src/servers/app/drawing/HWInterface.h b/src/servers/app/drawing/HWInterface.h index 24c6618918..7c0bb63fa8 100644 --- a/src/servers/app/drawing/HWInterface.h +++ b/src/servers/app/drawing/HWInterface.h @@ -57,8 +57,7 @@ public: class HWInterface : protected MultiLocker { public: - HWInterface(bool doubleBuffered = false, - bool enableUpdateQueue = true); + HWInterface(); virtual ~HWInterface(); // locking @@ -165,7 +164,7 @@ public: virtual RenderingBuffer* FrontBuffer() const = 0; virtual RenderingBuffer* BackBuffer() const = 0; void SetAsyncDoubleBuffered(bool doubleBuffered); - virtual bool IsDoubleBuffered() const; + virtual bool IsDoubleBuffered() const = 0; // Invalidate is used for scheduling an area for updating virtual status_t InvalidateRegion(const BRegion& region); @@ -268,7 +267,6 @@ protected: BRect fTrackingRect; - bool fDoubleBuffered; int fVGADevice; private: diff --git a/src/servers/app/drawing/ViewHWInterface.cpp b/src/servers/app/drawing/ViewHWInterface.cpp index d01e713f1a..13a233908b 100644 --- a/src/servers/app/drawing/ViewHWInterface.cpp +++ b/src/servers/app/drawing/ViewHWInterface.cpp @@ -405,11 +405,13 @@ CardWindow::Invalidate(const BRect& frame) ViewHWInterface::ViewHWInterface() : - HWInterface(kDefaultDoubleBuffered), + HWInterface(), fBackBuffer(NULL), fFrontBuffer(NULL), fWindow(NULL) { + SetAsyncDoubleBuffered(kDefaultDoubleBuffered); + fDisplayMode.virtual_width = 640; fDisplayMode.virtual_height = 480; fDisplayMode.space = B_RGBA32; @@ -527,7 +529,7 @@ ViewHWInterface::SetMode(const display_mode& mode) // TODO: Above not true anymore for single buffered mode!!! // -> fall back to double buffer for fDisplayMode.space != B_RGB32 // as intermediate solution... - bool doubleBuffered = HWInterface::IsDoubleBuffered(); + bool doubleBuffered = true; if ((color_space)fDisplayMode.space != B_RGB32 && (color_space)fDisplayMode.space != B_RGBA32) doubleBuffered = true; @@ -792,7 +794,7 @@ ViewHWInterface::IsDoubleBuffered() const if (fFrontBuffer.IsSet()) return fBackBuffer.IsSet(); - return HWInterface::IsDoubleBuffered(); + return false; } diff --git a/src/servers/app/drawing/interface/local/AccelerantHWInterface.cpp b/src/servers/app/drawing/interface/local/AccelerantHWInterface.cpp index 5b0b7fe224..888429f23d 100644 --- a/src/servers/app/drawing/interface/local/AccelerantHWInterface.cpp +++ b/src/servers/app/drawing/interface/local/AccelerantHWInterface.cpp @@ -688,8 +688,7 @@ AccelerantHWInterface::SetMode(const display_mode& mode) || fBackBuffer->Width() != fFrontBuffer->Width() || fBackBuffer->Height() != fFrontBuffer->Height() || fOffscreenBackBuffer - || (fFrontBuffer->ColorSpace() == B_RGB32 && fBackBuffer.IsSet() - && !HWInterface::IsDoubleBuffered())) { + || (fFrontBuffer->ColorSpace() == B_RGB32 && fBackBuffer.IsSet())) { // NOTE: backbuffer is always B_RGBA32, this simplifies the // drawing backend implementation tremendously for the time // being. The color space conversion is handled in CopyBackToFront() @@ -699,7 +698,7 @@ AccelerantHWInterface::SetMode(const display_mode& mode) // TODO: Above not true anymore for single buffered mode!!! // -> fall back to double buffer for fDisplayMode.space != B_RGB32 // as intermediate solution... - bool doubleBuffered = HWInterface::IsDoubleBuffered(); + bool doubleBuffered = false; if ((fFrontBuffer->ColorSpace() != B_RGB32 && fFrontBuffer->ColorSpace() != B_RGBA32) || fVGADevice >= 0 || fOffscreenBackBuffer)