"*suppressRotationAnimation: True\n" \
# define refresh_planet 0
+# define release_planet 0
# include "xlockmore.h" /* from the xscreensaver distribution */
#else /* !STANDALONE */
# include "xlock.h" /* from the xlockmore distribution */
#ifdef USE_MODULES
ModStruct planet_description =
-{"planet", "init_planet", "draw_planet", "release_planet",
+{"planet", "init_planet", "draw_planet", NULL,
"draw_planet", "init_planet", NULL, &planet_opts,
1000, 1, 2, 1, 4, 1.0, "",
"Animates texture mapped sphere (planet)", 0, NULL};
ENTRYPOINT void
reshape_planet (ModeInfo *mi, int width, int height)
{
+ planetstruct *gp = &planets[MI_SCREEN(mi)];
GLfloat h = (GLfloat) height / (GLfloat) width;
+ glXMakeCurrent(MI_DISPLAY(mi), gp->window, *(gp->glx_context));
+
glViewport(0, 0, (GLint) width, (GLint) height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
}
+static void free_planet (ModeInfo * mi);
+
+
ENTRYPOINT void
init_planet (ModeInfo * mi)
{
int screen = MI_SCREEN(mi);
Bool wire = MI_IS_WIREFRAME(mi);
- if (planets == NULL) {
- if ((planets = (planetstruct *) calloc(MI_NUM_SCREENS(mi),
- sizeof (planetstruct))) == NULL)
- return;
- }
+ MI_INIT (mi, planets, free_planet);
gp = &planets[screen];
+ gp->window = MI_WINDOW(mi);
+
if ((gp->glx_context = init_GL(mi)) != NULL) {
reshape_planet(mi, MI_WIDTH(mi), MI_HEIGHT(mi));
}
}
-ENTRYPOINT void
-release_planet (ModeInfo * mi)
+static void
+free_planet (ModeInfo * mi)
{
- if (planets != NULL) {
- int screen;
-
- for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
- planetstruct *gp = &planets[screen];
-
- if (gp->glx_context) {
- /* Display lists MUST be freed while their glXContext is current. */
- /* but this gets a BadMatch error. -jwz */
- /*glXMakeCurrent(MI_DISPLAY(mi), gp->window, *(gp->glx_context));*/
-
- if (glIsList(gp->platelist))
- glDeleteLists(gp->platelist, 1);
- if (glIsList(gp->starlist))
- glDeleteLists(gp->starlist, 1);
- }
- }
- (void) free((void *) planets);
- planets = NULL;
+ planetstruct *gp = &planets[MI_SCREEN(mi)];
+
+ if (gp->glx_context) {
+ glXMakeCurrent(MI_DISPLAY(mi), gp->window, *(gp->glx_context));
+
+ if (glIsList(gp->platelist))
+ glDeleteLists(gp->platelist, 1);
+ if (glIsList(gp->starlist))
+ glDeleteLists(gp->starlist, 1);
}
- FreeAllGL(mi);
}