use SDL_RWops to read obj models
This commit is contained in:
parent
4b132656a5
commit
d39ab84742
3 changed files with 26 additions and 3 deletions
|
@ -100,7 +100,12 @@ static void free_obj(ObjFileData *data) {
|
|||
}
|
||||
|
||||
static void parse_obj(const char *filename, ObjFileData *data) {
|
||||
FILE *fp = fopen(filename, "rb");
|
||||
SDL_RWops *rw = SDL_RWFromFile(filename, "r");
|
||||
|
||||
if(!rw) {
|
||||
warnx("%s(): SDL_RWFromFile() failed: %s", __func__, SDL_GetError());
|
||||
return;
|
||||
}
|
||||
|
||||
char line[256];
|
||||
Vector buf;
|
||||
|
@ -109,7 +114,7 @@ static void parse_obj(const char *filename, ObjFileData *data) {
|
|||
|
||||
memset(data, 0, sizeof(ObjFileData));
|
||||
|
||||
while(fgets(line, sizeof(line), fp)) {
|
||||
while(SDL_RWgets(rw, line, sizeof(line))) {
|
||||
linen++;
|
||||
|
||||
char *first;
|
||||
|
@ -192,7 +197,7 @@ static void parse_obj(const char *filename, ObjFileData *data) {
|
|||
}
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
SDL_RWclose(rw);
|
||||
}
|
||||
|
||||
Model* get_model(const char *name) {
|
||||
|
|
16
src/util.c
16
src/util.c
|
@ -370,6 +370,22 @@ void png_init_rwops(png_structp png, SDL_RWops *rwops) {
|
|||
png_set_read_fn(png, rwops, png_rwops_read_data);
|
||||
}
|
||||
|
||||
char* SDL_RWgets(SDL_RWops *rwops, char *buf, size_t bufsize) {
|
||||
char c, *ptr = buf, *end = buf + bufsize - 1;
|
||||
assert(end > ptr);
|
||||
|
||||
while((c = SDL_ReadU8(rwops)) && ptr <= end) {
|
||||
if((*ptr++ = c) == '\n')
|
||||
break;
|
||||
}
|
||||
|
||||
if(ptr == buf)
|
||||
return NULL;
|
||||
|
||||
*ptr = 0;
|
||||
return buf;
|
||||
}
|
||||
|
||||
//
|
||||
// misc utils
|
||||
//
|
||||
|
|
|
@ -99,6 +99,8 @@ Hashtable* parse_keyvalue_stream(SDL_RWops *strm, size_t tablesize);
|
|||
Hashtable* parse_keyvalue_file(const char *filename, size_t tablesize);
|
||||
void png_init_rwops(png_structp png, SDL_RWops *rwops);
|
||||
|
||||
char* SDL_RWgets(SDL_RWops *rwops, char *buf, size_t bufsize);
|
||||
|
||||
//
|
||||
// misc utils
|
||||
//
|
||||
|
|
Loading…
Reference in a new issue