1 /* xlockmore.h --- xscreensaver compatibility layer for xlockmore modules.
2 * xscreensaver, Copyright (c) 1997-2017 Jamie Zawinski <jwz@jwz.org>
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation. No representations are made about the suitability of this
9 * software for any purpose. It is provided "as is" without express or
12 * See xlockmore.h and xlockmore.c.
15 #ifndef __XLOCKMORE_INTERNAL_H__
16 #define __XLOCKMORE_INTERNAL_H__
20 #include "screenhackI.h"
24 typedef struct ModeInfo ModeInfo;
28 /* I'm told that the Sun version of OpenGL needs to have the constant
29 SUN_OGL_NO_VERTEX_MACROS defined in order for morph3d to compile
30 (the number of arguments to the glNormal3f macro changes...)
31 Verified with gcc 2.7.2.2 and Sun cc 4.2 with OpenGL 1.1.1 dev 4
35 # if defined(__sun) && defined(__SVR4) /* Solaris */
36 # define SUN_OGL_NO_VERTEX_MACROS 1
38 # endif /* !HAVE_MESA_GL */
42 # include <OpenGL/gl.h>
43 # include <OpenGL/glu.h>
45 # elif defined(HAVE_ANDROID)
55 # endif /* HAVE_JWZGLES */
61 extern GLXContext *init_GL (ModeInfo *);
62 extern void xlockmore_reset_gl_state(void);
63 extern void clear_gl_error (void);
64 extern void check_gl_error (const char *type);
66 extern Visual *xlockmore_pick_gl_visual (Screen *);
67 extern Bool xlockmore_validate_gl_visual (Screen *, const char *, Visual *);
71 /* These are only used in GL mode, but I don't understand why XCode
72 isn't seeing the prototypes for them in glx/fps-gl.c... */
73 extern void do_fps (ModeInfo *);
74 extern void xlockmore_gl_compute_fps (Display *, Window, fps_state *, void *);
75 extern void xlockmore_gl_draw_fps (ModeInfo *);
76 # define do_fps xlockmore_gl_draw_fps
79 extern void xlockmore_setup (struct xscreensaver_function_table *, void *);
80 extern void xlockmore_do_fps (Display *, Window, fps_state *, void *);
81 extern void xlockmore_mi_init (ModeInfo *, size_t, void **);
82 extern Bool xlockmore_no_events (ModeInfo *, XEvent *);
85 /* The xlockmore RNG API is implemented in utils/yarandom.h. */
89 struct xlockmore_function_table *xlmft;
95 unsigned long *pixels;
100 XWindowAttributes xgwa;
108 long threed_left_color;
109 long threed_right_color;
110 long threed_both_color;
111 long threed_none_color;
115 eraser_state *eraser;
118 /* Used only by OpenGL programs, since FPS is tricky there. */
121 unsigned long polygon_count; /* These values are for -fps display only */
122 double recursion_depth;
123 #if !defined HAVE_JWXYZ && defined HAVE_GL
124 GLXContext glx_context;
128 typedef enum { t_String, t_Float, t_Int, t_Bool } xlockmore_type;
145 XrmOptionDescRec *opts;
151 struct xlockmore_function_table {
152 const char *progclass;
153 const char *defaults;
154 Bool want_writable_colors;
155 enum { color_scheme_default, color_scheme_uniform,
156 color_scheme_smooth, color_scheme_bright }
157 desired_color_scheme;
158 void (*hack_init) (ModeInfo *);
159 void (*hack_draw) (ModeInfo *);
160 void (*hack_reshape) (ModeInfo *, int, int);
161 void (*hack_release) (ModeInfo *);
162 void (*hack_free) (ModeInfo *);
163 Bool (*hack_handle_events) (ModeInfo *, XEvent *);
167 unsigned long live_displays, got_init;
171 # define XLOCKMORE_NUM_SCREENS \
172 (sizeof(((struct xlockmore_function_table *)0)->live_displays) * 8)
174 # define XLOCKMORE_NUM_SCREENS 2 /* For DEBUG_PAIR. */
177 #endif /* __XLOCKMORE_INTERNAL_H__ */