#include <vector>
#include STL_STRING
+#include <iostream>
#include <simgear/bucket/newbucket.hxx>
#include <simgear/misc/sg_path.hxx>
SG_USING_STD( string );
SG_USING_STD( vector );
+using std::cout;
+using std::endl;
enum sgObjectTypes {
SG_BOUNDING_SPHERE = 0,
#endif
// read number of top level objects
- short nobjects;
- sgReadShort( fp, &nobjects );
+ unsigned short nobjects;
+ if ( version >= 7 ) {
+ sgReadUShort( fp, &nobjects );
+ } else {
+ short tmp;
+ sgReadShort( fp, &tmp );
+ nobjects = tmp;
+ }
// cout << "Total objects to read = " << nobjects << endl;
// read in objects
for ( i = 0; i < nobjects; ++i ) {
// read object header
char obj_type;
- short nproperties, nelements;
+ unsigned short nproperties, nelements;
sgReadChar( fp, &obj_type );
- sgReadShort( fp, &nproperties );
- sgReadShort( fp, &nelements );
+ if ( version >= 7 ) {
+ sgReadUShort( fp, &nproperties );
+ sgReadUShort( fp, &nelements );
+ } else {
+ short tmp;
+ sgReadShort( fp, &tmp );
+ nproperties = tmp;
+ sgReadShort( fp, &tmp );
+ nelements = tmp;
+ }
// cout << "object " << i << " = " << (int)obj_type << " props = "
// << nproperties << " elements = " << nelements << endl;
string material;
int start;
int end;
- short nobjects = 0;
+ unsigned short nobjects = 0;
nobjects++; // for gbs
nobjects++; // for vertices
nobjects++; // for colors
nobjects++; // for texcoords
// points
- short npts = 0;
+ unsigned short npts = 0;
start = 0; end = 1;
while ( start < (int)pt_materials.size() ) {
material = pt_materials[start];
nobjects += npts;
// tris
- short ntris = 0;
+ unsigned short ntris = 0;
start = 0; end = 1;
while ( start < (int)tri_materials.size() ) {
material = tri_materials[start];
nobjects += ntris;
// strips
- short nstrips = 0;
+ unsigned short nstrips = 0;
start = 0; end = 1;
while ( start < (int)strip_materials.size() ) {
material = strip_materials[start];
nobjects += nstrips;
// fans
- short nfans = 0;
+ unsigned short nfans = 0;
start = 0; end = 1;
while ( start < (int)fan_materials.size() ) {
material = fan_materials[start];
nobjects += nfans;
cout << "total top level objects = " << nobjects << endl;
- sgWriteShort( fp, nobjects );
+ sgWriteUShort( fp, nobjects );
// write bounding sphere
sgWriteChar( fp, (char)SG_BOUNDING_SPHERE ); // type
- sgWriteShort( fp, 0 ); // nproperties
- sgWriteShort( fp, 1 ); // nelements
+ sgWriteUShort( fp, 0 ); // nproperties
+ sgWriteUShort( fp, 1 ); // nelements
sgWriteUInt( fp, sizeof(double) * 3 + sizeof(float) ); // nbytes
sgdVec3 center;
// dump vertex list
sgWriteChar( fp, (char)SG_VERTEX_LIST ); // type
- sgWriteShort( fp, 0 ); // nproperties
- sgWriteShort( fp, 1 ); // nelements
+ sgWriteUShort( fp, 0 ); // nproperties
+ sgWriteUShort( fp, 1 ); // nelements
sgWriteUInt( fp, wgs84_nodes.size() * sizeof(float) * 3 ); // nbytes
for ( i = 0; i < (int)wgs84_nodes.size(); ++i ) {
SGVec3f p = toVec3f(wgs84_nodes[i] - gbs_center);
// dump vertex color list
sgWriteChar( fp, (char)SG_COLOR_LIST ); // type
- sgWriteShort( fp, 0 ); // nproperties
- sgWriteShort( fp, 1 ); // nelements
+ sgWriteUShort( fp, 0 ); // nproperties
+ sgWriteUShort( fp, 1 ); // nelements
sgWriteUInt( fp, colors.size() * sizeof(float) * 4 ); // nbytes
for ( i = 0; i < (int)colors.size(); ++i ) {
sgWriteVec4( fp, colors[i].data() );
// dump vertex normal list
sgWriteChar( fp, (char)SG_NORMAL_LIST ); // type
- sgWriteShort( fp, 0 ); // nproperties
- sgWriteShort( fp, 1 ); // nelements
+ sgWriteUShort( fp, 0 ); // nproperties
+ sgWriteUShort( fp, 1 ); // nelements
sgWriteUInt( fp, normals.size() * 3 ); // nbytes
char normal[3];
for ( i = 0; i < (int)normals.size(); ++i ) {
// dump texture coordinates
sgWriteChar( fp, (char)SG_TEXCOORD_LIST ); // type
- sgWriteShort( fp, 0 ); // nproperties
- sgWriteShort( fp, 1 ); // nelements
+ sgWriteUShort( fp, 0 ); // nproperties
+ sgWriteUShort( fp, 1 ); // nelements
sgWriteUInt( fp, texcoords.size() * sizeof(float) * 2 ); // nbytes
for ( i = 0; i < (int)texcoords.size(); ++i ) {
sgWriteVec2( fp, texcoords[i].data() );
// write group headers
sgWriteChar( fp, (char)SG_POINTS ); // type
- sgWriteShort( fp, 2 ); // nproperties
- sgWriteShort( fp, end - start ); // nelements
+ sgWriteUShort( fp, 2 ); // nproperties
+ sgWriteUShort( fp, end - start ); // nelements
sgWriteChar( fp, (char)SG_MATERIAL ); // property
sgWriteUInt( fp, material.length() ); // nbytes
// write strips
for ( i = start; i < end; ++i ) {
// nbytes
- sgWriteUInt( fp, pts_v[i].size() * idx_size * sizeof(short) );
+ sgWriteUInt( fp, pts_v[i].size() * idx_size
+ * sizeof(unsigned short) );
for ( j = 0; j < (int)pts_v[i].size(); ++j ) {
if ( pts_v.size() ) {
- sgWriteShort( fp, (short)pts_v[i][j] );
+ sgWriteUShort( fp, (unsigned short)pts_v[i][j] );
}
if ( pts_n.size() ) {
- sgWriteShort( fp, (short)pts_n[i][j] );
+ sgWriteUShort( fp, (unsigned short)pts_n[i][j] );
}
if ( pts_c.size() ) {
- sgWriteShort( fp, (short)pts_c[i][j] );
+ sgWriteUShort( fp, (unsigned short)pts_c[i][j] );
}
if ( pts_tc.size() ) {
- sgWriteShort( fp, (short)pts_tc[i][j] );
+ sgWriteUShort( fp, (unsigned short)pts_tc[i][j] );
}
}
}
// write group headers
sgWriteChar( fp, (char)SG_TRIANGLE_FACES ); // type
- sgWriteShort( fp, 2 ); // nproperties
- sgWriteShort( fp, 1 ); // nelements
+ sgWriteUShort( fp, 2 ); // nproperties
+ sgWriteUShort( fp, 1 ); // nelements
sgWriteChar( fp, (char)SG_MATERIAL ); // property
sgWriteUInt( fp, material.length() ); // nbytes
sgWriteChar( fp, idx_mask );
// nbytes
- sgWriteUInt( fp, (end - start) * 3 * idx_size * sizeof(short) );
+ sgWriteUInt( fp, (end - start) * 3 * idx_size
+ * sizeof(unsigned short) );
// write group
for ( i = start; i < end; ++i ) {
for ( j = 0; j < 3; ++j ) {
if ( tris_v.size() ) {
- sgWriteShort( fp, (short)tris_v[i][j] );
+ sgWriteUShort( fp, (unsigned short)tris_v[i][j] );
}
if ( tris_n.size() ) {
- sgWriteShort( fp, (short)tris_n[i][j] );
+ sgWriteUShort( fp, (unsigned short)tris_n[i][j] );
}
if ( tris_c.size() ) {
- sgWriteShort( fp, (short)tris_c[i][j] );
+ sgWriteUShort( fp, (unsigned short)tris_c[i][j] );
}
if ( tris_tc.size() ) {
- sgWriteShort( fp, (short)tris_tc[i][j] );
+ sgWriteUShort( fp, (unsigned short)tris_tc[i][j] );
}
}
}
// write group headers
sgWriteChar( fp, (char)SG_TRIANGLE_STRIPS ); // type
- sgWriteShort( fp, 2 ); // nproperties
- sgWriteShort( fp, end - start ); // nelements
+ sgWriteUShort( fp, 2 ); // nproperties
+ sgWriteUShort( fp, end - start ); // nelements
sgWriteChar( fp, (char)SG_MATERIAL ); // property
sgWriteUInt( fp, material.length() ); // nbytes
// write strips
for ( i = start; i < end; ++i ) {
// nbytes
- sgWriteUInt( fp, strips_v[i].size() * idx_size * sizeof(short));
+ sgWriteUInt( fp, strips_v[i].size() * idx_size
+ * sizeof(unsigned short));
for ( j = 0; j < (int)strips_v[i].size(); ++j ) {
if ( strips_v.size() ) {
- sgWriteShort( fp, (short)strips_v[i][j] );
+ sgWriteUShort( fp, (unsigned short)strips_v[i][j] );
}
if ( strips_n.size() ) {
- sgWriteShort( fp, (short)strips_n[i][j] );
+ sgWriteUShort( fp, (unsigned short)strips_n[i][j] );
}
if ( strips_c.size() ) {
- sgWriteShort( fp, (short)strips_c[i][j] );
+ sgWriteUShort( fp, (unsigned short)strips_c[i][j] );
}
if ( strips_tc.size() ) {
- sgWriteShort( fp, (short)strips_tc[i][j] );
+ sgWriteUShort( fp, (unsigned short)strips_tc[i][j] );
}
}
}
// write group headers
sgWriteChar( fp, (char)SG_TRIANGLE_FANS ); // type
- sgWriteShort( fp, 2 ); // nproperties
- sgWriteShort( fp, end - start ); // nelements
+ sgWriteUShort( fp, 2 ); // nproperties
+ sgWriteUShort( fp, end - start ); // nelements
sgWriteChar( fp, (char)SG_MATERIAL ); // property
sgWriteUInt( fp, material.length() ); // nbytes
// write fans
for ( i = start; i < end; ++i ) {
// nbytes
- sgWriteUInt( fp, fans_v[i].size() * idx_size * sizeof(short) );
+ sgWriteUInt( fp, fans_v[i].size() * idx_size
+ * sizeof(unsigned short) );
for ( j = 0; j < (int)fans_v[i].size(); ++j ) {
if ( fans_v.size() ) {
- sgWriteShort( fp, (short)fans_v[i][j] );
+ sgWriteUShort( fp, (unsigned short)fans_v[i][j] );
}
if ( fans_n.size() ) {
- sgWriteShort( fp, (short)fans_n[i][j] );
+ sgWriteUShort( fp, (unsigned short)fans_n[i][j] );
}
if ( fans_c.size() ) {
- sgWriteShort( fp, (short)fans_c[i][j] );
+ sgWriteUShort( fp, (unsigned short)fans_c[i][j] );
}
if ( fans_tc.size() ) {
- sgWriteShort( fp, (short)fans_tc[i][j] );
+ sgWriteUShort( fp, (unsigned short)fans_tc[i][j] );
}
}
}