goat3dgfx

annotate src/datapath.cc @ 20:d9c8cd19c606

fixed the face index loading bug
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 08 Dec 2013 03:00:49 +0200
parents 1873dfd13f2d
children
rev   line source
nuclear@0 1 #include <stdio.h>
nuclear@0 2 #include <set>
nuclear@0 3 #include <string>
nuclear@0 4 #include "logger.h"
nuclear@0 5 #include "datapath.h"
nuclear@0 6
nuclear@15 7 using namespace goatgfx;
nuclear@15 8
nuclear@0 9 static std::set<std::string> paths;
nuclear@0 10
nuclear@15 11 namespace goatgfx {
nuclear@15 12
nuclear@0 13 void add_data_path(const char *path)
nuclear@0 14 {
nuclear@0 15 paths.insert(path);
nuclear@0 16 }
nuclear@0 17
nuclear@0 18 #ifndef TARGET_IPHONE
nuclear@0 19 std::string datafile_path(const char *fname)
nuclear@0 20 {
nuclear@0 21 std::string res;
nuclear@0 22 if(!fname) {
nuclear@0 23 return res;
nuclear@0 24 }
nuclear@0 25
nuclear@0 26 std::set<std::string>::const_iterator it = paths.begin();
nuclear@0 27 while(it != paths.end()) {
nuclear@0 28 const std::string &path = *it++;
nuclear@0 29 res = path + "/" + std::string(fname);
nuclear@0 30 FILE *fp = fopen(res.c_str(), "r");
nuclear@0 31 if(fp) {
nuclear@0 32 fclose(fp);
nuclear@0 33 return res;
nuclear@0 34 }
nuclear@0 35 }
nuclear@0 36
nuclear@0 37 // It's not found. Return the name itself just in case it's right here
nuclear@0 38 return std::string(fname);
nuclear@0 39 }
nuclear@0 40 #else
nuclear@0 41 #include <CoreFoundation/CoreFoundation.h>
nuclear@0 42
nuclear@0 43 std::string datafile_path(const char *fname)
nuclear@0 44 {
nuclear@0 45 std::string res;
nuclear@0 46 if(!fname) {
nuclear@0 47 return res;
nuclear@0 48 }
nuclear@0 49
nuclear@0 50 CFBundleRef bundle;
nuclear@0 51 CFURLRef url;
nuclear@0 52 CFStringRef cfname;
nuclear@0 53
nuclear@0 54 cfname = CFStringCreateWithCString(0, fname, kCFStringEncodingASCII);
nuclear@0 55
nuclear@0 56 bundle = CFBundleGetMainBundle();
nuclear@0 57 if(!(url = CFBundleCopyResourceURL(bundle, cfname, 0, 0))) {
nuclear@0 58 CFRelease(cfname);
nuclear@0 59 return fname;
nuclear@0 60 }
nuclear@0 61 CFRelease(cfname);
nuclear@0 62
nuclear@0 63 char path[1024];
nuclear@0 64 if(!CFURLGetFileSystemRepresentation(url, 1, (unsigned char*)path, sizeof path)) {
nuclear@0 65 CFRelease(url);
nuclear@0 66 return fname;
nuclear@0 67 }
nuclear@0 68 CFRelease(url);
nuclear@0 69 return std::string(path);
nuclear@0 70 }
nuclear@0 71 #endif
nuclear@15 72
nuclear@15 73 } // namespace goatgfx