[Plib-cvs] plib/src/ssg ssgSave3ds.cxx,1.8,1.9
Brought to you by:
sjbaker
From: Per L. <li...@us...> - 2003-03-08 15:32:02
|
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) ); |