--- ray/src/hd/rhdobj.c 1998/10/09 17:34:00 3.6 +++ ray/src/hd/rhdobj.c 1998/12/31 12:57:06 3.9 @@ -416,14 +416,13 @@ memerr: } -static int +static cmderror(cn, err) /* report command error */ int cn; char *err; { sprintf(errmsg, "%s: %s", rhdcmd[cn], err); error(COMMAND, errmsg); - return(cn); } @@ -432,6 +431,7 @@ dobj_command(cmd, args) /* run object display command char *cmd; register char *args; { + int somechange = 0; int cn, na, doxfm; register int nn; char *alist[MAXAC+1], *nm; @@ -459,15 +459,17 @@ register char *args; dobj_load(alist[0], alist[0]); else if (na == 2) dobj_load(alist[0], alist[1]); - else - return(cmderror(cn, "need octree [name]")); + else { + cmderror(cn, "need octree [name]"); + return(0); + } break; case DO_UNLOAD: /* clear an object */ if (na > 1) goto toomany; if (na && alist[0][0] == '*') - dobj_cleanup(); + somechange += dobj_cleanup(); else - dobj_unload(na ? alist[0] : curname); + somechange += dobj_unload(na ? alist[0] : curname); break; case DO_XFORM: /* transform object */ case DO_MOVE: @@ -476,12 +478,14 @@ register char *args; } else { nm = curname; nn = 0; } - if (cn == DO_MOVE && nn >= na) - return(cmderror(cn, "missing transform")); - dobj_xform(nm, cn==DO_MOVE, na-nn, alist+nn); + if (cn == DO_MOVE && nn >= na) { + cmderror(cn, "missing transform"); + return(0); + } + somechange += dobj_xform(nm, cn==DO_MOVE, na-nn, alist+nn); break; case DO_UNMOVE: /* undo last transform */ - dobj_unmove(); + somechange += dobj_unmove(); break; case DO_OBJECT: /* print object statistics */ if (dobj_putstats(na ? alist[0] : curname, sstdout)) @@ -495,7 +499,8 @@ register char *args; break; switch (nn) { case 0: - return(cmderror(cn, "need new object name")); + cmderror(cn, "need new object name"); + return(0); case 1: nm = curname; break; @@ -508,7 +513,7 @@ register char *args; if (!dobj_dup(nm, alist[nn-1])) break; if (na > nn) - dobj_xform(curname, 1, na-nn, alist+nn); + somechange += dobj_xform(curname, 1, na-nn, alist+nn); else curobj->drawcode = DO_HIDE; savedxf(curobj); @@ -518,12 +523,12 @@ register char *args; case DO_HIDE: if (na > 1) goto toomany; dobj_lighting(na ? alist[0] : curname, cn); + somechange++; break; default: error(CONSISTENCY, "bad command id in dobj_command"); } - dev_view(&odev.v); /* redraw */ - return(cn); + return(somechange); toomany: return(cmderror(cn, "too many arguments")); } @@ -571,6 +576,7 @@ char *oct, *nam; op->xfav[op->xfac=0] = NULL; /* load octree into display list */ dolights = 0; + domats = 1; op->listid = rgl_octlist(fpath, op->center, &op->radius); /* start rtrace */ rtargv[RTARGC-1] = fpath; @@ -866,8 +872,10 @@ FVECT rorg, rdir; } +int dobj_render() /* render our objects in OpenGL */ { + int nrendered = 0; GLboolean normalizing; GLfloat vec[4]; FVECT v1; @@ -878,7 +886,7 @@ dobj_render() /* render our objects in OpenGL */ if (op->drawcode != DO_HIDE) break; if (op == NULL) - return(1); + return(0); /* set up general rendering params */ glGetBooleanv(GL_NORMALIZE, &normalizing); glPushAttrib(GL_LIGHTING_BIT|GL_TRANSFORM_BIT|GL_ENABLE_BIT| @@ -964,6 +972,7 @@ dobj_render() /* render our objects in OpenGL */ } /* render the display list */ glCallList(op->listid); + nrendered++; /* restore matrix */ if (op->xfac) { glMatrixMode(GL_MODELVIEW); @@ -981,5 +990,5 @@ dobj_render() /* render our objects in OpenGL */ } glPopAttrib(); /* restore rendering params */ rgl_checkerr("rendering objects in dobj_render"); - return(1); + return(nrendered); }