Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F92110554
raypwin.c
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sun, Nov 17, 10:58
Size
1 KB
Mime Type
text/x-c
Expires
Tue, Nov 19, 10:58 (2 d)
Engine
blob
Format
Raw Data
Handle
22377554
Attached To
R10977 RADIANCE Photon Map
raypwin.c
View Options
#ifndef lint
static const char RCSid[] = "$Id: raypwin.c,v 2.9 2019/01/08 00:16:31 greg Exp $";
#endif
/*
* raypwin.c - interface for parallel rendering using Radiance (Windows ver)
*
* External symbols declared in ray.h
*/
#include "copyright.h"
/*
* See raypcalls.c for an explanation of these routines.
*/
/***** XXX CURRENTLY, THIS IS JUST A COLLECTION OF IMPOTENT STUBS XXX *****/
#include "ray.h"
int ray_pnprocs = 0; /* number of child processes */
int ray_pnidle = 0; /* number of idle children */
static RAY queued_ray;
void
ray_pinit( /* initialize ray-tracing processes */
char *otnm,
int nproc
)
{
ray_pdone(0);
ray_init(otnm);
ray_popen(nproc);
}
int
ray_psend( /* add a ray to our send queue */
RAY *r
)
{
if (r == NULL)
return(0);
if (ray_pnidle <= 0)
return(0);
queued_ray = *r;
ray_pnidle = 0;
return(1);
}
int
ray_pqueue( /* queue a ray for computation */
RAY *r
)
{
RNUMBER rno;
if (r == NULL)
return(0);
if (ray_pnidle <= 0) {
RAY new_ray = *r;
*r = queued_ray;
queued_ray = new_ray;
}
rno = r->rno;
r->rno = raynum++;
samplendx++;
rayvalue(r);
r->rno = rno;
return(1);
}
int
ray_presult( /* check for a completed ray */
RAY *r,
int poll
)
{
if (r == NULL)
return(0);
if (ray_pnidle <= 0) {
*r = queued_ray;
r->rno = raynum++;
samplendx++;
rayvalue(r);
r->rno = queued_ray.rno;
ray_pnidle = 1;
return(1);
}
return(0);
}
void
ray_pdone( /* reap children and free data */
int freall
)
{
ray_done(freall);
ray_pnprocs = ray_pnidle = 0;
}
void
ray_popen( /* open the specified # processes */
int nadd
)
{
if (ray_pnprocs + nadd > 1) {
error(WARNING, "only single process supported");
nadd = 1 - ray_pnprocs;
}
ray_pnprocs += nadd;
ray_pnidle += nadd;
}
void
ray_pclose( /* close one or more child processes */
int nsub
)
{
if ((nsub <= 0) | (nsub > ray_pnprocs))
nsub = ray_pnprocs;
ray_pnprocs -= nsub;
if ((ray_pnidle -= nsub) < 0)
ray_pnidle = 0;
}
Event Timeline
Log In to Comment