X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2FxlockmoreI.h;h=7632a00cc94d81dc90e88aa9e87b9106e5e49f92;hb=c1b9b55ad8d59dc05ef55e316aebf5863e7dfa56;hp=48279640b7d074448807cf9a9ea61a782272d94f;hpb=5b7bc6e70fb439cf4c4bf771ae9f94077fe4fe08;p=xscreensaver diff --git a/hacks/xlockmoreI.h b/hacks/xlockmoreI.h index 48279640..7632a00c 100644 --- a/hacks/xlockmoreI.h +++ b/hacks/xlockmoreI.h @@ -1,5 +1,5 @@ /* xlockmore.h --- xscreensaver compatibility layer for xlockmore modules. - * xscreensaver, Copyright (c) 1997 Jamie Zawinski + * xscreensaver, Copyright (c) 1997-2008 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 @@ -15,7 +15,18 @@ #ifndef __XLOCKMORE_INTERNAL_H__ #define __XLOCKMORE_INTERNAL_H__ -#include "screenhack.h" +#include + +#include "screenhackI.h" + +#ifdef HAVE_XSHM_EXTENSION +# include "xshm.h" +#endif /* HAVE_XSHM_EXTENSION */ + + +typedef struct ModeInfo ModeInfo; + +#ifdef USE_GL /* I'm told that the Sun version of OpenGL needs to have the constant SUN_OGL_NO_VERTEX_MACROS defined in order for morph3d to compile @@ -23,11 +34,37 @@ Verified with gcc 2.7.2.2 and Sun cc 4.2 with OpenGL 1.1.1 dev 4 on Solaris 2.5.1. */ -#ifndef HAVE_MESA_GL -# if defined(__sun) && defined(__SVR4) /* Solaris */ -# define SUN_OGL_NO_VERTEX_MACROS 1 -# endif /* Solaris */ -#endif /* !HAVE_MESA_GL */ +# ifndef HAVE_MESA_GL +# if defined(__sun) && defined(__SVR4) /* Solaris */ +# define SUN_OGL_NO_VERTEX_MACROS 1 +# endif /* Solaris */ +# endif /* !HAVE_MESA_GL */ + +# ifdef HAVE_COCOA +# include +# else +# include +# include +# endif + + extern GLXContext *init_GL (ModeInfo *); + extern void clear_gl_error (void); + extern void check_gl_error (const char *type); + + extern Visual *xlockmore_pick_gl_visual (Screen *); + extern Bool xlockmore_validate_gl_visual (Screen *, const char *, Visual *); + +#endif /* !USE_GL */ + +/* These are only used in GL mode, but I don't understand why XCode + isn't seeing the prototypes for them in glx/fps-gl.c... */ +extern void do_fps (ModeInfo *); +extern void xlockmore_gl_compute_fps (Display *, Window, fps_state *, void *); +extern void xlockmore_gl_draw_fps (ModeInfo *); +# define do_fps xlockmore_gl_draw_fps + + +extern void xlockmore_setup (struct xscreensaver_function_table *, void *); /* Compatibility with the xlockmore RNG API @@ -39,10 +76,13 @@ #define SRAND(n) /* already seeded by screenhack.c */ -typedef struct ModeInfo { +struct ModeInfo { + struct xlockmore_function_table *xlmft; Display *dpy; Window window; Bool root_p; + int num_screens; + int screen_number; int npixels; unsigned long *pixels; XColor *colors; @@ -63,7 +103,18 @@ typedef struct ModeInfo { long threed_none_color; long threed_delta; Bool wireframe_p; -} ModeInfo; + Bool is_drawn; + + /* Used only by OpenGL programs, since FPS is tricky there. */ + fps_state *fpst; + Bool fps_p; + unsigned long polygon_count; + +#ifdef HAVE_XSHM_EXTENSION + Bool use_shm; + XShmSegmentInfo shm_info; +#endif +}; typedef enum { t_String, t_Float, t_Int, t_Bool } xlockmore_type; @@ -88,17 +139,20 @@ typedef struct { OptionStruct *desc; } ModeSpecOpt; -extern void xlockmore_screenhack (Display *dpy, Window window, - Bool want_writable_colors, - Bool want_uniform_colors, - Bool want_smooth_colors, - Bool want_bright_colors, - void (*hack_init) (ModeInfo *), - void (*hack_draw) (ModeInfo *), - void (*hack_free) (ModeInfo *)); - -#ifdef USE_GL -extern Visual *get_gl_visual (Screen *screen, char *name, char *class); -#endif +struct xlockmore_function_table { + const char *progclass; + const char *defaults; + Bool want_writable_colors; + enum { color_scheme_default, color_scheme_uniform, + color_scheme_smooth, color_scheme_bright } + desired_color_scheme; + void (*hack_init) (ModeInfo *); + void (*hack_draw) (ModeInfo *); + void (*hack_reshape) (ModeInfo *, int, int); + void (*hack_refresh) (ModeInfo *); + void (*hack_free) (ModeInfo *); + Bool (*hack_handle_events) (ModeInfo *, XEvent *); + ModeSpecOpt *opts; +}; #endif /* __XLOCKMORE_INTERNAL_H__ */