Fixed sf::Window::Create on OS X (Closes #86)

This commit is contained in:
Marco Antognini 2011-09-05 00:43:06 +02:00
parent 95a0126371
commit ecaafa9a18
4 changed files with 51 additions and 7 deletions

View File

@ -41,3 +41,11 @@ void RetainPool(void);
////////////////////////////////////////////////////////////
void ReleasePool(void);
////////////////////////////////////////////////////////////
/// \brief Drain the pool.
///
/// ReleasePool must be called at least once before DrainPool.
///
////////////////////////////////////////////////////////////
void DrainPool();

View File

@ -84,6 +84,12 @@ public :
////////////////////////////////////////////////////////////
void Release();
////////////////////////////////////////////////////////////
/// \brief Drain the pool
///
////////////////////////////////////////////////////////////
void Drain();
private:
////////////////////////////////////////////////////////////
@ -149,8 +155,7 @@ void PoolWrapper::Release()
// Drain pool if required.
if (count == 0) {
[pool drain];
pool = 0;
Drain();
}
#ifdef SFML_DEBUG
@ -160,6 +165,16 @@ void PoolWrapper::Release()
#endif
}
void PoolWrapper::Drain()
{
[pool drain];
pool = 0;
if (count != 0) {
pool = [[NSAutoreleasePool alloc] init];
}
}
} // namespace priv
@ -207,3 +222,18 @@ void ReleasePool(void)
#endif
}
////////////////////////////////////////////////////////////
void DrainPool()
{
if (localPool != NULL) {
localPool->Drain();
}
#ifdef SFML_DEBUG
else {
sf::Err() << "ReleasePool must be called at least one before DrainPool"
<< std::endl;
}
#endif
}

View File

@ -39,20 +39,22 @@ namespace priv
////////////////////////////////////////////////////////////
SFContext::SFContext(SFContext* shared)
: myView(0), myWindow(0)
: myView(0), myWindow(0)
{
// Ask for a pool.
RetainPool();
// Create the context
CreateContext(shared, VideoMode::GetDesktopMode().BitsPerPixel, ContextSettings(0, 0, 0));
CreateContext(shared,
VideoMode::GetDesktopMode().BitsPerPixel,
ContextSettings(0, 0, 0));
}
////////////////////////////////////////////////////////////
SFContext::SFContext(SFContext* shared, const ContextSettings& settings,
const WindowImpl* owner, unsigned int bitsPerPixel)
: myView(0), myWindow(0)
: myView(0), myWindow(0)
{
// Ask for a pool.
RetainPool();
@ -68,7 +70,7 @@ SFContext::SFContext(SFContext* shared, const ContextSettings& settings,
SFContext::SFContext(SFContext* shared, const ContextSettings& settings,
unsigned int width, unsigned int height)
: myView(0), myWindow(0)
: myView(0), myWindow(0)
{
// Ensure the process is setup in order to create a valid window.
WindowImplCocoa::SetUpProcess();

View File

@ -118,6 +118,10 @@ WindowImplCocoa::~WindowImplCocoa()
[myDelegate release];
ReleasePool();
DrainPool(); // Make sure everything was freed
// This solve some issue when sf::Window::Create is called for the
// second time (nothing was render until the function was called again)
}