| [10853] | 1 | |
|---|
| 2 | #ifndef INCLUDED_LIB3DS_IMPL_H |
|---|
| 3 | #define INCLUDED_LIB3DS_IMPL_H |
|---|
| 4 | |
|---|
| 5 | |
|---|
| 6 | |
|---|
| 7 | |
|---|
| 8 | |
|---|
| 9 | |
|---|
| 10 | |
|---|
| 11 | |
|---|
| 12 | |
|---|
| 13 | |
|---|
| 14 | |
|---|
| 15 | |
|---|
| 16 | |
|---|
| 17 | |
|---|
| 18 | |
|---|
| 19 | |
|---|
| 20 | |
|---|
| 21 | |
|---|
| 22 | #include "lib3ds.h" |
|---|
| 23 | #include <stdio.h> |
|---|
| 24 | #include <stdlib.h> |
|---|
| 25 | #include <stdarg.h> |
|---|
| 26 | #include <string.h> |
|---|
| 27 | #include <math.h> |
|---|
| 28 | #include <float.h> |
|---|
| 29 | #include <assert.h> |
|---|
| 30 | #include <setjmp.h> |
|---|
| 31 | #include <stdarg.h> |
|---|
| 32 | |
|---|
| 33 | #ifdef _MSC_VER |
|---|
| 34 | #pragma warning ( disable : 4996 ) |
|---|
| 35 | #endif |
|---|
| 36 | |
|---|
| 37 | |
|---|
| 38 | #ifndef _MSC_VER |
|---|
| 39 | #include <stdint.h> |
|---|
| 40 | #else |
|---|
| 41 | |
|---|
| 42 | typedef unsigned __int8 uint8_t; |
|---|
| 43 | typedef unsigned __int16 uint16_t; |
|---|
| 44 | typedef unsigned __int32 uint32_t; |
|---|
| 45 | typedef signed __int8 int8_t; |
|---|
| 46 | typedef signed __int16 int16_t; |
|---|
| 47 | typedef signed __int32 int32_t; |
|---|
| 48 | #endif |
|---|
| 49 | |
|---|
| 50 | |
|---|
| 51 | #ifndef TRUE |
|---|
| 52 | #define TRUE 1 |
|---|
| 53 | #endif |
|---|
| 54 | |
|---|
| 55 | #ifndef FALSE |
|---|
| 56 | #define FALSE 0 |
|---|
| 57 | #endif |
|---|
| 58 | |
|---|
| 59 | |
|---|
| 60 | #define LIB3DS_EPSILON (1e-5) |
|---|
| 61 | #define LIB3DS_PI 3.14159265358979323846 |
|---|
| 62 | #define LIB3DS_TWOPI (2.0*LIB3DS_PI) |
|---|
| 63 | #define LIB3DS_HALFPI (LIB3DS_PI/2.0) |
|---|
| 64 | #define LIB3DS_RAD_TO_DEG(x) ((180.0/LIB3DS_PI)*(x)) |
|---|
| 65 | #define LIB3DS_DEG_TO_RAD(x) ((LIB3DS_PI/180.0)*(x)) |
|---|
| 66 | |
|---|
| 67 | #ifdef __cplusplus |
|---|
| 68 | extern "C" { |
|---|
| 69 | #endif |
|---|
| 70 | |
|---|
| 71 | |
|---|
| 72 | typedef enum Lib3dsChunks { |
|---|
| 73 | CHK_NULL_CHUNK =0x0000, |
|---|
| 74 | CHK_M3DMAGIC =0x4D4D, |
|---|
| 75 | CHK_SMAGIC =0x2D2D, |
|---|
| 76 | CHK_LMAGIC =0x2D3D, |
|---|
| 77 | CHK_MLIBMAGIC =0x3DAA, |
|---|
| 78 | CHK_MATMAGIC =0x3DFF, |
|---|
| 79 | CHK_CMAGIC =0xC23D, |
|---|
| 80 | CHK_M3D_VERSION =0x0002, |
|---|
| 81 | CHK_M3D_KFVERSION =0x0005, |
|---|
| 82 | |
|---|
| 83 | CHK_COLOR_F =0x0010, |
|---|
| 84 | CHK_COLOR_24 =0x0011, |
|---|
| 85 | CHK_LIN_COLOR_24 =0x0012, |
|---|
| 86 | CHK_LIN_COLOR_F =0x0013, |
|---|
| 87 | CHK_INT_PERCENTAGE =0x0030, |
|---|
| 88 | CHK_FLOAT_PERCENTAGE =0x0031, |
|---|
| 89 | |
|---|
| 90 | CHK_MDATA =0x3D3D, |
|---|
| 91 | CHK_MESH_VERSION =0x3D3E, |
|---|
| 92 | CHK_MASTER_SCALE =0x0100, |
|---|
| 93 | CHK_LO_SHADOW_BIAS =0x1400, |
|---|
| 94 | CHK_HI_SHADOW_BIAS =0x1410, |
|---|
| 95 | CHK_SHADOW_MAP_SIZE =0x1420, |
|---|
| 96 | CHK_SHADOW_SAMPLES =0x1430, |
|---|
| 97 | CHK_SHADOW_RANGE =0x1440, |
|---|
| 98 | CHK_SHADOW_FILTER =0x1450, |
|---|
| 99 | CHK_RAY_BIAS =0x1460, |
|---|
| 100 | CHK_O_CONSTS =0x1500, |
|---|
| 101 | CHK_AMBIENT_LIGHT =0x2100, |
|---|
| 102 | CHK_BIT_MAP =0x1100, |
|---|
| 103 | CHK_SOLID_BGND =0x1200, |
|---|
| 104 | CHK_V_GRADIENT =0x1300, |
|---|
| 105 | CHK_USE_BIT_MAP =0x1101, |
|---|
| 106 | CHK_USE_SOLID_BGND =0x1201, |
|---|
| 107 | CHK_USE_V_GRADIENT =0x1301, |
|---|
| 108 | CHK_FOG =0x2200, |
|---|
| 109 | CHK_FOG_BGND =0x2210, |
|---|
| 110 | CHK_LAYER_FOG =0x2302, |
|---|
| 111 | CHK_DISTANCE_CUE =0x2300, |
|---|
| 112 | CHK_DCUE_BGND =0x2310, |
|---|
| 113 | CHK_USE_FOG =0x2201, |
|---|
| 114 | CHK_USE_LAYER_FOG =0x2303, |
|---|
| 115 | CHK_USE_DISTANCE_CUE =0x2301, |
|---|
| 116 | |
|---|
| 117 | CHK_MAT_ENTRY =0xAFFF, |
|---|
| 118 | CHK_MAT_NAME =0xA000, |
|---|
| 119 | CHK_MAT_AMBIENT =0xA010, |
|---|
| 120 | CHK_MAT_DIFFUSE =0xA020, |
|---|
| 121 | CHK_MAT_SPECULAR =0xA030, |
|---|
| 122 | CHK_MAT_SHININESS =0xA040, |
|---|
| 123 | CHK_MAT_SHIN2PCT =0xA041, |
|---|
| 124 | CHK_MAT_TRANSPARENCY =0xA050, |
|---|
| 125 | CHK_MAT_XPFALL =0xA052, |
|---|
| 126 | CHK_MAT_USE_XPFALL =0xA240, |
|---|
| 127 | CHK_MAT_REFBLUR =0xA053, |
|---|
| 128 | CHK_MAT_SHADING =0xA100, |
|---|
| 129 | CHK_MAT_USE_REFBLUR =0xA250, |
|---|
| 130 | CHK_MAT_SELF_ILLUM =0xA080, |
|---|
| 131 | CHK_MAT_TWO_SIDE =0xA081, |
|---|
| 132 | CHK_MAT_DECAL =0xA082, |
|---|
| 133 | CHK_MAT_ADDITIVE =0xA083, |
|---|
| 134 | CHK_MAT_SELF_ILPCT =0xA084, |
|---|
| 135 | CHK_MAT_WIRE =0xA085, |
|---|
| 136 | CHK_MAT_FACEMAP =0xA088, |
|---|
| 137 | CHK_MAT_PHONGSOFT =0xA08C, |
|---|
| 138 | CHK_MAT_WIREABS =0xA08E, |
|---|
| 139 | CHK_MAT_WIRE_SIZE =0xA087, |
|---|
| 140 | CHK_MAT_TEXMAP =0xA200, |
|---|
| 141 | CHK_MAT_SXP_TEXT_DATA =0xA320, |
|---|
| 142 | CHK_MAT_TEXMASK =0xA33E, |
|---|
| 143 | CHK_MAT_SXP_TEXTMASK_DATA =0xA32A, |
|---|
| 144 | CHK_MAT_TEX2MAP =0xA33A, |
|---|
| 145 | CHK_MAT_SXP_TEXT2_DATA =0xA321, |
|---|
| 146 | CHK_MAT_TEX2MASK =0xA340, |
|---|
| 147 | CHK_MAT_SXP_TEXT2MASK_DATA =0xA32C, |
|---|
| 148 | CHK_MAT_OPACMAP =0xA210, |
|---|
| 149 | CHK_MAT_SXP_OPAC_DATA =0xA322, |
|---|
| 150 | CHK_MAT_OPACMASK =0xA342, |
|---|
| 151 | CHK_MAT_SXP_OPACMASK_DATA =0xA32E, |
|---|
| 152 | CHK_MAT_BUMPMAP =0xA230, |
|---|
| 153 | CHK_MAT_SXP_BUMP_DATA =0xA324, |
|---|
| 154 | CHK_MAT_BUMPMASK =0xA344, |
|---|
| 155 | CHK_MAT_SXP_BUMPMASK_DATA =0xA330, |
|---|
| 156 | CHK_MAT_SPECMAP =0xA204, |
|---|
| 157 | CHK_MAT_SXP_SPEC_DATA =0xA325, |
|---|
| 158 | CHK_MAT_SPECMASK =0xA348, |
|---|
| 159 | CHK_MAT_SXP_SPECMASK_DATA =0xA332, |
|---|
| 160 | CHK_MAT_SHINMAP =0xA33C, |
|---|
| 161 | CHK_MAT_SXP_SHIN_DATA =0xA326, |
|---|
| 162 | CHK_MAT_SHINMASK =0xA346, |
|---|
| 163 | CHK_MAT_SXP_SHINMASK_DATA =0xA334, |
|---|
| 164 | CHK_MAT_SELFIMAP =0xA33D, |
|---|
| 165 | CHK_MAT_SXP_SELFI_DATA =0xA328, |
|---|
| 166 | CHK_MAT_SELFIMASK =0xA34A, |
|---|
| 167 | CHK_MAT_SXP_SELFIMASK_DATA =0xA336, |
|---|
| 168 | CHK_MAT_REFLMAP =0xA220, |
|---|
| 169 | CHK_MAT_REFLMASK =0xA34C, |
|---|
| 170 | CHK_MAT_SXP_REFLMASK_DATA =0xA338, |
|---|
| 171 | CHK_MAT_ACUBIC =0xA310, |
|---|
| 172 | CHK_MAT_MAPNAME =0xA300, |
|---|
| 173 | CHK_MAT_MAP_TILING =0xA351, |
|---|
| 174 | CHK_MAT_MAP_TEXBLUR =0xA353, |
|---|
| 175 | CHK_MAT_MAP_USCALE =0xA354, |
|---|
| 176 | CHK_MAT_MAP_VSCALE =0xA356, |
|---|
| 177 | CHK_MAT_MAP_UOFFSET =0xA358, |
|---|
| 178 | CHK_MAT_MAP_VOFFSET =0xA35A, |
|---|
| 179 | CHK_MAT_MAP_ANG =0xA35C, |
|---|
| 180 | CHK_MAT_MAP_COL1 =0xA360, |
|---|
| 181 | CHK_MAT_MAP_COL2 =0xA362, |
|---|
| 182 | CHK_MAT_MAP_RCOL =0xA364, |
|---|
| 183 | CHK_MAT_MAP_GCOL =0xA366, |
|---|
| 184 | CHK_MAT_MAP_BCOL =0xA368, |
|---|
| 185 | |
|---|
| 186 | CHK_NAMED_OBJECT =0x4000, |
|---|
| 187 | CHK_N_DIRECT_LIGHT =0x4600, |
|---|
| 188 | CHK_DL_OFF =0x4620, |
|---|
| 189 | CHK_DL_OUTER_RANGE =0x465A, |
|---|
| 190 | CHK_DL_INNER_RANGE =0x4659, |
|---|
| 191 | CHK_DL_MULTIPLIER =0x465B, |
|---|
| 192 | CHK_DL_EXCLUDE =0x4654, |
|---|
| 193 | CHK_DL_ATTENUATE =0x4625, |
|---|
| 194 | CHK_DL_SPOTLIGHT =0x4610, |
|---|
| 195 | CHK_DL_SPOT_ROLL =0x4656, |
|---|
| 196 | CHK_DL_SHADOWED =0x4630, |
|---|
| 197 | CHK_DL_LOCAL_SHADOW2 =0x4641, |
|---|
| 198 | CHK_DL_SEE_CONE =0x4650, |
|---|
| 199 | CHK_DL_SPOT_RECTANGULAR =0x4651, |
|---|
| 200 | CHK_DL_SPOT_ASPECT =0x4657, |
|---|
| 201 | CHK_DL_SPOT_PROJECTOR =0x4653, |
|---|
| 202 | CHK_DL_SPOT_OVERSHOOT =0x4652, |
|---|
| 203 | CHK_DL_RAY_BIAS =0x4658, |
|---|
| 204 | CHK_DL_RAYSHAD =0x4627, |
|---|
| 205 | CHK_N_CAMERA =0x4700, |
|---|
| 206 | CHK_CAM_SEE_CONE =0x4710, |
|---|
| 207 | CHK_CAM_RANGES =0x4720, |
|---|
| 208 | CHK_OBJ_HIDDEN =0x4010, |
|---|
| 209 | CHK_OBJ_VIS_LOFTER =0x4011, |
|---|
| 210 | CHK_OBJ_DOESNT_CAST =0x4012, |
|---|
| 211 | CHK_OBJ_DONT_RCVSHADOW =0x4017, |
|---|
| 212 | CHK_OBJ_MATTE =0x4013, |
|---|
| 213 | CHK_OBJ_FAST =0x4014, |
|---|
| 214 | CHK_OBJ_PROCEDURAL =0x4015, |
|---|
| 215 | CHK_OBJ_FROZEN =0x4016, |
|---|
| 216 | CHK_N_TRI_OBJECT =0x4100, |
|---|
| 217 | CHK_POINT_ARRAY =0x4110, |
|---|
| 218 | CHK_POINT_FLAG_ARRAY =0x4111, |
|---|
| 219 | CHK_FACE_ARRAY =0x4120, |
|---|
| 220 | CHK_MSH_MAT_GROUP =0x4130, |
|---|
| 221 | CHK_SMOOTH_GROUP =0x4150, |
|---|
| 222 | CHK_MSH_BOXMAP =0x4190, |
|---|
| 223 | CHK_TEX_VERTS =0x4140, |
|---|
| 224 | CHK_MESH_MATRIX =0x4160, |
|---|
| 225 | CHK_MESH_COLOR =0x4165, |
|---|
| 226 | CHK_MESH_TEXTURE_INFO =0x4170, |
|---|
| 227 | |
|---|
| 228 | CHK_KFDATA =0xB000, |
|---|
| 229 | CHK_KFHDR =0xB00A, |
|---|
| 230 | CHK_KFSEG =0xB008, |
|---|
| 231 | CHK_KFCURTIME =0xB009, |
|---|
| 232 | CHK_AMBIENT_NODE_TAG =0xB001, |
|---|
| 233 | CHK_OBJECT_NODE_TAG =0xB002, |
|---|
| 234 | CHK_CAMERA_NODE_TAG =0xB003, |
|---|
| 235 | CHK_TARGET_NODE_TAG =0xB004, |
|---|
| 236 | CHK_LIGHT_NODE_TAG =0xB005, |
|---|
| 237 | CHK_L_TARGET_NODE_TAG =0xB006, |
|---|
| 238 | CHK_SPOTLIGHT_NODE_TAG =0xB007, |
|---|
| 239 | CHK_NODE_ID =0xB030, |
|---|
| 240 | CHK_NODE_HDR =0xB010, |
|---|
| 241 | CHK_PIVOT =0xB013, |
|---|
| 242 | CHK_INSTANCE_NAME =0xB011, |
|---|
| 243 | CHK_MORPH_SMOOTH =0xB015, |
|---|
| 244 | CHK_BOUNDBOX =0xB014, |
|---|
| 245 | CHK_POS_TRACK_TAG =0xB020, |
|---|
| 246 | CHK_COL_TRACK_TAG =0xB025, |
|---|
| 247 | CHK_ROT_TRACK_TAG =0xB021, |
|---|
| 248 | CHK_SCL_TRACK_TAG =0xB022, |
|---|
| 249 | CHK_MORPH_TRACK_TAG =0xB026, |
|---|
| 250 | CHK_FOV_TRACK_TAG =0xB023, |
|---|
| 251 | CHK_ROLL_TRACK_TAG =0xB024, |
|---|
| 252 | CHK_HOT_TRACK_TAG =0xB027, |
|---|
| 253 | CHK_FALL_TRACK_TAG =0xB028, |
|---|
| 254 | CHK_HIDE_TRACK_TAG =0xB029, |
|---|
| 255 | |
|---|
| 256 | CHK_POLY_2D = 0x5000, |
|---|
| 257 | CHK_SHAPE_OK = 0x5010, |
|---|
| 258 | CHK_SHAPE_NOT_OK = 0x5011, |
|---|
| 259 | CHK_SHAPE_HOOK = 0x5020, |
|---|
| 260 | CHK_PATH_3D = 0x6000, |
|---|
| 261 | CHK_PATH_MATRIX = 0x6005, |
|---|
| 262 | CHK_SHAPE_2D = 0x6010, |
|---|
| 263 | CHK_M_SCALE = 0x6020, |
|---|
| 264 | CHK_M_TWIST = 0x6030, |
|---|
| 265 | CHK_M_TEETER = 0x6040, |
|---|
| 266 | CHK_M_FIT = 0x6050, |
|---|
| 267 | CHK_M_BEVEL = 0x6060, |
|---|
| 268 | CHK_XZ_CURVE = 0x6070, |
|---|
| 269 | CHK_YZ_CURVE = 0x6080, |
|---|
| 270 | CHK_INTERPCT = 0x6090, |
|---|
| 271 | CHK_DEFORM_LIMIT = 0x60A0, |
|---|
| 272 | |
|---|
| 273 | CHK_USE_CONTOUR = 0x6100, |
|---|
| 274 | CHK_USE_TWEEN = 0x6110, |
|---|
| 275 | CHK_USE_SCALE = 0x6120, |
|---|
| 276 | CHK_USE_TWIST = 0x6130, |
|---|
| 277 | CHK_USE_TEETER = 0x6140, |
|---|
| 278 | CHK_USE_FIT = 0x6150, |
|---|
| 279 | CHK_USE_BEVEL = 0x6160, |
|---|
| 280 | |
|---|
| 281 | CHK_DEFAULT_VIEW = 0x3000, |
|---|
| 282 | CHK_VIEW_TOP = 0x3010, |
|---|
| 283 | CHK_VIEW_BOTTOM = 0x3020, |
|---|
| 284 | CHK_VIEW_LEFT = 0x3030, |
|---|
| 285 | CHK_VIEW_RIGHT = 0x3040, |
|---|
| 286 | CHK_VIEW_FRONT = 0x3050, |
|---|
| 287 | CHK_VIEW_BACK = 0x3060, |
|---|
| 288 | CHK_VIEW_USER = 0x3070, |
|---|
| 289 | CHK_VIEW_CAMERA = 0x3080, |
|---|
| 290 | CHK_VIEW_WINDOW = 0x3090, |
|---|
| 291 | |
|---|
| 292 | CHK_VIEWPORT_LAYOUT_OLD = 0x7000, |
|---|
| 293 | CHK_VIEWPORT_DATA_OLD = 0x7010, |
|---|
| 294 | CHK_VIEWPORT_LAYOUT = 0x7001, |
|---|
| 295 | CHK_VIEWPORT_DATA = 0x7011, |
|---|
| 296 | CHK_VIEWPORT_DATA_3 = 0x7012, |
|---|
| 297 | CHK_VIEWPORT_SIZE = 0x7020, |
|---|
| 298 | CHK_NETWORK_VIEW = 0x7030 |
|---|
| 299 | } Lib3dsChunks; |
|---|
| 300 | |
|---|
| 301 | typedef struct Lib3dsChunk { |
|---|
| 302 | uint16_t chunk; |
|---|
| 303 | uint32_t size; |
|---|
| 304 | uint32_t end; |
|---|
| 305 | uint32_t cur; |
|---|
| 306 | } Lib3dsChunk; |
|---|
| 307 | |
|---|
| 308 | extern void lib3ds_chunk_read(Lib3dsChunk *c, Lib3dsIo *io); |
|---|
| 309 | extern void lib3ds_chunk_read_start(Lib3dsChunk *c, uint16_t chunk, Lib3dsIo *io); |
|---|
| 310 | extern void lib3ds_chunk_read_tell(Lib3dsChunk *c, Lib3dsIo *io); |
|---|
| 311 | extern uint16_t lib3ds_chunk_read_next(Lib3dsChunk *c, Lib3dsIo *io); |
|---|
| 312 | extern void lib3ds_chunk_read_reset(Lib3dsChunk *c, Lib3dsIo *io); |
|---|
| 313 | extern void lib3ds_chunk_read_end(Lib3dsChunk *c, Lib3dsIo *io); |
|---|
| 314 | extern void lib3ds_chunk_write(Lib3dsChunk *c, Lib3dsIo *io); |
|---|
| 315 | extern void lib3ds_chunk_write_start(Lib3dsChunk *c, Lib3dsIo *io); |
|---|
| 316 | extern void lib3ds_chunk_write_end(Lib3dsChunk *c, Lib3dsIo *io); |
|---|
| 317 | extern const char* lib3ds_chunk_name(uint16_t chunk); |
|---|
| 318 | extern void lib3ds_chunk_unknown(uint16_t chunk, Lib3dsIo *io); |
|---|
| 319 | |
|---|
| 320 | typedef struct Lib3dsIoImpl { |
|---|
| 321 | jmp_buf jmpbuf; |
|---|
| 322 | int log_indent; |
|---|
| 323 | void *tmp_mem; |
|---|
| 324 | Lib3dsNode *tmp_node; |
|---|
| 325 | } Lib3dsIoImpl; |
|---|
| 326 | |
|---|
| 327 | extern void lib3ds_io_setup(Lib3dsIo *io); |
|---|
| 328 | extern void lib3ds_io_cleanup(Lib3dsIo *io); |
|---|
| 329 | |
|---|
| 330 | extern long lib3ds_io_seek(Lib3dsIo *io, long offset, Lib3dsIoSeek origin); |
|---|
| 331 | extern long lib3ds_io_tell(Lib3dsIo *io); |
|---|
| 332 | extern size_t lib3ds_io_read(Lib3dsIo *io, void *buffer, size_t size); |
|---|
| 333 | extern size_t lib3ds_io_write(Lib3dsIo *io, const void *buffer, size_t size); |
|---|
| 334 | extern void lib3ds_io_log(Lib3dsIo *io, Lib3dsLogLevel level, const char *format, ...); |
|---|
| 335 | extern void lib3ds_io_log_indent(Lib3dsIo *io, int indent); |
|---|
| 336 | extern void lib3ds_io_read_error(Lib3dsIo *io); |
|---|
| 337 | extern void lib3ds_io_write_error(Lib3dsIo *io); |
|---|
| 338 | |
|---|
| 339 | extern uint8_t lib3ds_io_read_byte(Lib3dsIo *io); |
|---|
| 340 | extern uint16_t lib3ds_io_read_word(Lib3dsIo *io); |
|---|
| 341 | extern uint32_t lib3ds_io_read_dword(Lib3dsIo *io); |
|---|
| 342 | extern int8_t lib3ds_io_read_intb(Lib3dsIo *io); |
|---|
| 343 | extern int16_t lib3ds_io_read_intw(Lib3dsIo *io); |
|---|
| 344 | extern int32_t lib3ds_io_read_intd(Lib3dsIo *io); |
|---|
| 345 | extern float lib3ds_io_read_float(Lib3dsIo *io); |
|---|
| 346 | extern void lib3ds_io_read_vector(Lib3dsIo *io, float v[3]); |
|---|
| 347 | extern void lib3ds_io_read_rgb(Lib3dsIo *io, float rgb[3]); |
|---|
| 348 | extern void lib3ds_io_read_string(Lib3dsIo *io, char *s, int buflen); |
|---|
| 349 | |
|---|
| 350 | extern void lib3ds_io_write_byte(Lib3dsIo *io, uint8_t b); |
|---|
| 351 | extern void lib3ds_io_write_word(Lib3dsIo *io, uint16_t w); |
|---|
| 352 | extern void lib3ds_io_write_dword(Lib3dsIo *io, uint32_t d); |
|---|
| 353 | extern void lib3ds_io_write_intb(Lib3dsIo *io, int8_t b); |
|---|
| 354 | extern void lib3ds_io_write_intw(Lib3dsIo *io, int16_t w); |
|---|
| 355 | extern void lib3ds_io_write_intd(Lib3dsIo *io, int32_t d); |
|---|
| 356 | extern void lib3ds_io_write_float(Lib3dsIo *io, float l); |
|---|
| 357 | extern void lib3ds_io_write_vector(Lib3dsIo *io, float v[3]); |
|---|
| 358 | extern void lib3ds_io_write_rgb(Lib3dsIo *io, float rgb[3]); |
|---|
| 359 | extern void lib3ds_io_write_string(Lib3dsIo *io, const char *s); |
|---|
| 360 | |
|---|
| 361 | extern void lib3ds_atmosphere_read(Lib3dsAtmosphere *atmosphere, Lib3dsIo *io); |
|---|
| 362 | extern void lib3ds_atmosphere_write(Lib3dsAtmosphere *atmosphere, Lib3dsIo *io); |
|---|
| 363 | extern void lib3ds_background_read(Lib3dsBackground *background, Lib3dsIo *io); |
|---|
| 364 | extern void lib3ds_background_write(Lib3dsBackground *background, Lib3dsIo *io); |
|---|
| 365 | extern void lib3ds_shadow_read(Lib3dsShadow *shadow, Lib3dsIo *io); |
|---|
| 366 | extern void lib3ds_shadow_write(Lib3dsShadow *shadow, Lib3dsIo *io); |
|---|
| 367 | extern void lib3ds_viewport_read(Lib3dsViewport *viewport, Lib3dsIo *io); |
|---|
| 368 | extern void lib3ds_viewport_write(Lib3dsViewport *viewport, Lib3dsIo *io); |
|---|
| 369 | extern void lib3ds_material_read(Lib3dsMaterial *material, Lib3dsIo *io); |
|---|
| 370 | extern void lib3ds_material_write(Lib3dsMaterial *material, Lib3dsIo *io); |
|---|
| 371 | extern void lib3ds_camera_read(Lib3dsCamera *camera, Lib3dsIo *io); |
|---|
| 372 | extern void lib3ds_camera_write(Lib3dsCamera *camera, Lib3dsIo *io); |
|---|
| 373 | extern void lib3ds_light_read(Lib3dsLight *light, Lib3dsIo *io); |
|---|
| 374 | extern void lib3ds_light_write(Lib3dsLight *light, Lib3dsIo *io); |
|---|
| 375 | extern void lib3ds_mesh_read(Lib3dsFile *file, Lib3dsMesh *mesh, Lib3dsIo *io); |
|---|
| 376 | extern void lib3ds_mesh_write(Lib3dsFile *file, Lib3dsMesh *mesh, Lib3dsIo *io); |
|---|
| 377 | extern void lib3ds_track_read(Lib3dsTrack *track, Lib3dsIo *io); |
|---|
| 378 | extern void lib3ds_track_write(Lib3dsTrack *track, Lib3dsIo *io); |
|---|
| 379 | extern void lib3ds_node_read(Lib3dsNode *node, Lib3dsIo *io); |
|---|
| 380 | extern void lib3ds_node_write(Lib3dsNode *node, uint16_t node_id, uint16_t parent_id, Lib3dsIo *io); |
|---|
| 381 | |
|---|
| 382 | typedef void (*Lib3dsFreeFunc)(void *ptr); |
|---|
| 383 | |
|---|
| 384 | extern void* lib3ds_util_realloc_array(void *ptr, int old_size, int new_size, int element_size); |
|---|
| 385 | extern void lib3ds_util_reserve_array(void ***ptr, int *n, int *size, int new_size, int force, Lib3dsFreeFunc free_func); |
|---|
| 386 | extern void lib3ds_util_insert_array(void ***ptr, int *n, int *size, void *element, int index); |
|---|
| 387 | extern void lib3ds_util_remove_array(void ***ptr, int *n, int index, Lib3dsFreeFunc free_func); |
|---|
| 388 | |
|---|
| 389 | #ifdef __cplusplus |
|---|
| 390 | } |
|---|
| 391 | #endif |
|---|
| 392 | |
|---|
| 393 | #endif |
|---|
| 394 | |
|---|
| 395 | |
|---|