Commit 18963963 authored by Ken Thomases's avatar Ken Thomases Committed by Alexandre Julliard

winemac: When clearing the OpenGL context, disassociate it from its view.

parent 1643038e
...@@ -90,6 +90,23 @@ ...@@ -90,6 +90,23 @@
} }
} }
- (void) removeFromViews:(BOOL)removeViews
{
if ([self view])
{
macdrv_remove_view_opengl_context((macdrv_view)[self view], (macdrv_opengl_context)self);
if (removeViews)
[self clearDrawableLeavingSurfaceOnScreen];
}
if ([self latentView])
{
macdrv_remove_view_opengl_context((macdrv_view)[self latentView], (macdrv_opengl_context)self);
if (removeViews)
[self setLatentView:nil];
}
needsUpdate = FALSE;
}
@end @end
...@@ -122,11 +139,7 @@ void macdrv_dispose_opengl_context(macdrv_opengl_context c) ...@@ -122,11 +139,7 @@ void macdrv_dispose_opengl_context(macdrv_opengl_context c)
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
WineOpenGLContext *context = (WineOpenGLContext*)c; WineOpenGLContext *context = (WineOpenGLContext*)c;
if ([context view]) [context removeFromViews:YES];
macdrv_remove_view_opengl_context((macdrv_view)[context view], c);
if ([context latentView])
macdrv_remove_view_opengl_context((macdrv_view)[context latentView], c);
[context clearDrawableLeavingSurfaceOnScreen];
[context release]; [context release];
[pool release]; [pool release];
...@@ -143,11 +156,7 @@ void macdrv_make_context_current(macdrv_opengl_context c, macdrv_view v) ...@@ -143,11 +156,7 @@ void macdrv_make_context_current(macdrv_opengl_context c, macdrv_view v)
if (context) if (context)
{ {
if ([context view]) [context removeFromViews:NO];
macdrv_remove_view_opengl_context((macdrv_view)[context view], c);
if ([context latentView])
macdrv_remove_view_opengl_context((macdrv_view)[context latentView], c);
context.needsUpdate = FALSE;
if (view) if (view)
{ {
macdrv_add_view_opengl_context(v, c); macdrv_add_view_opengl_context(v, c);
...@@ -169,11 +178,19 @@ void macdrv_make_context_current(macdrv_opengl_context c, macdrv_view v) ...@@ -169,11 +178,19 @@ void macdrv_make_context_current(macdrv_opengl_context c, macdrv_view v)
else else
{ {
[WineOpenGLContext clearCurrentContext]; [WineOpenGLContext clearCurrentContext];
[context clearDrawableLeavingSurfaceOnScreen]; [context removeFromViews:YES];
} }
} }
else else
[WineOpenGLContext clearCurrentContext]; {
WineOpenGLContext* currentContext = (WineOpenGLContext*)[WineOpenGLContext currentContext];
if ([currentContext isKindOfClass:[WineOpenGLContext class]])
{
[WineOpenGLContext clearCurrentContext];
[currentContext removeFromViews:YES];
}
}
[pool release]; [pool release];
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment