ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/raypwin.c
(Generate patch)

Comparing ray/src/rt/raypwin.c (file contents):
Revision 2.4 by greg, Wed Feb 13 01:06:10 2008 UTC vs.
Revision 2.6 by greg, Tue Dec 15 19:13:45 2009 UTC

# Line 22 | Line 22 | int            ray_pnidle = 0;         /* number of idle children */
22  
23   static RAY      queued_ray;
24  
25 < extern void
25 > void
26   ray_pinit(              /* initialize ray-tracing processes */
27          char    *otnm,
28          int     nproc
# Line 34 | Line 34 | ray_pinit(             /* initialize ray-tracing processes */
34   }
35  
36  
37 < extern void
37 > int
38   ray_psend(                      /* add a ray to our send queue */
39          RAY     *r
40   )
41   {
42          if (r == NULL)
43 <                return;
43 >                return(0);
44          if (ray_pnidle <= 0)
45 <                error(INTERNAL, "illegal call to ray_psend");
45 >                return(0);
46          queued_ray = *r;
47          ray_pnidle = 0;
48 +        return(1);
49   }
50  
51  
52 < extern int
52 > int
53   ray_pqueue(                     /* queue a ray for computation */
54          RAY     *r
55   )
56   {
57          if (r == NULL)
58                  return(0);
59 +        if (ray_pnidle <= 0) {
60 +                RAY     new_ray = *r;
61 +                *r = queued_ray;
62 +                queued_ray = new_ray;
63 +        }
64          samplendx++;
65          rayvalue(r);
66          return(1);
67   }
68  
69  
70 < extern int
70 > int
71   ray_presult(            /* check for a completed ray */
72          RAY     *r,
73          int     poll
# Line 70 | Line 76 | ray_presult(           /* check for a completed ray */
76          if (r == NULL)
77                  return(0);
78          if (ray_pnidle <= 0) {
79 +                *r = queued_ray;
80                  samplendx++;
81                  rayvalue(r);
75                *r = queued_ray;
82                  ray_pnidle = 1;
83                  return(1);
84          }
# Line 80 | Line 86 | ray_presult(           /* check for a completed ray */
86   }
87  
88  
89 < extern void
89 > void
90   ray_pdone(              /* reap children and free data */
91          int     freall
92   )
# Line 90 | Line 96 | ray_pdone(             /* reap children and free data */
96   }
97  
98  
99 < extern void
99 > void
100   ray_popen(                      /* open the specified # processes */
101          int     nadd
102   )
103   {
104          if (ray_pnprocs + nadd > 1) {
105 <                error(WARNING, "Only single process supported");
105 >                error(WARNING, "only single process supported");
106                  nadd = 1 - ray_pnprocs;
107          }
108          ray_pnprocs += nadd;
# Line 104 | Line 110 | ray_popen(                     /* open the specified # processes */
110   }
111  
112  
113 < extern void
113 > void
114   ray_pclose(             /* close one or more child processes */
115          int     nsub
116   )

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines