Home | API | File List | Examples | Download

lib3ds_shadow.c

00001 /*
00002     Copyright (C) 1996-2008 by Jan Eric Kyprianidis <www.kyprianidis.com>
00003     All rights reserved.
00004     
00005     This program is free  software: you can redistribute it and/or modify 
00006     it under the terms of the GNU Lesser General Public License as published 
00007     by the Free Software Foundation, either version 2.1 of the License, or 
00008     (at your option) any later version.
00009 
00010     Thisprogram  is  distributed in the hope that it will be useful, 
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of 
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
00013     GNU Lesser General Public License for more details.
00014     
00015     You should  have received a copy of the GNU Lesser General Public License
00016     along with  this program; If not, see <http://www.gnu.org/licenses/>. 
00017 */
00018 #include "lib3ds_impl.h"
00019 
00020 
00021 void
00022 lib3ds_shadow_read(Lib3dsShadow *shadow, Lib3dsIo *io) {
00023     Lib3dsChunk c;
00024 
00025     lib3ds_chunk_read(&c, io);
00026     switch (c.chunk) {
00027         case CHK_SHADOW_MAP_SIZE: {
00028             shadow->map_size = lib3ds_io_read_intw(io);
00029             break;
00030         }
00031 
00032         case CHK_LO_SHADOW_BIAS: {
00033             shadow->low_bias = lib3ds_io_read_float(io);
00034             break;
00035         }
00036 
00037         case CHK_HI_SHADOW_BIAS: {
00038             shadow->hi_bias = lib3ds_io_read_float(io);
00039             break;
00040         }
00041 
00042         case CHK_SHADOW_FILTER: {
00043             shadow->filter = lib3ds_io_read_float(io);
00044             break;
00045         }
00046 
00047         case CHK_RAY_BIAS: {
00048             shadow->ray_bias = lib3ds_io_read_float(io);
00049             break;
00050         }
00051     }
00052 }
00053 
00054 
00055 void
00056 lib3ds_shadow_write(Lib3dsShadow *shadow, Lib3dsIo *io) {
00057     if (fabs(shadow->low_bias) > LIB3DS_EPSILON) { /*---- CHK_LO_SHADOW_BIAS ----*/
00058         Lib3dsChunk c;
00059         c.chunk = CHK_LO_SHADOW_BIAS;
00060         c.size = 10;
00061         lib3ds_chunk_write(&c, io);
00062         lib3ds_io_write_float(io, shadow->low_bias);
00063     }
00064 
00065     if (fabs(shadow->hi_bias) > LIB3DS_EPSILON) { /*---- CHK_HI_SHADOW_BIAS ----*/
00066         Lib3dsChunk c;
00067         c.chunk = CHK_HI_SHADOW_BIAS;
00068         c.size = 10;
00069         lib3ds_chunk_write(&c, io);
00070         lib3ds_io_write_float(io, shadow->hi_bias);
00071     }
00072 
00073     if (shadow->map_size) { /*---- CHK_SHADOW_MAP_SIZE ----*/
00074         Lib3dsChunk c;
00075         c.chunk = CHK_SHADOW_MAP_SIZE;
00076         c.size = 8;
00077         lib3ds_chunk_write(&c, io);
00078         lib3ds_io_write_intw(io, shadow->map_size);
00079     }
00080 
00081     if (fabs(shadow->filter) > LIB3DS_EPSILON) { /*---- CHK_SHADOW_FILTER ----*/
00082         Lib3dsChunk c;
00083         c.chunk = CHK_SHADOW_FILTER;
00084         c.size = 10;
00085         lib3ds_chunk_write(&c, io);
00086         lib3ds_io_write_float(io, shadow->filter);
00087     }
00088     if (fabs(shadow->ray_bias) > LIB3DS_EPSILON) { /*---- CHK_RAY_BIAS ----*/
00089         Lib3dsChunk c;
00090         c.chunk = CHK_RAY_BIAS;
00091         c.size = 10;
00092         lib3ds_chunk_write(&c, io);
00093         lib3ds_io_write_float(io, shadow->ray_bias);
00094     }
00095 }
00096