23 FILE *
f = (FILE*)
self;
42 return (fseek(f, offset, o));
48 FILE *
f = (FILE*)
self;
55 FILE *
f = (FILE*)
self;
56 return(fread(buffer, 1, size, f));
62 FILE *
f = (FILE*)
self;
63 return(fwrite(buffer, 1, size, f));
88 f = fopen(filename,
"rb");
98 memset(&io, 0,
sizeof(io));
134 f = fopen(filename,
"wb");
139 memset(&io, 0,
sizeof(io));
170 strcpy(file->
name,
"LIB3DS");
196 for (p = file->
nodes; p; p = q) {
217 for (p = file->
nodes; p != 0; p = p->
next) {
314 int have_lin =
FALSE;
322 for (i = 0; i < 3; ++
i) {
334 for (i = 0; i < 3; ++
i) {
390 for (i = 0; i < 3; ++
i) {
455 return *((
unsigned short*)a) - (*((
Lib3dsNode**)b))->node_id;
463 unsigned num_nodes = 0;
555 for (i = 0; i < num_nodes; ++
i) {
735 for (i = 0; i < 3; ++
i) {
751 for (i = 0; i < 3; ++
i) {
791 for (i = 0; i < file->
nlights; ++
i) {
804 for (i = 0; i < file->
nmeshes; ++
i) {
822 for (p = first_node; p !=
NULL; p = p->
next) {
827 node_id = *default_id;
1025 for (i = 0; i < file->
nlights; ++
i) {
1026 if (strcmp(file->
lights[i]->
name, name) == 0) {
1061 for (i = 0; i < file->
nmeshes; ++
i) {
1062 if (strcmp(file->
meshes[i]->
name, name) == 0) {
1104 for (p = file->
nodes; p != 0; p = p->
next) {
1105 if ((p->
type == type) && (strcmp(p->
name, name) == 0)) {
1134 for (p = file->
nodes; p != 0; p = p->
next) {
1182 while (p != before) {
1230 for (p = 0, n = file->
nodes; n; p = n, n = n->
next) {
1252 if (min_id && (*min_id > node->
node_id))
1254 if (max_id && (*max_id < node->node_id))
1284 include_meshes,
int include_cameras,
int include_lights,
1285 float bmin[3],
float bmax[3]) {
1286 bmin[0] = bmin[1] = bmin[2] = FLT_MAX;
1287 bmax[0] = bmax[1] = bmax[2] = -FLT_MAX;
1289 if (include_meshes) {
1290 float lmin[3], lmax[3];
1292 for (i = 0; i < file->
nmeshes; ++
i) {
1298 if (include_cameras) {
1307 if (include_lights) {
1323 int include_meshes,
int include_cameras,
int include_lights,
1324 float bmin[3],
float bmax[3],
float matrix[4][4]) {
1325 switch (node->
type) {
1327 if (include_meshes) {
1336 float inv_matrix[4][4], M[4][4];
1358 if (include_cameras) {
1372 if (include_lights) {
1395 int include_meshes,
int include_cameras,
int include_lights,
1396 float bmin[3],
float bmax[3],
float matrix[4][4]) {
1406 bmin[0] = bmin[1] = bmin[2] = FLT_MAX;
1407 bmax[0] = bmax[1] = bmax[2] = -FLT_MAX;
1420 for (i = 0; i < file->
nmeshes; ++
i) {
LIB3DSAPI int lib3ds_file_read(Lib3dsFile *file, Lib3dsIo *io)
void lib3ds_io_write_intw(Lib3dsIo *io, int16_t w)
LIB3DSAPI void lib3ds_vector_transform(float c[3], float m[4][4], float a[3])
static void file_minmax_node_id_impl(Lib3dsFile *file, Lib3dsNode *node, uint16_t *min_id, uint16_t *max_id)
LIB3DSAPI Lib3dsFile * lib3ds_file_new()
LIB3DSAPI Lib3dsMesh * lib3ds_file_mesh_for_node(Lib3dsFile *file, Lib3dsNode *node)
LIB3DSAPI void lib3ds_file_bounding_box_of_nodes(Lib3dsFile *file, int include_meshes, int include_cameras, int include_lights, float bmin[3], float bmax[3], float matrix[4][4])
LIB3DSAPI void lib3ds_material_free(Lib3dsMaterial *material)
LIB3DSAPI void lib3ds_file_insert_camera(Lib3dsFile *file, Lib3dsCamera *camera, int index)
else Out of place iCCP chunk
static void kfdata_write(Lib3dsFile *file, Lib3dsIo *io)
static void object_flags_write(uint32_t flags, Lib3dsIo *io)
static long fileio_seek_func(void *self, long offset, Lib3dsIoSeek origin)
void lib3ds_io_write_intd(Lib3dsIo *io, int32_t d)
void lib3ds_background_write(Lib3dsBackground *background, Lib3dsIo *io)
int32_t lib3ds_io_read_intd(Lib3dsIo *io)
GLint GLenum GLsizei GLsizei GLsizei GLint GLenum GLenum type
const GLubyte GLuint GLuint GLuint GLuint alpha GLboolean GLboolean GLboolean GLboolean alpha GLint GLint GLsizei GLsizei GLenum type GLenum GLint GLenum GLint GLint GLsizei GLsizei GLint border GLenum GLint GLint GLint GLint GLint GLsizei GLsizei height GLsizei GLsizei GLenum GLenum const GLvoid *pixels GLenum GLint GLint GLint GLint j2 GLdouble GLdouble GLdouble GLdouble GLdouble GLdouble zFar GLenum light
LIB3DSAPI void lib3ds_file_reserve_meshes(Lib3dsFile *file, int size, int force)
LIB3DSAPI int lib3ds_file_write(Lib3dsFile *file, Lib3dsIo *io)
LIB3DSAPI void lib3ds_file_reserve_cameras(Lib3dsFile *file, int size, int force)
void lib3ds_viewport_write(Lib3dsViewport *viewport, Lib3dsIo *io)
float construction_plane[3]
LIB3DSAPI void lib3ds_file_reserve_materials(Lib3dsFile *file, int size, int force)
void lib3ds_camera_read(Lib3dsCamera *camera, Lib3dsIo *io)
void lib3ds_light_read(Lib3dsLight *light, Lib3dsIo *io)
void lib3ds_viewport_read(Lib3dsViewport *viewport, Lib3dsIo *io)
void lib3ds_node_read(Lib3dsNode *node, Lib3dsIo *io)
LIB3DSAPI Lib3dsCamera * lib3ds_camera_new(const char *name)
static void nodes_write(Lib3dsNode *first_node, uint16_t *default_id, uint16_t parent_id, Lib3dsIo *io)
LIB3DSAPI Lib3dsMaterial * lib3ds_material_new(const char *name)
GLboolean GLboolean GLboolean GLboolean a
Lib3dsBackground background
void lib3ds_chunk_unknown(uint16_t chunk, Lib3dsIo *io)
EGLImageKHR EGLint * name
LIB3DSAPI int lib3ds_file_mesh_by_name(Lib3dsFile *file, const char *name)
void lib3ds_atmosphere_read(Lib3dsAtmosphere *atmosphere, Lib3dsIo *io)
static void colorf_write(float rgb[3], Lib3dsIo *io)
LIB3DSAPI void lib3ds_matrix_identity(float m[4][4])
LIB3DSAPI void lib3ds_file_append_node(Lib3dsFile *file, Lib3dsNode *node, Lib3dsNode *parent)
uint32_t lib3ds_io_read_dword(Lib3dsIo *io)
LIB3DSAPI void lib3ds_file_remove_camera(Lib3dsFile *file, int index)
LIB3DSAPI void lib3ds_file_remove_light(Lib3dsFile *file, int index)
void lib3ds_shadow_read(Lib3dsShadow *shadow, Lib3dsIo *io)
LIB3DSAPI void lib3ds_node_eval(Lib3dsNode *node, float t)
LIB3DSAPI void lib3ds_matrix_mult(float m[4][4], float a[4][4], float b[4][4])
uint16_t lib3ds_chunk_read_next(Lib3dsChunk *c, Lib3dsIo *io)
LIB3DSAPI void lib3ds_file_eval(Lib3dsFile *file, float t)
LIB3DSAPI void lib3ds_file_free(Lib3dsFile *file)
void lib3ds_mesh_write(Lib3dsFile *file, Lib3dsMesh *mesh, Lib3dsIo *io)
LIB3DSAPI void lib3ds_vector_max(float c[3], float a[3])
void lib3ds_io_setup(Lib3dsIo *io)
LIB3DSAPI void lib3ds_file_reserve_lights(Lib3dsFile *file, int size, int force)
void lib3ds_io_write_string(Lib3dsIo *io, const char *s)
LIB3DSAPI int lib3ds_file_camera_by_name(Lib3dsFile *file, const char *name)
void lib3ds_material_write(Lib3dsMaterial *material, Lib3dsIo *io)
void lib3ds_chunk_write_start(Lib3dsChunk *c, Lib3dsIo *io)
static void kfdata_read(Lib3dsFile *file, Lib3dsIo *io)
EGLContext EGLenum EGLClientBuffer buffer
void lib3ds_io_write_vector(Lib3dsIo *io, float v[3])
LIB3DSAPI void lib3ds_file_insert_mesh(Lib3dsFile *file, Lib3dsMesh *mesh, int index)
static void ambient_read(Lib3dsFile *file, Lib3dsIo *io)
LIB3DSAPI void lib3ds_camera_free(Lib3dsCamera *mesh)
LIB3DSAPI void lib3ds_vector_min(float c[3], float a[3])
void lib3ds_io_write_float(Lib3dsIo *io, float l)
LIB3DSAPI Lib3dsNode * lib3ds_node_new(Lib3dsNodeType type)
static void named_object_read(Lib3dsFile *file, Lib3dsIo *io)
LIB3DSAPI void lib3ds_light_free(Lib3dsLight *mesh)
LIB3DSAPI int lib3ds_file_light_by_name(Lib3dsFile *file, const char *name)
LIB3DSAPI Lib3dsLight * lib3ds_light_new(const char *name)
static void mdata_read(Lib3dsFile *file, Lib3dsIo *io)
LIB3DSAPI void lib3ds_file_bounding_box_of_objects(Lib3dsFile *file, int include_meshes, int include_cameras, int include_lights, float bmin[3], float bmax[3])
void lib3ds_node_write(Lib3dsNode *node, uint16_t node_id, uint16_t parent_id, Lib3dsIo *io)
void lib3ds_chunk_read_reset(Lib3dsChunk *c, Lib3dsIo *io)
LIB3DSAPI int lib3ds_file_save(Lib3dsFile *file, const char *filename)
void lib3ds_light_write(Lib3dsLight *light, Lib3dsIo *io)
LIB3DSAPI void lib3ds_mesh_free(Lib3dsMesh *mesh)
Lib3dsViewport viewport_keyf
LIB3DSAPI void lib3ds_vector_zero(float c[3])
void(* Lib3dsFreeFunc)(void *ptr)
LIB3DSAPI void lib3ds_file_remove_node(Lib3dsFile *file, Lib3dsNode *node)
long(* seek_func)(void *self, long offset, Lib3dsIoSeek origin)
Lib3dsAtmosphere atmosphere
LIB3DSAPI void lib3ds_file_remove_mesh(Lib3dsFile *file, int index)
LIB3DSAPI Lib3dsMesh * lib3ds_mesh_new(const char *name)
LIB3DSAPI int lib3ds_file_material_by_name(Lib3dsFile *file, const char *name)
LIB3DSAPI void lib3ds_node_free(Lib3dsNode *node)
uint16_t lib3ds_io_read_word(Lib3dsIo *io)
LIB3DSAPI void lib3ds_file_remove_material(Lib3dsFile *file, int index)
void lib3ds_material_read(Lib3dsMaterial *material, Lib3dsIo *io)
float lib3ds_io_read_float(Lib3dsIo *io)
LIB3DSAPI void lib3ds_file_insert_node(Lib3dsFile *file, Lib3dsNode *node, Lib3dsNode *at)
long(* tell_func)(void *self)
void lib3ds_chunk_read_end(Lib3dsChunk *c, Lib3dsIo *io)
void lib3ds_io_cleanup(Lib3dsIo *io)
void lib3ds_chunk_read_tell(Lib3dsChunk *c, Lib3dsIo *io)
LIB3DSAPI void lib3ds_file_minmax_node_id(Lib3dsFile *file, unsigned short *min_id, unsigned short *max_id)
void(* log_func)(void *self, Lib3dsLogLevel level, int indent, const char *msg)
LIB3DSAPI void lib3ds_mesh_bounding_box(Lib3dsMesh *mesh, float bmin[3], float bmax[3])
size_t(* write_func)(void *self, const void *buffer, size_t size)
LIB3DSAPI Lib3dsNode * lib3ds_file_node_by_id(Lib3dsFile *file, unsigned short node_id)
LIB3DSAPI void lib3ds_matrix_translate(float m[4][4], float x, float y, float z)
struct Lib3dsNode * childs
void lib3ds_io_read_string(Lib3dsIo *io, char *s, int buflen)
void lib3ds_util_reserve_array(void ***ptr, int *n, int *size, int new_size, int force, Lib3dsFreeFunc free_func)
GLenum GLsizei GLsizei GLsizei GLsizei GLbitfield flags
LIB3DSAPI void lib3ds_file_insert_light(Lib3dsFile *file, Lib3dsLight *light, int index)
void lib3ds_util_remove_array(void ***ptr, int *n, int index, Lib3dsFreeFunc free_func)
void lib3ds_util_insert_array(void ***ptr, int *n, int *size, void *element, int index)
GLdouble GLdouble GLdouble GLdouble q
static void file_bounding_box_of_nodes_impl(Lib3dsNode *node, Lib3dsFile *file, int include_meshes, int include_cameras, int include_lights, float bmin[3], float bmax[3], float matrix[4][4])
static long fileio_tell_func(void *self)
void lib3ds_io_log(Lib3dsIo *io, Lib3dsLogLevel level, const char *format,...)
void lib3ds_chunk_write(Lib3dsChunk *c, Lib3dsIo *io)
static size_t fileio_read_func(void *self, void *buffer, size_t size)
void lib3ds_shadow_write(Lib3dsShadow *shadow, Lib3dsIo *io)
void lib3ds_chunk_read_start(Lib3dsChunk *c, uint16_t chunk, Lib3dsIo *io)
size_t(* read_func)(void *self, void *buffer, size_t size)
GLdouble GLdouble GLdouble b
GLint GLint GLint GLint z
LIB3DSAPI int lib3ds_matrix_inv(float m[4][4])
void lib3ds_background_read(Lib3dsBackground *background, Lib3dsIo *io)
LIB3DSAPI Lib3dsNode * lib3ds_node_by_name(Lib3dsNode *node, const char *name, Lib3dsNodeType type)
LIB3DSAPI Lib3dsFile * lib3ds_file_open(const char *filename)
LIB3DSAPI Lib3dsNode * lib3ds_node_by_id(Lib3dsNode *node, unsigned short node_id)
static int compare_node_id2(const void *a, const void *b)
struct Lib3dsNode * parent
void lib3ds_io_write_dword(Lib3dsIo *io, uint32_t d)
void lib3ds_camera_write(Lib3dsCamera *camera, Lib3dsIo *io)
LIB3DSAPI Lib3dsNode * lib3ds_file_node_by_name(Lib3dsFile *file, const char *name, Lib3dsNodeType type)
static int compare_node_id(const void *a, const void *b)
void lib3ds_mesh_read(Lib3dsFile *file, Lib3dsMesh *mesh, Lib3dsIo *io)
LIB3DSAPI void lib3ds_file_insert_material(Lib3dsFile *file, Lib3dsMaterial *material, int index)
void lib3ds_io_write_rgb(Lib3dsIo *io, float rgb[3])
void lib3ds_chunk_write_end(Lib3dsChunk *c, Lib3dsIo *io)
Lib3dsMaterial ** materials
LIB3DSAPI void lib3ds_file_create_nodes_for_meshes(Lib3dsFile *file)
void lib3ds_atmosphere_write(Lib3dsAtmosphere *atmosphere, Lib3dsIo *io)
static size_t fileio_write_func(void *self, const void *buffer, size_t size)
LIB3DSAPI void lib3ds_matrix_copy(float dest[4][4], float src[4][4])
static void mdata_write(Lib3dsFile *file, Lib3dsIo *io)
void qsort(void *base, size_t nmemb, size_t size, int(*compare)(const void *, const void *))