00001 #include <cl.h> 00002 00003 /* 00004 clDefault: set a struct to some meaningful default 00005 defaults usually represent OpenGL defaults 00006 do nothing and return NULL if input is NULL 00007 */ 00008 00009 CLcolour* clDefaultColour(CLcolour* colour) 00010 { 00011 if (!colour) 00012 { 00013 return 0; 00014 } 00015 00016 colour->r = 1.0f; 00017 colour->g = 1.0f; 00018 colour->b = 1.0f; 00019 colour->a = 1.0f; 00020 00021 return colour; 00022 } 00023 00024 CLvertex* clDefaultVertex(CLvertex* vertex) 00025 { 00026 if (!vertex) 00027 { 00028 return 0; 00029 } 00030 00031 vertex->x = 0.0f; 00032 vertex->y = 0.0f; 00033 vertex->z = 0.0f; 00034 00035 return vertex; 00036 } 00037 00038 CLnormal* clDefaultNormal(CLnormal* normal) 00039 { 00040 if (!normal) 00041 { 00042 return 0; 00043 } 00044 00045 normal->i = 0.0f; 00046 normal->j = 0.0f; 00047 normal->k = 1.0f; 00048 00049 return normal; 00050 } 00051 00052 CLtexcoord* clDefaultTexCoord(CLtexcoord* texcoord) 00053 { 00054 if (!texcoord) 00055 { 00056 return 0; 00057 } 00058 00059 texcoord->s = 0.0f; 00060 texcoord->t = 0.0f; 00061 00062 return texcoord; 00063 } 00064 00065 CLedgeflag* clDefaultEdgeFlag(CLedgeflag* edgeflag) 00066 { 00067 if (!edgeflag) 00068 { 00069 return 0; 00070 } 00071 00072 *edgeflag = GL_FALSE; 00073 00074 return edgeflag; 00075 } 00076 00077 CLmatrix* clDefaultMatrix(CLmatrix* matrix) 00078 { 00079 if (!matrix) 00080 { 00081 return 0; 00082 } 00083 00084 matrix->m00 = 1.0f; 00085 matrix->m01 = 0.0f; 00086 matrix->m02 = 0.0f; 00087 matrix->m03 = 0.0f; 00088 matrix->m10 = 0.0f; 00089 matrix->m11 = 1.0f; 00090 matrix->m12 = 0.0f; 00091 matrix->m13 = 0.0f; 00092 matrix->m20 = 0.0f; 00093 matrix->m21 = 0.0f; 00094 matrix->m22 = 1.0f; 00095 matrix->m23 = 0.0f; 00096 matrix->m30 = 0.0f; 00097 matrix->m31 = 0.0f; 00098 matrix->m32 = 0.0f; 00099 matrix->m33 = 1.0f; 00100 00101 return matrix; 00102 } 00103 00104 CLimage* clDefaultImage(CLimage* image) 00105 { 00106 GLubyte data[16]; 00107 00108 if (!image) 00109 { 00110 return 0; 00111 } 00112 00113 clClearImage(image); 00114 00115 image->width = 2; 00116 image->height = 2; 00117 image->format = GL_RGBA; 00118 image->type = GL_UNSIGNED_BYTE; 00119 00120 data[0] = 255; 00121 data[1] = 255; 00122 data[2] = 255; 00123 data[3] = 255; 00124 data[4] = 255; 00125 data[5] = 0; 00126 data[6] = 0; 00127 data[7] = 255; 00128 data[8] = 0; 00129 data[9] = 255; 00130 data[10] = 0; 00131 data[11] = 255; 00132 data[12] = 0; 00133 data[13] = 0; 00134 data[14] = 255; 00135 data[15] = 255; 00136 00137 image->data = (void*)CL_MALLOC(16 * sizeof(GLubyte)); 00138 image->data = (void*)CL_MEMCPY(image->data, data, 16 * sizeof(GLubyte)); 00139 00140 return image; 00141 } 00142 00143 CLlight* clDefaultLight(CLlight* light) 00144 { 00145 if (!light) 00146 { 00147 return 0; 00148 } 00149 00150 clClearLight(light); 00151 00152 light->id = GL_LIGHT0; 00153 00154 light->ambient.r = 0.0f; 00155 light->ambient.g = 0.0f; 00156 light->ambient.b = 0.0f; 00157 light->ambient.a = 1.0f; 00158 00159 light->diffuse.r = 1.0f; 00160 light->diffuse.g = 1.0f; 00161 light->diffuse.b = 1.0f; 00162 light->diffuse.a = 1.0f; 00163 00164 light->specular.r = 1.0f; 00165 light->specular.g = 1.0f; 00166 light->specular.b = 1.0f; 00167 light->specular.a = 1.0f; 00168 00169 light->position[0] = 0.0f; 00170 light->position[1] = 0.0f; 00171 light->position[2] = 1.0f; 00172 light->position[3] = 0.0f; 00173 00174 light->spot_direction.i = 0.0f; 00175 light->spot_direction.j = 0.0f; 00176 light->spot_direction.k = -1.0f; 00177 00178 light->spot_exponent = 0.0f; 00179 light->spot_cutoff = 180.0f; 00180 light->constant_attenuation = 1.0f; 00181 light->linear_attenuation = 0.0f; 00182 light->quadratic_attenuation = 0.0f; 00183 00184 light->display_list = 0; 00185 00186 return light; 00187 } 00188 00189 CLmaterial* clDefaultMaterial(CLmaterial* material) 00190 { 00191 if (!material) 00192 { 00193 return 0; 00194 } 00195 00196 clClearMaterial(material); 00197 00198 material->face = GL_FRONT; 00199 00200 material->ambient.r = 0.2f; 00201 material->ambient.g = 0.2f; 00202 material->ambient.b = 0.2f; 00203 material->ambient.a = 1.0f; 00204 00205 material->diffuse.r = 0.8f; 00206 material->diffuse.g = 0.8f; 00207 material->diffuse.b = 0.8f; 00208 material->diffuse.a = 1.0f; 00209 00210 material->specular.r = 0.0f; 00211 material->specular.g = 0.0f; 00212 material->specular.b = 0.0f; 00213 material->specular.a = 1.0f; 00214 00215 material->emission.r = 0.0f; 00216 material->emission.g = 0.0f; 00217 material->emission.b = 0.0f; 00218 material->emission.a = 1.0f; 00219 00220 material->shininess = 0.0f; 00221 00222 material->display_list = 0; 00223 00224 return material; 00225 } 00226 00227 CLtexture* clDefaultTexture(CLtexture* texture) 00228 { 00229 if (!texture) 00230 { 00231 return 0; 00232 } 00233 00234 clClearTexture(texture); 00235 00236 clDefaultImage(&texture->image); 00237 00238 texture->min_filter = GL_NEAREST; 00239 texture->mag_filter = GL_NEAREST; 00240 00241 /* 00242 texture->min_filter = GL_LINEAR_MIPMAP_LINEAR; 00243 texture->mag_filter = GL_LINEAR; 00244 */ 00245 00246 texture->wrap_s = GL_REPEAT; 00247 texture->wrap_t = GL_REPEAT; 00248 00249 texture->texture_object = 0; 00250 00251 return texture; 00252 } 00253 00254 CLprimitiveset* clDefaultPrimitiveSet(CLprimitiveset* primitiveset) 00255 { 00256 if (!primitiveset) 00257 { 00258 return 0; 00259 } 00260 00261 clClearPrimitiveSet(primitiveset); 00262 00263 primitiveset->mode = GL_TRIANGLES; 00264 primitiveset->num_indices = 0; 00265 primitiveset->indices = 0; 00266 00267 return primitiveset; 00268 } 00269 00270 CLmesh* clDefaultMesh(CLmesh* mesh) 00271 { 00272 if (!mesh) 00273 { 00274 return 0; 00275 } 00276 00277 clClearMesh(mesh); 00278 00279 mesh->context = 0; 00280 00281 mesh->colour = 0; 00282 mesh->material_index = -1; 00283 mesh->texture_index = -1; 00284 mesh->texture_env_mode = GL_MODULATE; 00285 00286 mesh->num_vertices = 0; 00287 mesh->vertices = 0; 00288 mesh->colours = 0; 00289 mesh->normals = 0; 00290 mesh->texcoords = 0; 00291 mesh->edgeflags = 0; 00292 00293 mesh->num_primitivesets = 0; 00294 mesh->primitivesets = 0; 00295 00296 mesh->display_list = 0; 00297 00298 return mesh; 00299 } 00300 00301 CLcontext* clDefaultContext(CLcontext* context) 00302 { 00303 if (!context) 00304 { 00305 return 0; 00306 } 00307 00308 clClearContext(context); 00309 00310 context->num_materials = 0; 00311 context->materials = 0; 00312 00313 context->num_lights = 0; 00314 context->lights = 0; 00315 00316 context->num_textures = 0; 00317 context->textures = 0; 00318 00319 context->num_models = 0; 00320 context->models = 0; 00321 00322 return context; 00323 } 00324 00325 CLmodel* clDefaultModel(CLmodel* model) 00326 { 00327 if (!model) 00328 { 00329 return 0; 00330 } 00331 00332 clClearModel(model); 00333 00334 model->context = 0; 00335 00336 model->num_meshes = 0; 00337 model->meshes = 0; 00338 00339 return model; 00340 }