Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/g4tools/include/tools/glprims

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /externals/g4tools/include/tools/glprims (Version 11.3.0) and /externals/g4tools/include/tools/glprims (Version 10.1.p3)


  1 // Copyright (C) 2010, Guy Barrand. All rights    
  2 // See the file tools.license for terms.          
  3                                                   
  4 #ifndef tools_glprims                             
  5 #define tools_glprims                             
  6                                                   
  7 //same as OpenGL GL_[POINTS,etc...], but for t    
  8                                                   
  9 #include <cstddef> //size_t                       
 10                                                   
 11 namespace tools {                                 
 12 namespace gl {                                    
 13                                                   
 14 typedef unsigned char mode_t;                     
 15                                                   
 16 inline mode_t points()         {return 0x0000;    
 17 inline mode_t lines()          {return 0x0001;    
 18 inline mode_t line_loop()      {return 0x0002;    
 19 inline mode_t line_strip()     {return 0x0003;    
 20 inline mode_t triangles()      {return 0x0004;    
 21 inline mode_t triangle_strip() {return 0x0005;    
 22 inline mode_t triangle_fan()   {return 0x0006;    
 23 //inline mode_t quads()          {return 0x000    
 24 //inline mode_t quad_strip()     {return 0x000    
 25 //inline mode_t polygon()        {return 0x000    
 26                                                   
 27 inline bool is_mode(mode_t a_mode) {              
 28   return a_mode<=0x006?true:false;                
 29 }                                                 
 30                                                   
 31 inline bool is_line(mode_t a_mode) {              
 32   if(a_mode==points())     return true; //0 sz    
 33   if(a_mode==lines())      return true;           
 34   if(a_mode==line_loop())  return true;           
 35   if(a_mode==line_strip()) return true;           
 36   return false;                                   
 37 }                                                 
 38                                                   
 39 inline void cvt_2to3(size_t a_npt,const float*    
 40   const float* vpos = a_xys;                      
 41   float x,y;                                      
 42   for(size_t i=0;i<a_npt;i++) {                   
 43     x = *vpos;vpos++;                             
 44     y = *vpos;vpos++;                             
 45     *a_xyzs = x;a_xyzs++;                         
 46     *a_xyzs = y;a_xyzs++;                         
 47     *a_xyzs = 0;a_xyzs++;                         
 48   }                                               
 49 }                                                 
 50                                                   
 51                                                   
 52 inline void triangle_fan_to_triangles(size_t a    
 53   // a_pxyzs = (a_npt-2)*3*3                      
 54                                                   
 55   const float* vpos = a_xyzs;                     
 56                                                   
 57   float x1 = *vpos;vpos++;                        
 58   float y1 = *vpos;vpos++;                        
 59   float z1 = *vpos;vpos++;                        
 60                                                   
 61   float x2 = *vpos;vpos++;                        
 62   float y2 = *vpos;vpos++;                        
 63   float z2 = *vpos;vpos++;                        
 64                                                   
 65   float x3,y3,z3;                                 
 66   for(size_t i=2;i<a_npt;i++) {                   
 67     x3 = *vpos;vpos++;                            
 68     y3 = *vpos;vpos++;                            
 69     z3 = *vpos;vpos++;                            
 70     *a_pxyzs = x1;a_pxyzs++;                      
 71     *a_pxyzs = y1;a_pxyzs++;                      
 72     *a_pxyzs = z1;a_pxyzs++;                      
 73                                                   
 74     *a_pxyzs = x2;a_pxyzs++;                      
 75     *a_pxyzs = y2;a_pxyzs++;                      
 76     *a_pxyzs = z2;a_pxyzs++;                      
 77                                                   
 78     *a_pxyzs = x3;a_pxyzs++;                      
 79     *a_pxyzs = y3;a_pxyzs++;                      
 80     *a_pxyzs = z3;a_pxyzs++;                      
 81                                                   
 82     x2 = x3;                                      
 83     y2 = y3;                                      
 84     z2 = z3;                                      
 85   }                                               
 86                                                   
 87 }                                                 
 88                                                   
 89 inline void triangle_fan_to_triangles_texture(    
 90   // a_pxyzs = (a_npt-2)*3*3                      
 91                                                   
 92   // a_ptcs = (a_npt-2)*3*2                       
 93                                                   
 94   const float* vpos = a_xyzs;                     
 95   const float* tpos = a_tcs;                      
 96                                                   
 97   float x1 = *vpos;vpos++;                        
 98   float y1 = *vpos;vpos++;                        
 99   float z1 = *vpos;vpos++;                        
100                                                   
101   float tx1 = *tpos;tpos++;                       
102   float ty1 = *tpos;tpos++;                       
103                                                   
104   float x2 = *vpos;vpos++;                        
105   float y2 = *vpos;vpos++;                        
106   float z2 = *vpos;vpos++;                        
107                                                   
108   float tx2 = *tpos;tpos++;                       
109   float ty2 = *tpos;tpos++;                       
110                                                   
111   float x3,y3,z3,tx3,ty3;                         
112   for(size_t i=2;i<a_npt;i++) {                   
113     x3 = *vpos;vpos++;                            
114     y3 = *vpos;vpos++;                            
115     z3 = *vpos;vpos++;                            
116                                                   
117     tx3 = *tpos;tpos++;                           
118     ty3 = *tpos;tpos++;                           
119                                                   
120     *a_pxyzs = x1;a_pxyzs++;                      
121     *a_pxyzs = y1;a_pxyzs++;                      
122     *a_pxyzs = z1;a_pxyzs++;                      
123                                                   
124     *a_ptcs = tx1;a_ptcs++;                       
125     *a_ptcs = ty1;a_ptcs++;                       
126                                                   
127     *a_pxyzs = x2;a_pxyzs++;                      
128     *a_pxyzs = y2;a_pxyzs++;                      
129     *a_pxyzs = z2;a_pxyzs++;                      
130                                                   
131     *a_ptcs = tx2;a_ptcs++;                       
132     *a_ptcs = ty2;a_ptcs++;                       
133                                                   
134     *a_pxyzs = x3;a_pxyzs++;                      
135     *a_pxyzs = y3;a_pxyzs++;                      
136     *a_pxyzs = z3;a_pxyzs++;                      
137                                                   
138     *a_ptcs = tx3;a_ptcs++;                       
139     *a_ptcs = ty3;a_ptcs++;                       
140                                                   
141     x2 = x3;                                      
142     y2 = y3;                                      
143     z2 = z3;                                      
144                                                   
145     tx2 = tx3;                                    
146     ty2 = ty3;                                    
147   }                                               
148                                                   
149 }                                                 
150                                                   
151 inline void triangle_strip_to_triangles(size_t    
152   // a_pxyzs = (a_npt-2)*3*3                      
153                                                   
154   const float* vpos = a_xyzs;                     
155                                                   
156   float x1 = *vpos;vpos++;                        
157   float y1 = *vpos;vpos++;                        
158   float z1 = *vpos;vpos++;                        
159                                                   
160   float x2 = *vpos;vpos++;                        
161   float y2 = *vpos;vpos++;                        
162   float z2 = *vpos;vpos++;                        
163                                                   
164   float x3,y3,z3;                                 
165   bool flip = false;                              
166   for(size_t i=2;i<a_npt;i++) {                   
167     x3 = *vpos;vpos++;                            
168     y3 = *vpos;vpos++;                            
169     z3 = *vpos;vpos++;                            
170                                                   
171     if(flip) {                                    
172       *a_pxyzs = x1;a_pxyzs++;                    
173       *a_pxyzs = y1;a_pxyzs++;                    
174       *a_pxyzs = z1;a_pxyzs++;                    
175                                                   
176       *a_pxyzs = x3;a_pxyzs++;                    
177       *a_pxyzs = y3;a_pxyzs++;                    
178       *a_pxyzs = z3;a_pxyzs++;                    
179                                                   
180       *a_pxyzs = x2;a_pxyzs++;                    
181       *a_pxyzs = y2;a_pxyzs++;                    
182       *a_pxyzs = z2;a_pxyzs++;                    
183     } else {                                      
184       *a_pxyzs = x1;a_pxyzs++;                    
185       *a_pxyzs = y1;a_pxyzs++;                    
186       *a_pxyzs = z1;a_pxyzs++;                    
187                                                   
188       *a_pxyzs = x2;a_pxyzs++;                    
189       *a_pxyzs = y2;a_pxyzs++;                    
190       *a_pxyzs = z2;a_pxyzs++;                    
191                                                   
192       *a_pxyzs = x3;a_pxyzs++;                    
193       *a_pxyzs = y3;a_pxyzs++;                    
194       *a_pxyzs = z3;a_pxyzs++;                    
195     }                                             
196                                                   
197     x1 = x2;                                      
198     y1 = y2;                                      
199     z1 = z2;                                      
200                                                   
201     x2 = x3;                                      
202     y2 = y3;                                      
203     z2 = z3;                                      
204                                                   
205     flip = flip?false:true;                       
206   }                                               
207 }                                                 
208                                                   
209 inline void triangle_strip_to_triangles_textur    
210   // a_pxyzs = (a_npt-2)*3*3                      
211   // a_ptcs = (a_npt-2)*3*2                       
212                                                   
213   const float* vpos = a_xyzs;                     
214   const float* tpos = a_tcs;                      
215                                                   
216   float x1 = *vpos;vpos++;                        
217   float y1 = *vpos;vpos++;                        
218   float z1 = *vpos;vpos++;                        
219                                                   
220   float tx1 = *tpos;tpos++;                       
221   float ty1 = *tpos;tpos++;                       
222                                                   
223   float x2 = *vpos;vpos++;                        
224   float y2 = *vpos;vpos++;                        
225   float z2 = *vpos;vpos++;                        
226                                                   
227   float tx2 = *tpos;tpos++;                       
228   float ty2 = *tpos;tpos++;                       
229                                                   
230   float x3,y3,z3,tx3,ty3;                         
231   bool flip = false;                              
232   for(size_t i=2;i<a_npt;i++) {                   
233     x3 = *vpos;vpos++;                            
234     y3 = *vpos;vpos++;                            
235     z3 = *vpos;vpos++;                            
236                                                   
237     tx3 = *tpos;tpos++;                           
238     ty3 = *tpos;tpos++;                           
239                                                   
240     if(flip) {                                    
241       *a_pxyzs = x1;a_pxyzs++;                    
242       *a_pxyzs = y1;a_pxyzs++;                    
243       *a_pxyzs = z1;a_pxyzs++;                    
244                                                   
245       *a_ptcs = tx1;a_ptcs++;                     
246       *a_ptcs = ty1;a_ptcs++;                     
247                                                   
248       *a_pxyzs = x3;a_pxyzs++;                    
249       *a_pxyzs = y3;a_pxyzs++;                    
250       *a_pxyzs = z3;a_pxyzs++;                    
251                                                   
252       *a_ptcs = tx3;a_ptcs++;                     
253       *a_ptcs = ty3;a_ptcs++;                     
254                                                   
255       *a_pxyzs = x2;a_pxyzs++;                    
256       *a_pxyzs = y2;a_pxyzs++;                    
257       *a_pxyzs = z2;a_pxyzs++;                    
258                                                   
259       *a_ptcs = tx2;a_ptcs++;                     
260       *a_ptcs = ty2;a_ptcs++;                     
261     } else {                                      
262       *a_pxyzs = x1;a_pxyzs++;                    
263       *a_pxyzs = y1;a_pxyzs++;                    
264       *a_pxyzs = z1;a_pxyzs++;                    
265                                                   
266       *a_ptcs = tx1;a_ptcs++;                     
267       *a_ptcs = ty1;a_ptcs++;                     
268                                                   
269       *a_pxyzs = x2;a_pxyzs++;                    
270       *a_pxyzs = y2;a_pxyzs++;                    
271       *a_pxyzs = z2;a_pxyzs++;                    
272                                                   
273       *a_ptcs = tx2;a_ptcs++;                     
274       *a_ptcs = ty2;a_ptcs++;                     
275                                                   
276       *a_pxyzs = x3;a_pxyzs++;                    
277       *a_pxyzs = y3;a_pxyzs++;                    
278       *a_pxyzs = z3;a_pxyzs++;                    
279                                                   
280       *a_ptcs = tx3;a_ptcs++;                     
281       *a_ptcs = ty3;a_ptcs++;                     
282     }                                             
283                                                   
284     x1 = x2;                                      
285     y1 = y2;                                      
286     z1 = z2;                                      
287                                                   
288     tx1 = tx2;                                    
289     ty1 = ty2;                                    
290                                                   
291     x2 = x3;                                      
292     y2 = y3;                                      
293     z2 = z3;                                      
294                                                   
295     tx2 = tx3;                                    
296     ty2 = ty3;                                    
297                                                   
298     flip = flip?false:true;                       
299   }                                               
300 }                                                 
301                                                   
302 inline void triangle_fan_to_triangles_nms(size    
303   triangle_fan_to_triangles(a_npt,a_xyzs,a_pxy    
304   triangle_fan_to_triangles(a_npt,a_nms,a_pnms    
305 }                                                 
306                                                   
307 inline void triangle_strip_to_triangles_nms(si    
308   // a_pxyzs, a_pnms = (a_npt-2)*3*3              
309   triangle_strip_to_triangles(a_npt,a_xyzs,a_p    
310   triangle_strip_to_triangles(a_npt,a_nms,a_pn    
311 }                                                 
312                                                   
313 inline void triangle_fan_to_triangles_2to3(siz    
314                                                   
315   const float* vpos = a_xyzs;                     
316                                                   
317   float x1 = *vpos;vpos++;                        
318   float y1 = *vpos;vpos++;                        
319                                                   
320   float x2 = *vpos;vpos++;                        
321   float y2 = *vpos;vpos++;                        
322                                                   
323   float x3,y3;                                    
324   for(size_t i=2;i<a_npt;i++) {                   
325     x3 = *vpos;vpos++;                            
326     y3 = *vpos;vpos++;                            
327                                                   
328     *a_pxyzs = x1;a_pxyzs++;                      
329     *a_pxyzs = y1;a_pxyzs++;                      
330     *a_pxyzs = 0;a_pxyzs++;                       
331                                                   
332     *a_pxyzs = x2;a_pxyzs++;                      
333     *a_pxyzs = y2;a_pxyzs++;                      
334     *a_pxyzs = 0;a_pxyzs++;                       
335                                                   
336     *a_pxyzs = x3;a_pxyzs++;                      
337     *a_pxyzs = y3;a_pxyzs++;                      
338     *a_pxyzs = 0;a_pxyzs++;                       
339                                                   
340     x2 = x3;                                      
341     y2 = y3;                                      
342   }                                               
343                                                   
344 }                                                 
345                                                   
346 inline void triangle_strip_to_triangles_2to3(s    
347                                                   
348   const float* vpos = a_xyzs;                     
349                                                   
350   float x1 = *vpos;vpos++;                        
351   float y1 = *vpos;vpos++;                        
352                                                   
353   float x2 = *vpos;vpos++;                        
354   float y2 = *vpos;vpos++;                        
355                                                   
356   float x3,y3;                                    
357   bool flip = false;                              
358   for(size_t i=2;i<a_npt;i++) {                   
359     x3 = *vpos;vpos++;                            
360     y3 = *vpos;vpos++;                            
361                                                   
362     if(flip) {                                    
363       *a_pxyzs = x1;a_pxyzs++;                    
364       *a_pxyzs = y1;a_pxyzs++;                    
365       *a_pxyzs = 0;a_pxyzs++;                     
366                                                   
367       *a_pxyzs = x3;a_pxyzs++;                    
368       *a_pxyzs = y3;a_pxyzs++;                    
369       *a_pxyzs = 0;a_pxyzs++;                     
370                                                   
371       *a_pxyzs = x2;a_pxyzs++;                    
372       *a_pxyzs = y2;a_pxyzs++;                    
373       *a_pxyzs = 0;a_pxyzs++;                     
374     } else {                                      
375       *a_pxyzs = x1;a_pxyzs++;                    
376       *a_pxyzs = y1;a_pxyzs++;                    
377       *a_pxyzs = 0;a_pxyzs++;                     
378                                                   
379       *a_pxyzs = x2;a_pxyzs++;                    
380       *a_pxyzs = y2;a_pxyzs++;                    
381       *a_pxyzs = 0;a_pxyzs++;                     
382                                                   
383       *a_pxyzs = x3;a_pxyzs++;                    
384       *a_pxyzs = y3;a_pxyzs++;                    
385       *a_pxyzs = 0;a_pxyzs++;                     
386     }                                             
387                                                   
388     x1 = x2;                                      
389     y1 = y2;                                      
390                                                   
391     x2 = x3;                                      
392     y2 = y3;                                      
393                                                   
394     flip = flip?false:true;                       
395   }                                               
396                                                   
397 }                                                 
398                                                   
399 inline void line_strip_to_lines_2to3(size_t a_    
400                                                   
401   const float* vpos = a_xyzs;                     
402                                                   
403   float x1 = *vpos;vpos++;                        
404   float y1 = *vpos;vpos++;                        
405                                                   
406   float x2,y2;                                    
407   for(size_t i=1;i<a_npt;i++) {                   
408     x2 = *vpos;vpos++;                            
409     y2 = *vpos;vpos++;                            
410                                                   
411     *a_pxyzs = x1;a_pxyzs++;                      
412     *a_pxyzs = y1;a_pxyzs++;                      
413     *a_pxyzs = 0;a_pxyzs++;                       
414                                                   
415     *a_pxyzs = x2;a_pxyzs++;                      
416     *a_pxyzs = y2;a_pxyzs++;                      
417     *a_pxyzs = 0;a_pxyzs++;                       
418                                                   
419     x1 = x2;                                      
420     y1 = y2;                                      
421   }                                               
422                                                   
423 }                                                 
424                                                   
425 inline void line_strip_to_lines(size_t a_npt,c    
426   // a_pxyzs = (a_npt-1)*2*3                      
427                                                   
428   const float* vpos = a_xyzs;                     
429                                                   
430   float x1 = *vpos;vpos++;                        
431   float y1 = *vpos;vpos++;                        
432   float z1 = *vpos;vpos++;                        
433                                                   
434   float x2,y2,z2;                                 
435   for(size_t i=1;i<a_npt;i++) {                   
436     x2 = *vpos;vpos++;                            
437     y2 = *vpos;vpos++;                            
438     z2 = *vpos;vpos++;                            
439                                                   
440     *a_pxyzs = x1;a_pxyzs++;                      
441     *a_pxyzs = y1;a_pxyzs++;                      
442     *a_pxyzs = z1;a_pxyzs++;                      
443                                                   
444     *a_pxyzs = x2;a_pxyzs++;                      
445     *a_pxyzs = y2;a_pxyzs++;                      
446     *a_pxyzs = z2;a_pxyzs++;                      
447                                                   
448     x1 = x2;                                      
449     y1 = y2;                                      
450     z1 = z2;                                      
451   }                                               
452                                                   
453 }                                                 
454                                                   
455 inline void line_loop_to_lines(size_t a_npt,co    
456   // a_pxyzs = a_npt*2*3                          
457                                                   
458   const float* vpos = a_xyzs;                     
459                                                   
460   float x1 = *vpos;vpos++;                        
461   float y1 = *vpos;vpos++;                        
462   float z1 = *vpos;vpos++;                        
463                                                   
464   float x0 = x1;                                  
465   float y0 = y1;                                  
466   float z0 = z1;                                  
467                                                   
468   float x2,y2,z2;                                 
469   for(size_t i=1;i<a_npt;i++) {                   
470     x2 = *vpos;vpos++;                            
471     y2 = *vpos;vpos++;                            
472     z2 = *vpos;vpos++;                            
473                                                   
474     *a_pxyzs = x1;a_pxyzs++;                      
475     *a_pxyzs = y1;a_pxyzs++;                      
476     *a_pxyzs = z1;a_pxyzs++;                      
477                                                   
478     *a_pxyzs = x2;a_pxyzs++;                      
479     *a_pxyzs = y2;a_pxyzs++;                      
480     *a_pxyzs = z2;a_pxyzs++;                      
481                                                   
482     x1 = x2;                                      
483     y1 = y2;                                      
484     z1 = z2;                                      
485   }                                               
486                                                   
487   *a_pxyzs = x1;a_pxyzs++;                        
488   *a_pxyzs = y1;a_pxyzs++;                        
489   *a_pxyzs = z1;a_pxyzs++;                        
490                                                   
491   *a_pxyzs = x0;a_pxyzs++;                        
492   *a_pxyzs = y0;a_pxyzs++;                        
493   *a_pxyzs = z0;a_pxyzs++;                        
494                                                   
495 }                                                 
496                                                   
497 inline void line_loop_to_line_strip(size_t a_n    
498   // a_pxyzs = (a_npt+1)*3                        
499                                                   
500   const float* vpos = a_xyzs;                     
501                                                   
502   float x1 = *vpos;vpos++;                        
503   float y1 = *vpos;vpos++;                        
504   float z1 = *vpos;vpos++;                        
505                                                   
506   for(size_t i=0;i<a_npt;i++) {                   
507     *a_pxyzs = *vpos;vpos++;a_pxyzs++;            
508     *a_pxyzs = *vpos;vpos++;a_pxyzs++;            
509     *a_pxyzs = *vpos;vpos++;a_pxyzs++;            
510   }                                               
511                                                   
512   *a_pxyzs = x1;a_pxyzs++;                        
513   *a_pxyzs = y1;a_pxyzs++;                        
514   *a_pxyzs = z1;a_pxyzs++;                        
515 }                                                 
516                                                   
517 /// for DirectX_action :                          
518 inline void triangle_fan_to_triangles_2to3(siz    
519                                            flo    
520              float*& a_pxyz_rgbas) {              
521                                                   
522   const float* vpos = a_xyzs;                     
523                                                   
524   float x1 = *vpos;vpos++;                        
525   float y1 = *vpos;vpos++;                        
526                                                   
527   float x2 = *vpos;vpos++;                        
528   float y2 = *vpos;vpos++;                        
529                                                   
530   float x3,y3;                                    
531   for(size_t i=2;i<a_npt;i++) {                   
532     x3 = *vpos;vpos++;                            
533     y3 = *vpos;vpos++;                            
534                                                   
535     *a_pxyz_rgbas = x1;a_pxyz_rgbas++;            
536     *a_pxyz_rgbas = y1;a_pxyz_rgbas++;            
537     *a_pxyz_rgbas = 0;a_pxyz_rgbas++;             
538                                                   
539     *a_pxyz_rgbas = a_r;a_pxyz_rgbas++;           
540     *a_pxyz_rgbas = a_g;a_pxyz_rgbas++;           
541     *a_pxyz_rgbas = a_b;a_pxyz_rgbas++;           
542     *a_pxyz_rgbas = a_a;a_pxyz_rgbas++;           
543                                                   
544     *a_pxyz_rgbas = x2;a_pxyz_rgbas++;            
545     *a_pxyz_rgbas = y2;a_pxyz_rgbas++;            
546     *a_pxyz_rgbas = 0;a_pxyz_rgbas++;             
547                                                   
548     *a_pxyz_rgbas = a_r;a_pxyz_rgbas++;           
549     *a_pxyz_rgbas = a_g;a_pxyz_rgbas++;           
550     *a_pxyz_rgbas = a_b;a_pxyz_rgbas++;           
551     *a_pxyz_rgbas = a_a;a_pxyz_rgbas++;           
552                                                   
553     *a_pxyz_rgbas = x3;a_pxyz_rgbas++;            
554     *a_pxyz_rgbas = y3;a_pxyz_rgbas++;            
555     *a_pxyz_rgbas = 0;a_pxyz_rgbas++;             
556                                                   
557     *a_pxyz_rgbas = a_r;a_pxyz_rgbas++;           
558     *a_pxyz_rgbas = a_g;a_pxyz_rgbas++;           
559     *a_pxyz_rgbas = a_b;a_pxyz_rgbas++;           
560     *a_pxyz_rgbas = a_a;a_pxyz_rgbas++;           
561                                                   
562     x2 = x3;                                      
563     y2 = y3;                                      
564   }                                               
565 }                                                 
566                                                   
567 inline void triangle_fan_to_triangles(size_t a    
568                                       float a_    
569               float*& a_pxyz_rgbas) {             
570                                                   
571   const float* vpos = a_xyzs;                     
572                                                   
573   float x1 = *vpos;vpos++;                        
574   float y1 = *vpos;vpos++;                        
575   float z1 = *vpos;vpos++;                        
576                                                   
577   float x2 = *vpos;vpos++;                        
578   float y2 = *vpos;vpos++;                        
579   float z2 = *vpos;vpos++;                        
580                                                   
581   float x3,y3,z3;                                 
582   for(size_t i=2;i<a_npt;i++) {                   
583     x3 = *vpos;vpos++;                            
584     y3 = *vpos;vpos++;                            
585     z3 = *vpos;vpos++;                            
586                                                   
587     *a_pxyz_rgbas = x1;a_pxyz_rgbas++;            
588     *a_pxyz_rgbas = y1;a_pxyz_rgbas++;            
589     *a_pxyz_rgbas = z1;a_pxyz_rgbas++;            
590                                                   
591     *a_pxyz_rgbas = a_r;a_pxyz_rgbas++;           
592     *a_pxyz_rgbas = a_g;a_pxyz_rgbas++;           
593     *a_pxyz_rgbas = a_b;a_pxyz_rgbas++;           
594     *a_pxyz_rgbas = a_a;a_pxyz_rgbas++;           
595                                                   
596     *a_pxyz_rgbas = x2;a_pxyz_rgbas++;            
597     *a_pxyz_rgbas = y2;a_pxyz_rgbas++;            
598     *a_pxyz_rgbas = z2;a_pxyz_rgbas++;            
599                                                   
600     *a_pxyz_rgbas = a_r;a_pxyz_rgbas++;           
601     *a_pxyz_rgbas = a_g;a_pxyz_rgbas++;           
602     *a_pxyz_rgbas = a_b;a_pxyz_rgbas++;           
603     *a_pxyz_rgbas = a_a;a_pxyz_rgbas++;           
604                                                   
605     *a_pxyz_rgbas = x3;a_pxyz_rgbas++;            
606     *a_pxyz_rgbas = y3;a_pxyz_rgbas++;            
607     *a_pxyz_rgbas = z3;a_pxyz_rgbas++;            
608                                                   
609     *a_pxyz_rgbas = a_r;a_pxyz_rgbas++;           
610     *a_pxyz_rgbas = a_g;a_pxyz_rgbas++;           
611     *a_pxyz_rgbas = a_b;a_pxyz_rgbas++;           
612     *a_pxyz_rgbas = a_a;a_pxyz_rgbas++;           
613                                                   
614     x2 = x3;                                      
615     y2 = y3;                                      
616     z2 = z3;                                      
617   }                                               
618 }                                                 
619                                                   
620 }}                                                
621                                                   
622 #endif