summaryrefslogtreecommitdiffstats
path: root/hacks/glx/juggler3d.c
diff options
context:
space:
mode:
Diffstat (limited to 'hacks/glx/juggler3d.c')
-rw-r--r--hacks/glx/juggler3d.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/hacks/glx/juggler3d.c b/hacks/glx/juggler3d.c
index 0315029..1b7d7c6 100644
--- a/hacks/glx/juggler3d.c
+++ b/hacks/glx/juggler3d.c
@@ -640,6 +640,13 @@ ENTRYPOINT void
free_juggle(ModeInfo *mi) {
jugglestruct *sp = &juggles[MI_SCREEN(mi)];
+ if (!sp->glx_context) return;
+ glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *sp->glx_context);
+
+ if (sp->trackball) gltrackball_free (sp->trackball);
+ if (sp->rot) free_rotator (sp->rot);
+ if (sp->font_data) free_texture_font (sp->font_data);
+
if (sp->head != NULL) {
while (sp->head->next != sp->head) {
trajectory_destroy(sp->head->next);
@@ -668,7 +675,6 @@ add_throw(ModeInfo *mi, char type, int h, Notation n, const char* name)
ADD_ELEMENT(Trajectory, t, sp->head->prev);
if(t == NULL){ /* Out of Memory */
- free_juggle(mi);
return False;
}
t->object = NULL;
@@ -909,7 +915,6 @@ part(ModeInfo *mi)
t->action = CATCH;
ADD_ELEMENT(Trajectory, nt, p);
if(nt == NULL){
- free_juggle(mi);
return False;
}
nt->object = NULL;
@@ -2570,7 +2575,6 @@ refill_juggle(ModeInfo * mi)
positions(sp);
if (!projectile(sp)) {
- free_juggle(mi);
return;
}
@@ -2729,14 +2733,12 @@ init_juggle (ModeInfo * mi)
/* create circular trajectory list */
ADD_ELEMENT(Trajectory, sp->head, sp->head);
if(sp->head == NULL){
- free_juggle(mi);
return;
}
/* create circular object list */
ADD_ELEMENT(Object, sp->objects, sp->objects);
if(sp->objects == NULL){
- free_juggle(mi);
return;
}
@@ -2828,7 +2830,7 @@ draw_juggle (ModeInfo *mi)
if (!sp->glx_context)
return;
- glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sp->glx_context));
+ glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *sp->glx_context);
glShadeModel(GL_SMOOTH);