hrev48012 adds 1 changeset to branch 'master' old head: 1883fcfcde88fdc6f60bb2f0639a2cab88919047 new head: a3cdc7c5889d45d1005b83f4403ef0d82d40b77c overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=a3cdc7c+%5E1883fcf ---------------------------------------------------------------------------- a3cdc7c: Gravity and GLife: fix crash on start. Locking the GL context from a GLView subclass constructor can't work, as it isn't ready yet. Move the initial setup to AttachedToWindow instead. Fixes #8898, #10469. [ Adrien Destugues <pulkomandy@xxxxxxxxx> ] ---------------------------------------------------------------------------- Revision: hrev48012 Commit: a3cdc7c5889d45d1005b83f4403ef0d82d40b77c URL: http://cgit.haiku-os.org/haiku/commit/?id=a3cdc7c Author: Adrien Destugues <pulkomandy@xxxxxxxxx> Date: Mon Oct 13 13:29:46 2014 UTC Ticket: https://dev.haiku-os.org/ticket/8898 Ticket: https://dev.haiku-os.org/ticket/10469 ---------------------------------------------------------------------------- 2 files changed, 32 insertions(+), 38 deletions(-) src/add-ons/screen_savers/glife/GLifeView.cpp | 39 +++++++++----------- .../screen_savers/gravity/GravityView.cpp | 31 +++++++--------- ---------------------------------------------------------------------------- diff --git a/src/add-ons/screen_savers/glife/GLifeView.cpp b/src/add-ons/screen_savers/glife/GLifeView.cpp index 9b783c3..4e511e8 100644 --- a/src/add-ons/screen_savers/glife/GLifeView.cpp +++ b/src/add-ons/screen_savers/glife/GLifeView.cpp @@ -24,13 +24,29 @@ GLifeView::GLifeView(BRect rect, const char* name, ulong resizingMode, ulong options, GLifeState* pglsState) : - BGLView(rect, name, resizingMode, 0, options), + BGLView(rect, name, resizingMode, B_FRAME_EVENTS | B_WILL_DRAW, options), m_pglsState(pglsState) { // Setup the grid m_pglgGrid = new GLifeGrid(pglsState->GridWidth(), pglsState->GridHeight()); +} + + +// ------------------------------------------------------ +// GLifeView Class Destructor Definition +GLifeView::~GLifeView(void) +{ + delete m_pglgGrid; +} + +// ------------------------------------------------------ +// GLifeView Class AttachedToWindow Definition +void +GLifeView::AttachedToWindow(void) +{ LockGL(); + BGLView::AttachedToWindow(); glClearDepth(1.0); glDepthFunc(GL_LESS); @@ -43,7 +59,7 @@ GLifeView::GLifeView(BRect rect, const char* name, ulong resizingMode, #endif glMatrixMode(GL_PROJECTION); glLoadIdentity(); - gluPerspective(45.0, rect.Width() / rect.Height(), 2.0, 20000.0); + gluPerspective(45.0, Bounds().Width() / Bounds().Height(), 2.0, 20000.0); glTranslatef(0.0, 0.0, -50.0); glMatrixMode(GL_MODELVIEW); @@ -54,25 +70,6 @@ GLifeView::GLifeView(BRect rect, const char* name, ulong resizingMode, // ------------------------------------------------------ -// GLifeView Class Destructor Definition -GLifeView::~GLifeView(void) -{ - delete m_pglgGrid; -} - - -// ------------------------------------------------------ -// GLifeView Class AttachedToWindow Definition -void -GLifeView::AttachedToWindow(void) -{ - LockGL(); - BGLView::AttachedToWindow(); - UnlockGL(); -} - - -// ------------------------------------------------------ // GLifeView Class Draw Definition void GLifeView::Draw(BRect updateRect) diff --git a/src/add-ons/screen_savers/gravity/GravityView.cpp b/src/add-ons/screen_savers/gravity/GravityView.cpp index 3f92083..1b0dea7 100644 --- a/src/add-ons/screen_savers/gravity/GravityView.cpp +++ b/src/add-ons/screen_savers/gravity/GravityView.cpp @@ -29,8 +29,21 @@ GravityView::GravityView(BRect frame, Gravity* parent) fShade(parent->Config.ShadeID) { Particle::Initialize(fSize, fShade); +} + + +GravityView::~GravityView() +{ + Particle::Terminate(); + delete fGravitySource; +} + +void +GravityView::AttachedToWindow() +{ LockGL(); + BGLView::AttachedToWindow(); glClearDepth(1.0f); @@ -39,7 +52,7 @@ GravityView::GravityView(BRect frame, Gravity* parent) glMatrixMode(GL_PROJECTION); glLoadIdentity(); - gluPerspective(45.0f, frame.Width() / frame.Height(), 2.0f, 20000.0f); + gluPerspective(45.0f, Bounds().Width() / Bounds().Height(), 2.0f, 20000.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); @@ -51,22 +64,6 @@ GravityView::GravityView(BRect frame, Gravity* parent) } -GravityView::~GravityView() -{ - Particle::Terminate(); - delete fGravitySource; -} - - -void -GravityView::AttachedToWindow() -{ - LockGL(); - BGLView::AttachedToWindow(); - UnlockGL(); -} - - void GravityView::DirectDraw() {