winemac: Make the implementation of clearToBlackIfNeeded compatible with core contexts.

This commit is contained in:
Matteo Bruni 2015-01-08 15:07:47 +01:00 committed by Alexandre Julliard
parent 9d911d6ffe
commit e23f70b266
1 changed files with 27 additions and 2 deletions

View File

@ -85,16 +85,41 @@ - (void) clearToBlackIfNeeded
if (shouldClearToBlack) if (shouldClearToBlack)
{ {
NSOpenGLContext* origContext = [NSOpenGLContext currentContext]; NSOpenGLContext* origContext = [NSOpenGLContext currentContext];
const char *gl_version;
unsigned int major;
GLint draw_framebuffer_binding, draw_buffer;
GLboolean scissor_test, color_mask[4];
GLfloat clear_color[4];
[self makeCurrentContext]; [self makeCurrentContext];
glPushAttrib(GL_COLOR_BUFFER_BIT | GL_SCISSOR_BIT); gl_version = (const char *)glGetString(GL_VERSION);
major = gl_version[0] - '0';
/* FIXME: Should check for GL_ARB_framebuffer_object and GL_EXT_framebuffer_object
* for older GL versions. */
if (major >= 3)
{
glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &draw_framebuffer_binding);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
}
glGetIntegerv(GL_DRAW_BUFFER, &draw_buffer);
scissor_test = glIsEnabled(GL_SCISSOR_TEST);
glGetBooleanv(GL_COLOR_WRITEMASK, color_mask);
glGetFloatv(GL_COLOR_CLEAR_VALUE, clear_color);
glDrawBuffer(GL_FRONT_AND_BACK); glDrawBuffer(GL_FRONT_AND_BACK);
glDisable(GL_SCISSOR_TEST); glDisable(GL_SCISSOR_TEST);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glClearColor(0, 0, 0, 1); glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
glPopAttrib();
glClearColor(clear_color[0], clear_color[1], clear_color[2], clear_color[3]);
glColorMask(color_mask[0], color_mask[1], color_mask[2], color_mask[3]);
if (scissor_test)
glEnable(GL_SCISSOR_TEST);
glDrawBuffer(draw_buffer);
if (major >= 3)
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, draw_framebuffer_binding);
glFlush(); glFlush();
if (origContext) if (origContext)