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 <[email protected]>
This commit is contained in:
committed by
waddlesplash
parent
f638102196
commit
b419a79f8f
@@ -24,7 +24,7 @@ using std::nothrow;
|
|||||||
|
|
||||||
BitmapHWInterface::BitmapHWInterface(ServerBitmap* bitmap)
|
BitmapHWInterface::BitmapHWInterface(ServerBitmap* bitmap)
|
||||||
:
|
:
|
||||||
HWInterface(false, false),
|
HWInterface(),
|
||||||
fBackBuffer(NULL),
|
fBackBuffer(NULL),
|
||||||
fFrontBuffer(new(nothrow) BitmapBuffer(bitmap))
|
fFrontBuffer(new(nothrow) BitmapBuffer(bitmap))
|
||||||
{
|
{
|
||||||
@@ -204,9 +204,8 @@ BitmapHWInterface::BackBuffer() const
|
|||||||
bool
|
bool
|
||||||
BitmapHWInterface::IsDoubleBuffered() const
|
BitmapHWInterface::IsDoubleBuffered() const
|
||||||
{
|
{
|
||||||
// overwrite double buffered preference
|
|
||||||
if (fFrontBuffer.IsSet())
|
if (fFrontBuffer.IsSet())
|
||||||
return fBackBuffer.IsSet();
|
return fBackBuffer.IsSet();
|
||||||
|
|
||||||
return HWInterface::IsDoubleBuffered();
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ HWInterfaceListener::~HWInterfaceListener()
|
|||||||
// #pragma mark - HWInterface
|
// #pragma mark - HWInterface
|
||||||
|
|
||||||
|
|
||||||
HWInterface::HWInterface(bool doubleBuffered, bool enableUpdateQueue)
|
HWInterface::HWInterface()
|
||||||
:
|
:
|
||||||
MultiLocker("hw interface lock"),
|
MultiLocker("hw interface lock"),
|
||||||
fFloatingOverlaysLock("floating overlays lock"),
|
fFloatingOverlaysLock("floating overlays lock"),
|
||||||
@@ -52,12 +52,10 @@ HWInterface::HWInterface(bool doubleBuffered, bool enableUpdateQueue)
|
|||||||
fCursorObscured(false),
|
fCursorObscured(false),
|
||||||
fHardwareCursorEnabled(false),
|
fHardwareCursorEnabled(false),
|
||||||
fCursorLocation(0, 0),
|
fCursorLocation(0, 0),
|
||||||
fDoubleBuffered(doubleBuffered),
|
|
||||||
fVGADevice(-1),
|
fVGADevice(-1),
|
||||||
fUpdateExecutor(NULL),
|
fUpdateExecutor(NULL),
|
||||||
fListeners(20)
|
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!
|
/*! The object needs to be already locked!
|
||||||
*/
|
*/
|
||||||
status_t
|
status_t
|
||||||
|
|||||||
@@ -57,8 +57,7 @@ public:
|
|||||||
|
|
||||||
class HWInterface : protected MultiLocker {
|
class HWInterface : protected MultiLocker {
|
||||||
public:
|
public:
|
||||||
HWInterface(bool doubleBuffered = false,
|
HWInterface();
|
||||||
bool enableUpdateQueue = true);
|
|
||||||
virtual ~HWInterface();
|
virtual ~HWInterface();
|
||||||
|
|
||||||
// locking
|
// locking
|
||||||
@@ -165,7 +164,7 @@ public:
|
|||||||
virtual RenderingBuffer* FrontBuffer() const = 0;
|
virtual RenderingBuffer* FrontBuffer() const = 0;
|
||||||
virtual RenderingBuffer* BackBuffer() const = 0;
|
virtual RenderingBuffer* BackBuffer() const = 0;
|
||||||
void SetAsyncDoubleBuffered(bool doubleBuffered);
|
void SetAsyncDoubleBuffered(bool doubleBuffered);
|
||||||
virtual bool IsDoubleBuffered() const;
|
virtual bool IsDoubleBuffered() const = 0;
|
||||||
|
|
||||||
// Invalidate is used for scheduling an area for updating
|
// Invalidate is used for scheduling an area for updating
|
||||||
virtual status_t InvalidateRegion(const BRegion& region);
|
virtual status_t InvalidateRegion(const BRegion& region);
|
||||||
@@ -268,7 +267,6 @@ protected:
|
|||||||
|
|
||||||
BRect fTrackingRect;
|
BRect fTrackingRect;
|
||||||
|
|
||||||
bool fDoubleBuffered;
|
|
||||||
int fVGADevice;
|
int fVGADevice;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -405,11 +405,13 @@ CardWindow::Invalidate(const BRect& frame)
|
|||||||
|
|
||||||
ViewHWInterface::ViewHWInterface()
|
ViewHWInterface::ViewHWInterface()
|
||||||
:
|
:
|
||||||
HWInterface(kDefaultDoubleBuffered),
|
HWInterface(),
|
||||||
fBackBuffer(NULL),
|
fBackBuffer(NULL),
|
||||||
fFrontBuffer(NULL),
|
fFrontBuffer(NULL),
|
||||||
fWindow(NULL)
|
fWindow(NULL)
|
||||||
{
|
{
|
||||||
|
SetAsyncDoubleBuffered(kDefaultDoubleBuffered);
|
||||||
|
|
||||||
fDisplayMode.virtual_width = 640;
|
fDisplayMode.virtual_width = 640;
|
||||||
fDisplayMode.virtual_height = 480;
|
fDisplayMode.virtual_height = 480;
|
||||||
fDisplayMode.space = B_RGBA32;
|
fDisplayMode.space = B_RGBA32;
|
||||||
@@ -527,7 +529,7 @@ ViewHWInterface::SetMode(const display_mode& mode)
|
|||||||
// TODO: Above not true anymore for single buffered mode!!!
|
// TODO: Above not true anymore for single buffered mode!!!
|
||||||
// -> fall back to double buffer for fDisplayMode.space != B_RGB32
|
// -> fall back to double buffer for fDisplayMode.space != B_RGB32
|
||||||
// as intermediate solution...
|
// as intermediate solution...
|
||||||
bool doubleBuffered = HWInterface::IsDoubleBuffered();
|
bool doubleBuffered = true;
|
||||||
if ((color_space)fDisplayMode.space != B_RGB32
|
if ((color_space)fDisplayMode.space != B_RGB32
|
||||||
&& (color_space)fDisplayMode.space != B_RGBA32)
|
&& (color_space)fDisplayMode.space != B_RGBA32)
|
||||||
doubleBuffered = true;
|
doubleBuffered = true;
|
||||||
@@ -792,7 +794,7 @@ ViewHWInterface::IsDoubleBuffered() const
|
|||||||
if (fFrontBuffer.IsSet())
|
if (fFrontBuffer.IsSet())
|
||||||
return fBackBuffer.IsSet();
|
return fBackBuffer.IsSet();
|
||||||
|
|
||||||
return HWInterface::IsDoubleBuffered();
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -688,8 +688,7 @@ AccelerantHWInterface::SetMode(const display_mode& mode)
|
|||||||
|| fBackBuffer->Width() != fFrontBuffer->Width()
|
|| fBackBuffer->Width() != fFrontBuffer->Width()
|
||||||
|| fBackBuffer->Height() != fFrontBuffer->Height()
|
|| fBackBuffer->Height() != fFrontBuffer->Height()
|
||||||
|| fOffscreenBackBuffer
|
|| fOffscreenBackBuffer
|
||||||
|| (fFrontBuffer->ColorSpace() == B_RGB32 && fBackBuffer.IsSet()
|
|| (fFrontBuffer->ColorSpace() == B_RGB32 && fBackBuffer.IsSet())) {
|
||||||
&& !HWInterface::IsDoubleBuffered())) {
|
|
||||||
// NOTE: backbuffer is always B_RGBA32, this simplifies the
|
// NOTE: backbuffer is always B_RGBA32, this simplifies the
|
||||||
// drawing backend implementation tremendously for the time
|
// drawing backend implementation tremendously for the time
|
||||||
// being. The color space conversion is handled in CopyBackToFront()
|
// 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!!!
|
// TODO: Above not true anymore for single buffered mode!!!
|
||||||
// -> fall back to double buffer for fDisplayMode.space != B_RGB32
|
// -> fall back to double buffer for fDisplayMode.space != B_RGB32
|
||||||
// as intermediate solution...
|
// as intermediate solution...
|
||||||
bool doubleBuffered = HWInterface::IsDoubleBuffered();
|
bool doubleBuffered = false;
|
||||||
if ((fFrontBuffer->ColorSpace() != B_RGB32
|
if ((fFrontBuffer->ColorSpace() != B_RGB32
|
||||||
&& fFrontBuffer->ColorSpace() != B_RGBA32)
|
&& fFrontBuffer->ColorSpace() != B_RGBA32)
|
||||||
|| fVGADevice >= 0 || fOffscreenBackBuffer)
|
|| fVGADevice >= 0 || fOffscreenBackBuffer)
|
||||||
|
|||||||
Reference in New Issue
Block a user