-/* xscreensaver, Copyright (c) 2006-2014 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2006-2015 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
# define NSImage UIImage
# define NSEvent UIEvent
# define NSWindow UIWindow
+# define NSOpenGLContext EAGLContext
#else
# import <Cocoa/Cocoa.h>
# import <ScreenSaver/ScreenSaver.h>
#import "PrefsReader.h"
#ifdef USE_IPHONE
+
+@class XScreenSaverView;
+
+@protocol XScreenSaverViewDelegate
+- (void) wantsFadeOut:(XScreenSaverView *)saverView;
+- (void) didShake:(XScreenSaverView *)saverView;
+@end
+
@interface ScreenSaverView : NSView
- (id)initWithFrame:(NSRect)frame isPreview:(BOOL)isPreview;
- (NSTimeInterval)animationTimeInterval;
#define USE_BACKBUFFER // must be in sync with jwxyz.m
-
-// If USE_BACKBUFFER is enabled, one of these must also be enabled.
-// #define BACKBUFFER_CGCONTEXT // Not supported by iOS.
-#define BACKBUFFER_CALAYER
+// Currently only OpenGL backbuffers are supported (OSX and iOS).
+# define BACKBUFFER_OPENGL
@interface XScreenSaverView : ScreenSaverView
# ifdef USE_IPHONE
UIDeviceOrientation orientation, new_orientation;
BOOL screenLocked;
- CGSize initial_bounds; // portrait-mode geometry
+ CGSize initial_bounds; // portrait-mode size (pixels, not points).
- GLfloat rotation_ratio; // ratio thru rotation anim, or -1
- NSSize rot_from, rot_to; // start size rect, end size rect
- GLfloat angle_from, angle_to; // start angle, end angle
+ GLfloat rotation_ratio; // ratio [0-1] thru rotation anim, or -1
+ NSSize rot_current_size; // intermediate or at-rest orientation.
+ NSSize rot_from, rot_to; // start/end size rect (pixels, not points)
+ GLfloat rot_current_angle; // only right angles when rotation complete.
+ GLfloat angle_from, angle_to; // start angle, end angle (degrees)
double rot_start_time;
- BOOL ignore_rotation_p; // hack requests "always portrait".
- // some want this, some do not.
- NSSize rot_current_size; // current intermediate or final orientation.
- GLfloat rot_current_angle; // only right angles when rotation complete.
+ BOOL ignore_rotation_p; // whether hack requested "always portrait".
+ // some want this, some do not.
NSTimer *crash_timer;
NSDictionary *function_tables;
+ id<XScreenSaverViewDelegate> _delegate;
+
# endif // USE_IPHONE
# ifdef USE_BACKBUFFER
CGContextRef backbuffer;
- CGSize backbuffer_size;
+ CGSize backbuffer_size; // pixels, not points.
CGColorSpaceRef colorspace;
-# ifdef BACKBUFFER_CGCONTEXT
- CGContextRef window_ctx;
+# ifdef BACKBUFFER_OPENGL
+ void *backbuffer_data;
+ size_t backbuffer_len;
+
+ GLsizei gl_texture_w, gl_texture_h;
+
+ NSOpenGLContext *ogl_ctx; // OpenGL rendering context
+ GLuint backbuffer_texture;
+ GLenum gl_texture_target;
+ GLenum gl_pixel_format, gl_pixel_type;
+# ifndef USE_IPHONE
+ BOOL double_buffered_p, gl_apple_client_storage_p;
+# else // USE_IPHONE
+ BOOL gl_limited_npot_p;
+ GLuint gl_framebuffer, gl_renderbuffer;
+# endif // USE_IPHONE
# endif
# endif // USE_BACKBUFFER
- (void) render_x11;
- (void) prepareContext;
-- (void) resizeContext;
- (NSUserDefaultsController *) userDefaultsController;
+ (NSString *) decompressXML:(NSData *)xml;
#ifdef USE_IPHONE
-- (void)didRotate:(NSNotification *)notification;
- (BOOL)reshapeRotatedWindow;
- (void)setScreenLocked:(BOOL)locked;
-#endif // USE_IPHONE
+- (NSDictionary *)getGLProperties;
+- (void)addExtraRenderbuffers:(CGSize)size;
+@property (nonatomic, assign) id<XScreenSaverViewDelegate> delegate;
+#else // !USE_IPHONE
+- (NSOpenGLPixelFormat *)getGLPixelFormat;
+#endif // !USE_IPHONE
#ifdef USE_BACKBUFFER
-- (void)initLayer;
+- (void)enableBackbuffer:(CGSize)new_backbuffer_size;
- (void)createBackbuffer:(CGSize)s;
+- (void)drawBackbuffer;
+- (void)flushBackbuffer;
#endif // USE_BACKBUFFER
@end