Update of /cvsroot/plib/plib/src/ssg
In directory sc8-pr-cvs1:/tmp/cvs-serv11790
Modified Files:
ssgSave3ds.cxx
Log Message:
Fixed issue which made it impossible to save transformation nodes correctly.
Added a simple check for not creating too many materials.
Index: ssgSave3ds.cxx
===================================================================
RCS file: /cvsroot/plib/plib/src/ssg/ssgSave3ds.cxx,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- ssgSave3ds.cxx 15 Sep 2002 01:29:12 -0000 1.8
+++ ssgSave3ds.cxx 8 Mar 2003 15:31:59 -0000 1.9
@@ -198,7 +198,7 @@
}
static _ssgSave3dsChunk* create_vertex_chunk( ssgLeaf* leaf,
- sgMat4 transform ) {
+ sgMat4 transform ) {
_ssgSave3dsChunk* vertexlist = new _ssgSave3dsChunk( CHUNK_VERTLIST );
unsigned short *num_verts;
@@ -208,10 +208,10 @@
num_verts = new unsigned short;
*num_verts = leaf->getNumVertices();
nverts = new _ssgSave3dsData(num_verts, 2, 1);
-
+
vdata = new float[ *num_verts * 3];
for (int i = 0; i < *num_verts; i++) {
- sgXformVec3(&vdata[i*3], leaf->getVertex(i), transform);
+ sgXformPnt3(&vdata[i*3], leaf->getVertex(i), transform);
}
_ssgSave3dsData *vertices = new _ssgSave3dsData(vdata, 4,
*num_verts * 3);
@@ -304,7 +304,7 @@
}
static _ssgSave3dsChunk* create_transform_chunk() {
- // creates and identity transform
+ // creates an identity transform
_ssgSave3dsChunk* transform = new _ssgSave3dsChunk( CHUNK_TRMATRIX );
float* matrix = new float[12];
@@ -434,7 +434,7 @@
sprintf(matname, "Material #%d", mat_count);
}
_ssgSave3dsData *matname_data = new _ssgSave3dsData(matname, 1,
- strlen(matname) + 1);
+ strlen(matname) + 1);
matname_chunk->addData(matname_data);
mat->addKid(matname_chunk);
@@ -446,6 +446,13 @@
state->getMaterial(GL_SPECULAR) ) );
mat->addKid( create_shininess_chunk( state->getShininess() ) );
+ if (state->isEnabled(GL_COLOR_MATERIAL)) {
+ ulSetError(UL_WARNING,
+ "State \"%s\" has GL_COLOR_MATERIAL enabled, which " \
+ "is not supported by 3DS format. Data will be lost.",
+ matname);
+ }
+
if (state->getTextureFilename() != NULL) {
mat->addKid( create_map_chunk(state) );
}
@@ -468,6 +475,8 @@
if (state == mat[i])
return;
}
+
+ assert(mat_count < MAX_MATERIALS);
mat[mat_count++] = state;
parent->addKid( create_material_chunk(state) );
|