--- ray/src/hd/rhdobj.c 1998/08/25 18:10:12 3.3 +++ ray/src/hd/rhdobj.c 1998/08/27 19:32:43 3.5 @@ -5,7 +5,7 @@ static char SCCSid[] = "$SunId$ SGI"; #endif /* - * Routines for loading and displaying Radiance objects under OpenGL in rholo. + * Routines for loading and displaying Radiance objects in rholo with GLX. */ #include "radogl.h" @@ -460,7 +460,7 @@ register char *args; else return(cmderror(cn, "need octree [name]")); break; - case DO_UNLOAD: /* unload an object */ + case DO_UNLOAD: /* clear an object */ if (na > 1) goto toomany; if (na && alist[0][0] == '*') dobj_cleanup(); @@ -483,8 +483,8 @@ register char *args; break; case DO_OBJECT: /* print object statistics */ if (dobj_putstats(na ? alist[0] : curname, sstdout)) - if (na && alist[0][0] != '*' && - strcmp(alist[0], curname)) + if (na && alist[0][0] != '*' && (curobj == NULL || + strcmp(alist[0], curobj->name))) savedxf(curobj = getdobj(alist[0])); break; case DO_DUP: /* duplicate object */ @@ -547,7 +547,7 @@ char *oct, *nam; return(0); } if (getdobj(nam) != NULL) { - error(COMMAND, "name already taken (unload first)"); + error(COMMAND, "name already taken (clear first)"); return(0); } /* get octree path */ @@ -732,7 +732,7 @@ char *oldnm, *nam; return(0); } if (getdobj(nam) != NULL) { - error(COMMAND, "name already taken (unload first)"); + error(COMMAND, "name already taken (clear first)"); return(0); } /* allocate and copy struct */ @@ -774,9 +774,10 @@ int cn; } else if ((op = getdobj(nam)) == NULL) { error(COMMAND, "unknown object"); return(0); - } else if ((op->drawcode = cn) == DO_LIGHT) - getdlights(op, 1); - else + } else if ((op->drawcode = cn) == DO_LIGHT) { + if (!getdlights(op, 1)) + error(COMMAND, "insufficient samples to light object"); + } else op->ol = NULL; if (dobj_lightsamp != NULL) { /* restore beam set */ @@ -851,8 +852,8 @@ dobj_render() /* render our objects in OpenGL */ return(1); /* set up general rendering params */ glGetBooleanv(GL_NORMALIZE, &normalizing); - glPushAttrib(GL_LIGHTING_BIT|GL_TRANSFORM_BIT| - GL_DEPTH_BUFFER_BIT|GL_POLYGON_BIT); + glPushAttrib(GL_LIGHTING_BIT|GL_TRANSFORM_BIT|GL_ENABLE_BIT| + GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_POLYGON_BIT); glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);