Erik Hofman writes:
> 
> I've basically given up making the cloud loader endian aware. The author 
> uses "unsigned char *" to pass different kinds of types into one pass 
> from a file into a data array which makes it extremely difficult to 
> resolve all the endain issues.

Hmm.... does this help  ?


SkyCloud::Load(const SkyArchive &archive, 
                         float rScale, /* = 1.0f */ 
                         double latitude, double longitude )
{

  unsigned int iNumParticles;
  Vec3f vecCenter = Vec3f::ZERO;

  archive.FindUInt32("CldNumParticles", &iNumParticles);
  archive.FindVec3f("CldCenter", &vecCenter);

  Vec3f *pParticlePositions = new Vec3f[iNumParticles];
  float *pParticleRadii          = new float[iNumParticles];
  Vec4f *pParticleColors     = new Vec4f[iNumParticles];

  unsigned int iNumBytes;
  
   if ( ulIsBigEndian ) 
   {
      char *tmp = new char[iNumParticles*sizeof(Vec4f];
      archive.FindData("CldParticlePositions", ANY_TYPE, (void**const)&tmp, 
&iNumBytes);
      float *ftmp = (float *)tmp;
      for( i=0; i<iNumParticles; i++)
      {
         pParticlePositions[i].x = _ulEndianSwap((unsigned int*)(ftmp+0));
         pParticlePositions[i].y = _ulEndianSwap((unsigned int*)(ftmp+1));
         pParticlePositions[i].z = _ulEndianSwap((unsigned int*)(ftmp+2));
         ftmp += 3;
      }

      archive.FindData("CldParticleRadii",     ANY_TYPE, (void**const)&tmp,     
&iNumBytes);
      ftmp = (float *)tmp;
      for( i=0; i<iNumParticles; i++)
      {
           pParticleRadii[i] = = _ulEndianSwap((unsigned int*)ftmp);
           ftmp++;
      }

      archive.FindData("CldParticleColors",    ANY_TYPE, (void**const)&tmp,    
&iNumBytes);
      ftmp = (float *)tmp;
      for( i=0; i<iNumParticles; i++)
      {
         pParticleColors[i].x = _ulEndianSwap((unsigned int*)(ftmp+0));
         pParticleColors[i].y = _ulEndianSwap((unsigned int*)(ftmp+1));
         pParticleColors[i].z = _ulEndianSwap((unsigned int*)(ftmp+2));
         pParticleColors[i].w = _ulEndianSwap((unsigned int*)(ftmp+3));
         ftmp += 4;
      }
    }
    else 
    {
         archive.FindData("CldParticlePositions", ANY_TYPE, 
(void**const)&pParticlePositions, &iNumBytes);
         archive.FindData("CldParticleRadii",     ANY_TYPE, 
(void**const)&pParticleRadii,     &iNumBytes);
         archive.FindData("CldParticleColors",    ANY_TYPE, 
(void**const)&pParticleColors,    &iNumBytes);    }
    }

.....
}

_______________________________________________
Flightgear-devel mailing list
[EMAIL PROTECTED]
http://mail.flightgear.org/mailman/listinfo/flightgear-devel

Reply via email to