clwrite.c

00001 #include <cl.h>
00002 
00003 #define _CL_FWRITE(ptr, size, nmemb, stream) \
00004                   do { \
00005                     if ((fwrite((ptr), (size), (nmemb), (stream)) * (size)) \
00006                         < ((nmemb) * (size))) \
00007                       return GL_FALSE; \
00008                   } while(0)
00009 
00010 /*
00011   CLwrite: file input cannot be NULL
00012            src cannot be NULL
00013            return 0 on error
00014 */
00015 bool clWriteColour(const CLcolour* src, FILE* file)
00016 {  
00017   if (!src)
00018     return GL_FALSE;
00019 
00020   _CL_FWRITE(src, sizeof(CLcolour), 1, file);
00021   
00022   return GL_TRUE;
00023 }
00024 
00025 bool clWriteVertex(const CLvertex* src, FILE* file)
00026 {  
00027   if (!src)
00028     return GL_FALSE;
00029 
00030   _CL_FWRITE(src, sizeof(CLvertex), 1, file);
00031   
00032   return GL_TRUE;
00033 }
00034 
00035 bool clWriteNormal(const CLnormal* src, FILE* file)
00036 {
00037   if (!src)
00038     return GL_FALSE;
00039 
00040   _CL_FWRITE(src, sizeof(CLnormal), 1, file);
00041   
00042   return GL_TRUE;
00043 }
00044 
00045 bool clWriteTexCoord(const CLtexcoord* src, FILE* file)
00046 {
00047   if (!src)
00048     return GL_FALSE;
00049 
00050   _CL_FWRITE(src, sizeof(CLtexcoord), 1, file);
00051   
00052   return GL_TRUE;
00053 }
00054 
00055 bool clWriteEdgeFlag(const CLedgeflag* src, FILE* file)
00056 {
00057   if (!src)
00058     return GL_FALSE;
00059 
00060   _CL_FWRITE(src, sizeof(CLedgeflag), 1, file);
00061 
00062   return GL_TRUE;
00063 }
00064 
00065 bool clWriteMatrix(const CLmatrix* src, FILE* file)
00066 {
00067   if (!src)
00068     return GL_FALSE;
00069 
00070   _CL_FWRITE(src, sizeof(CLmatrix), 1, file);
00071 
00072   return GL_TRUE;
00073 }
00074 
00075 bool clWriteImage(const CLimage* src, FILE* file)
00076 {
00077   if (!src)
00078     return GL_FALSE;
00079   
00080   _CL_FWRITE(src, sizeof(CLimage), 1, file);
00081   _CL_FWRITE(src->data, clImageDataSize(src), 1, file);
00082   
00083   return GL_TRUE;
00084 }
00085 
00086 bool clWriteLight(const CLlight* src, FILE* file)
00087 {
00088   if (!src)
00089     return GL_FALSE;
00090 
00091   _CL_FWRITE(src, sizeof(CLlight), 1, file);
00092 
00093   return GL_TRUE;
00094 }
00095 
00096 bool clWriteMaterial(const CLmaterial* src, FILE* file)
00097 {
00098   if (!src)
00099     return GL_FALSE;
00100 
00101   _CL_FWRITE(src, sizeof(CLmaterial), 1, file);
00102 
00103   return GL_TRUE;
00104 }
00105 
00106 bool clWriteTexture(const CLtexture* src, FILE* file)
00107 {  
00108   if (!src)
00109     return GL_FALSE;
00110   
00111   _CL_FWRITE(src, sizeof(CLtexture), 1, file);
00112   _CL_FWRITE(src->image.data, clImageDataSize(&src->image), 1, file);
00113   
00114   return GL_TRUE;
00115 }
00116 
00117 bool clWritePrimitiveSet(const CLprimitiveset* src, FILE* file)
00118 {
00119   if (!src)
00120     return GL_FALSE;
00121   
00122   _CL_FWRITE(src, sizeof(CLprimitiveset), 1, file);
00123   _CL_FWRITE(src->indices, sizeof(GLuint), src->num_indices, file);
00124   
00125   return GL_TRUE;
00126 }
00127 
00128 /* 
00129    READ ME!
00130    
00131    change clWriteX calls to if (!(clWriteX)) return GL_FALSE;
00132 */
00133 
00134 bool clWriteMesh(const CLmesh* src, FILE* file)
00135 {
00136   GLuint i;
00137   
00138   if (!src)
00139     return GL_FALSE;
00140   
00141   _CL_FWRITE(src, sizeof(CLmesh), 1, file);
00142 
00143   if (src->colour)
00144     if (!(clWriteColour(src->colour, file)))
00145       return GL_FALSE;
00146   
00147   _CL_FWRITE(src->vertices, sizeof(CLvertex), src->num_vertices, file);
00148   
00149   if (src->colours)
00150     _CL_FWRITE(src->colours, sizeof(CLcolour), src->num_vertices, file);
00151   
00152   if (src->normals)
00153     _CL_FWRITE(src->normals, sizeof(CLnormal), src->num_vertices, file);
00154   
00155   if (src->texcoords)
00156     _CL_FWRITE(src->texcoords, sizeof(CLtexcoord), src->num_vertices, file);
00157   
00158   if (src->edgeflags)
00159     _CL_FWRITE(src->edgeflags, sizeof(CLedgeflag), src->num_vertices, file);
00160   
00161   for (i = 0; i < src->num_primitivesets; i++)
00162     if (!(clWritePrimitiveSet(src->primitivesets[i], file)))
00163       return GL_FALSE;
00164 
00165   return GL_TRUE;
00166 }
00167 
00168 bool clWriteContext(const CLcontext* src, FILE* file)
00169 {
00170   GLuint i;
00171 
00172   if (!src)
00173     return GL_FALSE;
00174 
00175   _CL_FWRITE(src, sizeof(CLcontext), 1, file);
00176   
00177   for (i = 0; i < src->num_materials; i++)
00178     if (!(clWriteMaterial(src->materials[i], file)))
00179       return GL_FALSE;
00180   
00181   for (i = 0; i < src->num_textures; i++)
00182     if (!(clWriteTexture(src->textures[i], file)))
00183       return GL_FALSE;
00184   
00185   for (i = 0; i < src->num_lights; i++)
00186     if (!(clWriteLight(src->lights[i], file)))
00187       return GL_FALSE;
00188   
00189   for (i = 0; i < src->num_models; i++)
00190     if (!(clWriteModel(src->models[i], file)))
00191       return GL_FALSE;
00192 
00193   return GL_TRUE;
00194 }
00195 
00197 bool clWriteModel(const CLmodel* src, FILE* file)
00198 {
00199   GLuint i;
00200 
00201   if (!src)
00202     return GL_FALSE;
00203   
00204   _CL_FWRITE(src, sizeof(CLmodel), 1, file);
00205   
00206   for (i = 0; i < src->num_meshes; i++)
00207   {  
00208     if (!(clWriteMesh(src->meshes[i], file)))
00209       return GL_FALSE;
00210   }
00211   return GL_TRUE;
00212 }

Generated on Thu Dec 27 13:53:41 2007 for CL by  doxygen 1.4.6