5 |
|
#endif |
6 |
|
|
7 |
|
/* |
8 |
< |
* Routines for loading and displaying Radiance objects under OpenGL in rholo. |
8 |
> |
* Routines for loading and displaying Radiance objects in rholo with GLX. |
9 |
|
*/ |
10 |
|
|
11 |
|
#include "radogl.h" |
460 |
|
else |
461 |
|
return(cmderror(cn, "need octree [name]")); |
462 |
|
break; |
463 |
< |
case DO_UNLOAD: /* unload an object */ |
463 |
> |
case DO_UNLOAD: /* clear an object */ |
464 |
|
if (na > 1) goto toomany; |
465 |
|
if (na && alist[0][0] == '*') |
466 |
|
dobj_cleanup(); |
483 |
|
break; |
484 |
|
case DO_OBJECT: /* print object statistics */ |
485 |
|
if (dobj_putstats(na ? alist[0] : curname, sstdout)) |
486 |
< |
if (na && alist[0][0] != '*' && |
487 |
< |
strcmp(alist[0], curname)) |
486 |
> |
if (na && alist[0][0] != '*' && (curobj == NULL || |
487 |
> |
strcmp(alist[0], curobj->name))) |
488 |
|
savedxf(curobj = getdobj(alist[0])); |
489 |
|
break; |
490 |
|
case DO_DUP: /* duplicate object */ |
547 |
|
return(0); |
548 |
|
} |
549 |
|
if (getdobj(nam) != NULL) { |
550 |
< |
error(COMMAND, "name already taken (unload first)"); |
550 |
> |
error(COMMAND, "name already taken (clear first)"); |
551 |
|
return(0); |
552 |
|
} |
553 |
|
/* get octree path */ |
732 |
|
return(0); |
733 |
|
} |
734 |
|
if (getdobj(nam) != NULL) { |
735 |
< |
error(COMMAND, "name already taken (unload first)"); |
735 |
> |
error(COMMAND, "name already taken (clear first)"); |
736 |
|
return(0); |
737 |
|
} |
738 |
|
/* allocate and copy struct */ |
774 |
|
} else if ((op = getdobj(nam)) == NULL) { |
775 |
|
error(COMMAND, "unknown object"); |
776 |
|
return(0); |
777 |
< |
} else if ((op->drawcode = cn) == DO_LIGHT) |
778 |
< |
getdlights(op, 1); |
779 |
< |
else |
777 |
> |
} else if ((op->drawcode = cn) == DO_LIGHT) { |
778 |
> |
if (!getdlights(op, 1)) |
779 |
> |
error(COMMAND, "insufficient samples to light object"); |
780 |
> |
} else |
781 |
|
op->ol = NULL; |
782 |
|
|
783 |
|
if (dobj_lightsamp != NULL) { /* restore beam set */ |
852 |
|
return(1); |
853 |
|
/* set up general rendering params */ |
854 |
|
glGetBooleanv(GL_NORMALIZE, &normalizing); |
855 |
< |
glPushAttrib(GL_LIGHTING_BIT|GL_TRANSFORM_BIT| |
856 |
< |
GL_DEPTH_BUFFER_BIT|GL_POLYGON_BIT); |
855 |
> |
glPushAttrib(GL_LIGHTING_BIT|GL_TRANSFORM_BIT|GL_ENABLE_BIT| |
856 |
> |
GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_POLYGON_BIT); |
857 |
|
glDepthFunc(GL_LESS); |
858 |
|
glEnable(GL_DEPTH_TEST); |
859 |
|
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); |