Back to home page

EIC code displayed by LXR

 
 

    


Warning, /include/Geant4/tools/glprims is written in an unsupported language. File is not indexed.

0001 // Copyright (C) 2010, Guy Barrand. All rights reserved.
0002 // See the file tools.license for terms.
0003 
0004 #ifndef tools_glprims
0005 #define tools_glprims
0006 
0007 //same as OpenGL GL_[POINTS,etc...], but for the case we don't have OpenGL.
0008 
0009 #include <cstddef> //size_t
0010 
0011 namespace tools {
0012 namespace gl {
0013 
0014 typedef unsigned char mode_t;
0015 
0016 inline mode_t points()         {return 0x0000;}
0017 inline mode_t lines()          {return 0x0001;} //segments
0018 inline mode_t line_loop()      {return 0x0002;}
0019 inline mode_t line_strip()     {return 0x0003;} //polyline
0020 inline mode_t triangles()      {return 0x0004;}
0021 inline mode_t triangle_strip() {return 0x0005;}
0022 inline mode_t triangle_fan()   {return 0x0006;}
0023 
0024 inline bool is_mode(mode_t a_mode) {
0025   return a_mode<=0x006?true:false;
0026 }
0027 
0028 inline bool is_line(mode_t a_mode) {
0029   if(a_mode==points())     return true; //0 sz line !
0030   if(a_mode==lines())      return true;
0031   if(a_mode==line_loop())  return true;
0032   if(a_mode==line_strip()) return true;
0033   return false;
0034 }
0035 
0036 inline void cvt_2to3(size_t a_npt,const float* a_xys,float*& a_xyzs) {
0037   const float* vpos = a_xys;
0038   float x,y;
0039   for(size_t i=0;i<a_npt;i++) {
0040     x = *vpos;vpos++;
0041     y = *vpos;vpos++;
0042     *a_xyzs = x;a_xyzs++;
0043     *a_xyzs = y;a_xyzs++;
0044     *a_xyzs = 0;a_xyzs++;
0045   }
0046 }
0047 
0048 
0049 inline void triangle_fan_to_triangles(size_t a_npt,const float* a_xyzs,float*& a_pxyzs) {
0050   // a_pxyzs = (a_npt-2)*3*3
0051 
0052   const float* vpos = a_xyzs;
0053 
0054   float x1 = *vpos;vpos++;
0055   float y1 = *vpos;vpos++;
0056   float z1 = *vpos;vpos++;
0057 
0058   float x2 = *vpos;vpos++;
0059   float y2 = *vpos;vpos++;
0060   float z2 = *vpos;vpos++;
0061 
0062   float x3,y3,z3;
0063   for(size_t i=2;i<a_npt;i++) {
0064     x3 = *vpos;vpos++;
0065     y3 = *vpos;vpos++;
0066     z3 = *vpos;vpos++;
0067     *a_pxyzs = x1;a_pxyzs++;
0068     *a_pxyzs = y1;a_pxyzs++;
0069     *a_pxyzs = z1;a_pxyzs++;
0070 
0071     *a_pxyzs = x2;a_pxyzs++;
0072     *a_pxyzs = y2;a_pxyzs++;
0073     *a_pxyzs = z2;a_pxyzs++;
0074 
0075     *a_pxyzs = x3;a_pxyzs++;
0076     *a_pxyzs = y3;a_pxyzs++;
0077     *a_pxyzs = z3;a_pxyzs++;
0078 
0079     x2 = x3;
0080     y2 = y3;
0081     z2 = z3;
0082   }
0083 
0084 }
0085 
0086 inline void triangle_fan_to_triangles_texture(size_t a_npt,const float* a_xyzs,const float* a_tcs,float*& a_pxyzs,float*& a_ptcs) {
0087   // a_pxyzs = (a_npt-2)*3*3
0088 
0089   // a_ptcs = (a_npt-2)*3*2
0090 
0091   const float* vpos = a_xyzs;
0092   const float* tpos = a_tcs;
0093 
0094   float x1 = *vpos;vpos++;
0095   float y1 = *vpos;vpos++;
0096   float z1 = *vpos;vpos++;
0097 
0098   float tx1 = *tpos;tpos++;
0099   float ty1 = *tpos;tpos++;
0100 
0101   float x2 = *vpos;vpos++;
0102   float y2 = *vpos;vpos++;
0103   float z2 = *vpos;vpos++;
0104 
0105   float tx2 = *tpos;tpos++;
0106   float ty2 = *tpos;tpos++;
0107   
0108   float x3,y3,z3,tx3,ty3;
0109   for(size_t i=2;i<a_npt;i++) {
0110     x3 = *vpos;vpos++;
0111     y3 = *vpos;vpos++;
0112     z3 = *vpos;vpos++;
0113 
0114     tx3 = *tpos;tpos++;
0115     ty3 = *tpos;tpos++;
0116     
0117     *a_pxyzs = x1;a_pxyzs++;
0118     *a_pxyzs = y1;a_pxyzs++;
0119     *a_pxyzs = z1;a_pxyzs++;
0120 
0121     *a_ptcs = tx1;a_ptcs++;
0122     *a_ptcs = ty1;a_ptcs++;
0123 
0124     *a_pxyzs = x2;a_pxyzs++;
0125     *a_pxyzs = y2;a_pxyzs++;
0126     *a_pxyzs = z2;a_pxyzs++;
0127 
0128     *a_ptcs = tx2;a_ptcs++;
0129     *a_ptcs = ty2;a_ptcs++;
0130     
0131     *a_pxyzs = x3;a_pxyzs++;
0132     *a_pxyzs = y3;a_pxyzs++;
0133     *a_pxyzs = z3;a_pxyzs++;
0134 
0135     *a_ptcs = tx3;a_ptcs++;
0136     *a_ptcs = ty3;a_ptcs++;
0137     
0138     x2 = x3;
0139     y2 = y3;
0140     z2 = z3;
0141 
0142     tx2 = tx3;
0143     ty2 = ty3;
0144   }
0145 
0146 }
0147 
0148 inline void triangle_strip_to_triangles(size_t a_npt,const float* a_xyzs,float*& a_pxyzs) {
0149   // a_pxyzs = (a_npt-2)*3*3
0150 
0151   const float* vpos = a_xyzs;
0152 
0153   float x1 = *vpos;vpos++;
0154   float y1 = *vpos;vpos++;
0155   float z1 = *vpos;vpos++;
0156 
0157   float x2 = *vpos;vpos++;
0158   float y2 = *vpos;vpos++;
0159   float z2 = *vpos;vpos++;
0160 
0161   float x3,y3,z3;
0162   bool flip = false;
0163   for(size_t i=2;i<a_npt;i++) {
0164     x3 = *vpos;vpos++;
0165     y3 = *vpos;vpos++;
0166     z3 = *vpos;vpos++;
0167 
0168     if(flip) {
0169       *a_pxyzs = x1;a_pxyzs++;
0170       *a_pxyzs = y1;a_pxyzs++;
0171       *a_pxyzs = z1;a_pxyzs++;
0172 
0173       *a_pxyzs = x3;a_pxyzs++;
0174       *a_pxyzs = y3;a_pxyzs++;
0175       *a_pxyzs = z3;a_pxyzs++;
0176 
0177       *a_pxyzs = x2;a_pxyzs++;
0178       *a_pxyzs = y2;a_pxyzs++;
0179       *a_pxyzs = z2;a_pxyzs++;
0180     } else {
0181       *a_pxyzs = x1;a_pxyzs++;
0182       *a_pxyzs = y1;a_pxyzs++;
0183       *a_pxyzs = z1;a_pxyzs++;
0184 
0185       *a_pxyzs = x2;a_pxyzs++;
0186       *a_pxyzs = y2;a_pxyzs++;
0187       *a_pxyzs = z2;a_pxyzs++;
0188 
0189       *a_pxyzs = x3;a_pxyzs++;
0190       *a_pxyzs = y3;a_pxyzs++;
0191       *a_pxyzs = z3;a_pxyzs++;
0192     }
0193 
0194     x1 = x2;
0195     y1 = y2;
0196     z1 = z2;
0197 
0198     x2 = x3;
0199     y2 = y3;
0200     z2 = z3;
0201 
0202     flip = flip?false:true;
0203   }
0204 }
0205 
0206 inline void triangle_strip_to_triangles_texture(size_t a_npt,const float* a_xyzs,const float* a_tcs,float*& a_pxyzs,float*& a_ptcs) {
0207   // a_pxyzs = (a_npt-2)*3*3
0208   // a_ptcs = (a_npt-2)*3*2
0209 
0210   const float* vpos = a_xyzs;
0211   const float* tpos = a_tcs;
0212 
0213   float x1 = *vpos;vpos++;
0214   float y1 = *vpos;vpos++;
0215   float z1 = *vpos;vpos++;
0216 
0217   float tx1 = *tpos;tpos++;
0218   float ty1 = *tpos;tpos++;
0219   
0220   float x2 = *vpos;vpos++;
0221   float y2 = *vpos;vpos++;
0222   float z2 = *vpos;vpos++;
0223 
0224   float tx2 = *tpos;tpos++;
0225   float ty2 = *tpos;tpos++;
0226   
0227   float x3,y3,z3,tx3,ty3;
0228   bool flip = false;
0229   for(size_t i=2;i<a_npt;i++) {
0230     x3 = *vpos;vpos++;
0231     y3 = *vpos;vpos++;
0232     z3 = *vpos;vpos++;
0233 
0234     tx3 = *tpos;tpos++;
0235     ty3 = *tpos;tpos++;
0236   
0237     if(flip) {
0238       *a_pxyzs = x1;a_pxyzs++;
0239       *a_pxyzs = y1;a_pxyzs++;
0240       *a_pxyzs = z1;a_pxyzs++;
0241 
0242       *a_ptcs = tx1;a_ptcs++;
0243       *a_ptcs = ty1;a_ptcs++;
0244       
0245       *a_pxyzs = x3;a_pxyzs++;
0246       *a_pxyzs = y3;a_pxyzs++;
0247       *a_pxyzs = z3;a_pxyzs++;
0248 
0249       *a_ptcs = tx3;a_ptcs++;
0250       *a_ptcs = ty3;a_ptcs++;
0251       
0252       *a_pxyzs = x2;a_pxyzs++;
0253       *a_pxyzs = y2;a_pxyzs++;
0254       *a_pxyzs = z2;a_pxyzs++;
0255 
0256       *a_ptcs = tx2;a_ptcs++;
0257       *a_ptcs = ty2;a_ptcs++;
0258     } else {
0259       *a_pxyzs = x1;a_pxyzs++;
0260       *a_pxyzs = y1;a_pxyzs++;
0261       *a_pxyzs = z1;a_pxyzs++;
0262 
0263       *a_ptcs = tx1;a_ptcs++;
0264       *a_ptcs = ty1;a_ptcs++;
0265       
0266       *a_pxyzs = x2;a_pxyzs++;
0267       *a_pxyzs = y2;a_pxyzs++;
0268       *a_pxyzs = z2;a_pxyzs++;
0269 
0270       *a_ptcs = tx2;a_ptcs++;
0271       *a_ptcs = ty2;a_ptcs++;
0272       
0273       *a_pxyzs = x3;a_pxyzs++;
0274       *a_pxyzs = y3;a_pxyzs++;
0275       *a_pxyzs = z3;a_pxyzs++;
0276       
0277       *a_ptcs = tx3;a_ptcs++;
0278       *a_ptcs = ty3;a_ptcs++;
0279     }
0280 
0281     x1 = x2;
0282     y1 = y2;
0283     z1 = z2;
0284 
0285     tx1 = tx2;
0286     ty1 = ty2;
0287 
0288     x2 = x3;
0289     y2 = y3;
0290     z2 = z3;
0291 
0292     tx2 = tx3;
0293     ty2 = ty3;
0294     
0295     flip = flip?false:true;
0296   }
0297 }
0298 
0299 inline void triangle_fan_to_triangles_nms(size_t a_npt,const float* a_xyzs,const float* a_nms,float*& a_pxyzs,float*& a_pnms) {
0300   triangle_fan_to_triangles(a_npt,a_xyzs,a_pxyzs);
0301   triangle_fan_to_triangles(a_npt,a_nms,a_pnms);
0302 }
0303 
0304 inline void triangle_strip_to_triangles_nms(size_t a_npt,const float* a_xyzs,const float* a_nms,float*& a_pxyzs,float*& a_pnms) {
0305   // a_pxyzs, a_pnms = (a_npt-2)*3*3
0306   triangle_strip_to_triangles(a_npt,a_xyzs,a_pxyzs);
0307   triangle_strip_to_triangles(a_npt,a_nms,a_pnms);
0308 }
0309 
0310 inline void triangle_fan_to_triangles_2to3(size_t a_npt,const float* a_xyzs,float*& a_pxyzs) {
0311 
0312   const float* vpos = a_xyzs;
0313 
0314   float x1 = *vpos;vpos++;
0315   float y1 = *vpos;vpos++;
0316 
0317   float x2 = *vpos;vpos++;
0318   float y2 = *vpos;vpos++;
0319 
0320   float x3,y3;
0321   for(size_t i=2;i<a_npt;i++) {
0322     x3 = *vpos;vpos++;
0323     y3 = *vpos;vpos++;
0324 
0325     *a_pxyzs = x1;a_pxyzs++;
0326     *a_pxyzs = y1;a_pxyzs++;
0327     *a_pxyzs = 0;a_pxyzs++;
0328 
0329     *a_pxyzs = x2;a_pxyzs++;
0330     *a_pxyzs = y2;a_pxyzs++;
0331     *a_pxyzs = 0;a_pxyzs++;
0332 
0333     *a_pxyzs = x3;a_pxyzs++;
0334     *a_pxyzs = y3;a_pxyzs++;
0335     *a_pxyzs = 0;a_pxyzs++;
0336 
0337     x2 = x3;
0338     y2 = y3;
0339   }
0340 
0341 }
0342 
0343 inline void triangle_strip_to_triangles_2to3(size_t a_npt,const float* a_xyzs,float*& a_pxyzs) {
0344 
0345   const float* vpos = a_xyzs;
0346 
0347   float x1 = *vpos;vpos++;
0348   float y1 = *vpos;vpos++;
0349 
0350   float x2 = *vpos;vpos++;
0351   float y2 = *vpos;vpos++;
0352 
0353   float x3,y3;
0354   bool flip = false;
0355   for(size_t i=2;i<a_npt;i++) {
0356     x3 = *vpos;vpos++;
0357     y3 = *vpos;vpos++;
0358 
0359     if(flip) {
0360       *a_pxyzs = x1;a_pxyzs++;
0361       *a_pxyzs = y1;a_pxyzs++;
0362       *a_pxyzs = 0;a_pxyzs++;
0363 
0364       *a_pxyzs = x3;a_pxyzs++;
0365       *a_pxyzs = y3;a_pxyzs++;
0366       *a_pxyzs = 0;a_pxyzs++;
0367 
0368       *a_pxyzs = x2;a_pxyzs++;
0369       *a_pxyzs = y2;a_pxyzs++;
0370       *a_pxyzs = 0;a_pxyzs++;
0371     } else {
0372       *a_pxyzs = x1;a_pxyzs++;
0373       *a_pxyzs = y1;a_pxyzs++;
0374       *a_pxyzs = 0;a_pxyzs++;
0375 
0376       *a_pxyzs = x2;a_pxyzs++;
0377       *a_pxyzs = y2;a_pxyzs++;
0378       *a_pxyzs = 0;a_pxyzs++;
0379 
0380       *a_pxyzs = x3;a_pxyzs++;
0381       *a_pxyzs = y3;a_pxyzs++;
0382       *a_pxyzs = 0;a_pxyzs++;
0383     }
0384 
0385     x1 = x2;
0386     y1 = y2;
0387 
0388     x2 = x3;
0389     y2 = y3;
0390 
0391     flip = flip?false:true;
0392   }
0393 
0394 }
0395 
0396 inline void line_strip_to_lines_2to3(size_t a_npt,const float* a_xyzs,float*& a_pxyzs) {
0397 
0398   const float* vpos = a_xyzs;
0399 
0400   float x1 = *vpos;vpos++;
0401   float y1 = *vpos;vpos++;
0402 
0403   float x2,y2;
0404   for(size_t i=1;i<a_npt;i++) {
0405     x2 = *vpos;vpos++;
0406     y2 = *vpos;vpos++;
0407 
0408     *a_pxyzs = x1;a_pxyzs++;
0409     *a_pxyzs = y1;a_pxyzs++;
0410     *a_pxyzs = 0;a_pxyzs++;
0411 
0412     *a_pxyzs = x2;a_pxyzs++;
0413     *a_pxyzs = y2;a_pxyzs++;
0414     *a_pxyzs = 0;a_pxyzs++;
0415 
0416     x1 = x2;
0417     y1 = y2;
0418   }
0419 
0420 }
0421 
0422 inline void line_strip_to_lines(size_t a_npt,const float* a_xyzs,float*& a_pxyzs) {
0423   // a_pxyzs = (a_npt-1)*2*3
0424 
0425   const float* vpos = a_xyzs;
0426 
0427   float x1 = *vpos;vpos++;
0428   float y1 = *vpos;vpos++;
0429   float z1 = *vpos;vpos++;
0430 
0431   float x2,y2,z2;
0432   for(size_t i=1;i<a_npt;i++) {
0433     x2 = *vpos;vpos++;
0434     y2 = *vpos;vpos++;
0435     z2 = *vpos;vpos++;
0436 
0437     *a_pxyzs = x1;a_pxyzs++;
0438     *a_pxyzs = y1;a_pxyzs++;
0439     *a_pxyzs = z1;a_pxyzs++;
0440 
0441     *a_pxyzs = x2;a_pxyzs++;
0442     *a_pxyzs = y2;a_pxyzs++;
0443     *a_pxyzs = z2;a_pxyzs++;
0444 
0445     x1 = x2;
0446     y1 = y2;
0447     z1 = z2;
0448   }
0449 
0450 }
0451 
0452 inline void line_loop_to_lines(size_t a_npt,const float* a_xyzs,float*& a_pxyzs) {
0453   // a_pxyzs = a_npt*2*3
0454 
0455   const float* vpos = a_xyzs;
0456 
0457   float x1 = *vpos;vpos++;
0458   float y1 = *vpos;vpos++;
0459   float z1 = *vpos;vpos++;
0460 
0461   float x0 = x1;
0462   float y0 = y1;
0463   float z0 = z1;
0464 
0465   float x2,y2,z2;
0466   for(size_t i=1;i<a_npt;i++) {
0467     x2 = *vpos;vpos++;
0468     y2 = *vpos;vpos++;
0469     z2 = *vpos;vpos++;
0470 
0471     *a_pxyzs = x1;a_pxyzs++;
0472     *a_pxyzs = y1;a_pxyzs++;
0473     *a_pxyzs = z1;a_pxyzs++;
0474 
0475     *a_pxyzs = x2;a_pxyzs++;
0476     *a_pxyzs = y2;a_pxyzs++;
0477     *a_pxyzs = z2;a_pxyzs++;
0478 
0479     x1 = x2;
0480     y1 = y2;
0481     z1 = z2;
0482   }
0483 
0484   *a_pxyzs = x1;a_pxyzs++;
0485   *a_pxyzs = y1;a_pxyzs++;
0486   *a_pxyzs = z1;a_pxyzs++;
0487 
0488   *a_pxyzs = x0;a_pxyzs++;
0489   *a_pxyzs = y0;a_pxyzs++;
0490   *a_pxyzs = z0;a_pxyzs++;
0491 
0492 }
0493 
0494 inline void line_loop_to_line_strip(size_t a_npt,const float* a_xyzs,float*& a_pxyzs) {
0495   // a_pxyzs = (a_npt+1)*3
0496 
0497   const float* vpos = a_xyzs;
0498 
0499   float x1 = *vpos;vpos++;
0500   float y1 = *vpos;vpos++;
0501   float z1 = *vpos;vpos++;
0502 
0503   for(size_t i=0;i<a_npt;i++) {
0504     *a_pxyzs = *vpos;vpos++;a_pxyzs++;
0505     *a_pxyzs = *vpos;vpos++;a_pxyzs++;
0506     *a_pxyzs = *vpos;vpos++;a_pxyzs++;
0507   }
0508 
0509   *a_pxyzs = x1;a_pxyzs++;
0510   *a_pxyzs = y1;a_pxyzs++;
0511   *a_pxyzs = z1;a_pxyzs++;
0512 }
0513 
0514 /// for DirectX_action :
0515 inline void triangle_fan_to_triangles_2to3(size_t a_npt,const float* a_xyzs,
0516                                            float a_r,float a_g,float a_b,float a_a,
0517                                            float*& a_pxyz_rgbas) {
0518 
0519   const float* vpos = a_xyzs;
0520 
0521   float x1 = *vpos;vpos++;
0522   float y1 = *vpos;vpos++;
0523 
0524   float x2 = *vpos;vpos++;
0525   float y2 = *vpos;vpos++;
0526 
0527   float x3,y3;
0528   for(size_t i=2;i<a_npt;i++) {
0529     x3 = *vpos;vpos++;
0530     y3 = *vpos;vpos++;
0531 
0532     *a_pxyz_rgbas = x1;a_pxyz_rgbas++;
0533     *a_pxyz_rgbas = y1;a_pxyz_rgbas++;
0534     *a_pxyz_rgbas = 0;a_pxyz_rgbas++;
0535 
0536     *a_pxyz_rgbas = a_r;a_pxyz_rgbas++;
0537     *a_pxyz_rgbas = a_g;a_pxyz_rgbas++;
0538     *a_pxyz_rgbas = a_b;a_pxyz_rgbas++;
0539     *a_pxyz_rgbas = a_a;a_pxyz_rgbas++;
0540 
0541     *a_pxyz_rgbas = x2;a_pxyz_rgbas++;
0542     *a_pxyz_rgbas = y2;a_pxyz_rgbas++;
0543     *a_pxyz_rgbas = 0;a_pxyz_rgbas++;
0544 
0545     *a_pxyz_rgbas = a_r;a_pxyz_rgbas++;
0546     *a_pxyz_rgbas = a_g;a_pxyz_rgbas++;
0547     *a_pxyz_rgbas = a_b;a_pxyz_rgbas++;
0548     *a_pxyz_rgbas = a_a;a_pxyz_rgbas++;
0549 
0550     *a_pxyz_rgbas = x3;a_pxyz_rgbas++;
0551     *a_pxyz_rgbas = y3;a_pxyz_rgbas++;
0552     *a_pxyz_rgbas = 0;a_pxyz_rgbas++;
0553 
0554     *a_pxyz_rgbas = a_r;a_pxyz_rgbas++;
0555     *a_pxyz_rgbas = a_g;a_pxyz_rgbas++;
0556     *a_pxyz_rgbas = a_b;a_pxyz_rgbas++;
0557     *a_pxyz_rgbas = a_a;a_pxyz_rgbas++;
0558 
0559     x2 = x3;
0560     y2 = y3;
0561   }
0562 }
0563 
0564 inline void triangle_fan_to_triangles(size_t a_npt,const float* a_xyzs,
0565                                       float a_r,float a_g,float a_b,float a_a,
0566                                       float*& a_pxyz_rgbas) {
0567 
0568   const float* vpos = a_xyzs;
0569 
0570   float x1 = *vpos;vpos++;
0571   float y1 = *vpos;vpos++;
0572   float z1 = *vpos;vpos++;
0573 
0574   float x2 = *vpos;vpos++;
0575   float y2 = *vpos;vpos++;
0576   float z2 = *vpos;vpos++;
0577 
0578   float x3,y3,z3;
0579   for(size_t i=2;i<a_npt;i++) {
0580     x3 = *vpos;vpos++;
0581     y3 = *vpos;vpos++;
0582     z3 = *vpos;vpos++;
0583 
0584     *a_pxyz_rgbas = x1;a_pxyz_rgbas++;
0585     *a_pxyz_rgbas = y1;a_pxyz_rgbas++;
0586     *a_pxyz_rgbas = z1;a_pxyz_rgbas++;
0587 
0588     *a_pxyz_rgbas = a_r;a_pxyz_rgbas++;
0589     *a_pxyz_rgbas = a_g;a_pxyz_rgbas++;
0590     *a_pxyz_rgbas = a_b;a_pxyz_rgbas++;
0591     *a_pxyz_rgbas = a_a;a_pxyz_rgbas++;
0592 
0593     *a_pxyz_rgbas = x2;a_pxyz_rgbas++;
0594     *a_pxyz_rgbas = y2;a_pxyz_rgbas++;
0595     *a_pxyz_rgbas = z2;a_pxyz_rgbas++;
0596 
0597     *a_pxyz_rgbas = a_r;a_pxyz_rgbas++;
0598     *a_pxyz_rgbas = a_g;a_pxyz_rgbas++;
0599     *a_pxyz_rgbas = a_b;a_pxyz_rgbas++;
0600     *a_pxyz_rgbas = a_a;a_pxyz_rgbas++;
0601 
0602     *a_pxyz_rgbas = x3;a_pxyz_rgbas++;
0603     *a_pxyz_rgbas = y3;a_pxyz_rgbas++;
0604     *a_pxyz_rgbas = z3;a_pxyz_rgbas++;
0605 
0606     *a_pxyz_rgbas = a_r;a_pxyz_rgbas++;
0607     *a_pxyz_rgbas = a_g;a_pxyz_rgbas++;
0608     *a_pxyz_rgbas = a_b;a_pxyz_rgbas++;
0609     *a_pxyz_rgbas = a_a;a_pxyz_rgbas++;
0610 
0611     x2 = x3;
0612     y2 = y3;
0613     z2 = z3;
0614   }
0615 }
0616 
0617 }}
0618 
0619 #endif