X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=OSX%2FXScreenSaverGLView.m;fp=OSX%2FXScreenSaverGLView.m;h=7af44038bc7c900eacd57a184f1b7657240c0939;hp=b08313efcdd7ebb12279f14a0074dcfcf724905d;hb=d5186197bc394e10a4402f7f6d23fbb14103bc50;hpb=6afd6db0ae9396cd7ff897ade597cd5483f49b0e diff --git a/OSX/XScreenSaverGLView.m b/OSX/XScreenSaverGLView.m index b08313ef..7af44038 100644 --- a/OSX/XScreenSaverGLView.m +++ b/OSX/XScreenSaverGLView.m @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 2006-2013 Jamie Zawinski +/* xscreensaver, Copyright (c) 2006-2014 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -223,26 +223,15 @@ extern void check_gl_error (const char *type); and discarded. That's ok, though, because mostly it's just calls to XClearWindow and housekeeping stuff like that. So we make a tiny one. */ -- (void) createBackbuffer +- (void) createBackbuffer:(CGSize)new_size { - // Don't resize the X11 window to match rotation. - // Rotation and scaling are handled in GL. - // -# ifdef USE_IPHONE - double s = [self hackedContentScaleFactor]; -# else - double s = 1; -# endif - // Store a realistic size in backbuffer_size, though the buffer is minimal. - NSRect f = [self bounds]; - backbuffer_size.width = (int) (s * f.size.width); - backbuffer_size.height = (int) (s * f.size.height); + backbuffer_size = new_size; if (! backbuffer) { CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB(); int w = 8; int h = 8; - backbuffer = CGBitmapContextCreate (NULL, w, h, + backbuffer = CGBitmapContextCreate (NULL, w, h, // yup, only 8px x 8px. 8, w*4, cs, kCGImageAlphaPremultipliedLast); CGColorSpaceRelease (cs); @@ -251,6 +240,16 @@ extern void check_gl_error (const char *type); # endif // USE_BACKBUFFER +/* When changing the device orientation, leave the X11 Window and glViewport + in portrait configuration. OpenGL hacks examine current_device_rotation() + within the scene as needed. + */ +- (BOOL)reshapeRotatedWindow +{ + return NO; +} + + - (void)dealloc { // ogl_ctx // gl_framebuffer @@ -419,6 +418,17 @@ init_GL (ModeInfo *mi) # endif // USE_IPHONE + // I don't know why this is necessary, but it beats randomly having some + // textures be upside down. + // + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + // Caller expects a pointer to an opaque struct... which it dereferences. // Don't ask me, it's historical... static int blort = -1;