From 1333f5f77b3556974cac8ef2906ee03c3caf2875 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Thu, 14 Aug 2014 11:37:07 +0200 Subject: [PATCH] Fix GL screensavers in non-direct mode. DirectDraw is called only in direct drawing mode (BDirectWindow). Our GL kit also works fine (but slower) in indirect mode (standard BWindow, GL stuff rendered offscreen then blitted). However, for this to work we need the screensavers to actually do something. Use the BScreenSaver::Draw method, which is called in either case. This makes it possible to use indirect mode for the preview of GL screensavers. The performance isn't really a problem on the very small preview (160x200 pixels). Fixes GLife and Gravity. Flurry still crashes Mesa. --- src/add-ons/screen_savers/flurry/Flurry.cpp | 2 +- src/add-ons/screen_savers/flurry/Flurry.h | 2 +- src/add-ons/screen_savers/glife/GLifeSaver.cpp | 2 +- src/add-ons/screen_savers/glife/GLifeSaver.h | 4 ++-- src/add-ons/screen_savers/gravity/Gravity.cpp | 2 +- src/add-ons/screen_savers/gravity/Gravity.h | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/add-ons/screen_savers/flurry/Flurry.cpp b/src/add-ons/screen_savers/flurry/Flurry.cpp index d0b78b7a49..befa124e39 100644 --- a/src/add-ons/screen_savers/flurry/Flurry.cpp +++ b/src/add-ons/screen_savers/flurry/Flurry.cpp @@ -360,7 +360,7 @@ Flurry::StopSaver() void -Flurry::DirectDraw(int32 frame) +Flurry::Draw(BView*, int32 frame) { fFlurryView->DrawFlurryScreenSaver(); } diff --git a/src/add-ons/screen_savers/flurry/Flurry.h b/src/add-ons/screen_savers/flurry/Flurry.h index 26c35129d0..693884042c 100644 --- a/src/add-ons/screen_savers/flurry/Flurry.h +++ b/src/add-ons/screen_savers/flurry/Flurry.h @@ -54,7 +54,7 @@ public: virtual status_t StartSaver(BView* view, bool preview); virtual void StopSaver(); - virtual void DirectDraw(int32 frame); + virtual void Draw(BView*, int32 frame); virtual void DirectConnected(direct_buffer_info* info); virtual void StartConfig(BView* configView); diff --git a/src/add-ons/screen_savers/glife/GLifeSaver.cpp b/src/add-ons/screen_savers/glife/GLifeSaver.cpp index fdb0b7ca25..a243bb1dd0 100644 --- a/src/add-ons/screen_savers/glife/GLifeSaver.cpp +++ b/src/add-ons/screen_savers/glife/GLifeSaver.cpp @@ -111,7 +111,7 @@ GLifeSaver::DirectConnected(direct_buffer_info* pdbiInfo) // ------------------------------------------------------ // GLifeSaver Class DirectDraw Definition void -GLifeSaver::DirectDraw(int32 iFrame) +GLifeSaver::Draw(BView*, int32 iFrame) { fGLifeViewport->Advance(); } diff --git a/src/add-ons/screen_savers/glife/GLifeSaver.h b/src/add-ons/screen_savers/glife/GLifeSaver.h index 5aad6096de..c5cf131b69 100644 --- a/src/add-ons/screen_savers/glife/GLifeSaver.h +++ b/src/add-ons/screen_savers/glife/GLifeSaver.h @@ -29,7 +29,7 @@ public: // Constructor GLifeSaver(BMessage*, image_id); - // State/Preferences Methods + // State/Preferences Methods status_t SaveState(BMessage*) const; void RestoreState(BMessage*); void StartConfig(BView*); @@ -40,7 +40,7 @@ public: // Graphics Methods void DirectConnected(direct_buffer_info*); - void DirectDraw(int32); + void Draw(BView*, int32); private: GLifeState fGLifeState; diff --git a/src/add-ons/screen_savers/gravity/Gravity.cpp b/src/add-ons/screen_savers/gravity/Gravity.cpp index b78aee6dae..9786dd37fb 100644 --- a/src/add-ons/screen_savers/gravity/Gravity.cpp +++ b/src/add-ons/screen_savers/gravity/Gravity.cpp @@ -90,7 +90,7 @@ Gravity::DirectConnected(direct_buffer_info* info) void -Gravity::DirectDraw(int32 frame) +Gravity::Draw(BView*, int32 frame) { fGravityView->DirectDraw(); } diff --git a/src/add-ons/screen_savers/gravity/Gravity.h b/src/add-ons/screen_savers/gravity/Gravity.h index b549aa6078..80aa9a1118 100644 --- a/src/add-ons/screen_savers/gravity/Gravity.h +++ b/src/add-ons/screen_savers/gravity/Gravity.h @@ -39,7 +39,7 @@ public: void StopSaver(); void DirectConnected(direct_buffer_info* info); - void DirectDraw(int32 frame); + void Draw(BView*, int32 frame); private: GravityView* fGravityView;