diff --git a/src/init.cpp b/src/init.cpp index a37afee7f..a26f069c1 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -812,16 +812,19 @@ void generatePolyModels(int start, int end) if ( generateAll ) { polymodels = (polymodel_t*) malloc(sizeof(polymodel_t) * nummodels); - model_cache = openUserFile("models.cache", "rb"); - if (model_cache) { - for (size_t model_index = 0; model_index < nummodels; model_index++) { - polymodel_t *cur = &polymodels[model_index]; - fread(&cur->numfaces, sizeof(cur->numfaces), 1, model_cache); - cur->faces = (polytriangle_t *) calloc(sizeof(polytriangle_t), cur->numfaces); - fread(polymodels[model_index].faces, sizeof(polytriangle_t), cur->numfaces, model_cache); + if ( useModelCache ) + { + model_cache = openDataFile("models.cache", "rb"); + if (model_cache) { + for (size_t model_index = 0; model_index < nummodels; model_index++) { + polymodel_t *cur = &polymodels[model_index]; + fread(&cur->numfaces, sizeof(cur->numfaces), 1, model_cache); + cur->faces = (polytriangle_t *) calloc(sizeof(polytriangle_t), cur->numfaces); + fread(polymodels[model_index].faces, sizeof(polytriangle_t), cur->numfaces, model_cache); + } + fclose(model_cache); + return generateVBOs(start, end); } - fclose(model_cache); - return generateVBOs(start, end); } } @@ -1751,7 +1754,7 @@ void generatePolyModels(int start, int end) // free up quads for the next model list_FreeAll(&quads); } - if (generateAll && (model_cache = openUserFile("models.cache", "wb"))) { + if (generateAll && useModelCache && (model_cache = openDataFile("models.cache", "wb"))) { for (size_t model_index = 0; model_index < nummodels; model_index++) { polymodel_t *cur = &polymodels[model_index]; fwrite(&cur->numfaces, sizeof(cur->numfaces), 1, model_cache); diff --git a/src/interface/consolecommand.cpp b/src/interface/consolecommand.cpp index 556820cf0..8a21eea10 100644 --- a/src/interface/consolecommand.cpp +++ b/src/interface/consolecommand.cpp @@ -59,6 +59,14 @@ void consoleCommand(char* command_str) pingtime = SDL_GetTicks(); } } + else if ( !strncmp(command_str, "/usemodelcache", 14) ) + { + useModelCache = true; + } + else if ( !strncmp(command_str, "/disablemodelcache", 14) ) + { + useModelCache = false; + } else if (!strncmp(command_str, "/fov", 4)) { fov = atoi(&command_str[5]); diff --git a/src/interface/interface.cpp b/src/interface/interface.cpp index cc1e0ad00..4fdad6098 100644 --- a/src/interface/interface.cpp +++ b/src/interface/interface.cpp @@ -907,6 +907,10 @@ int saveConfig(char* filename) { fprintf(fp, "/splitscreen\n"); } + if ( useModelCache ) + { + fprintf(fp, "/usemodelcache\n"); + } fprintf(fp, "/gamepad_deadzone %d\n", gamepad_deadzone); fprintf(fp, "/gamepad_trigger_deadzone %d\n", gamepad_trigger_deadzone); fprintf(fp, "/gamepad_leftx_sensitivity %d\n", gamepad_leftx_sensitivity); diff --git a/src/main.cpp b/src/main.cpp index bf696ca75..e39eac3f7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -177,6 +177,7 @@ int* palette; // video definitions polymodel_t* polymodels = NULL; +bool useModelCache = false; list_t ttfTextHash[HASH_SIZE]; TTF_Font* ttf8 = NULL; TTF_Font* ttf12 = NULL; diff --git a/src/main.hpp b/src/main.hpp index 68e54cba0..017143bd7 100644 --- a/src/main.hpp +++ b/src/main.hpp @@ -520,6 +520,7 @@ extern SDL_Surface** sprites; extern SDL_Surface** tiles; extern voxel_t** models; extern polymodel_t* polymodels; +extern bool useModelCache; extern Uint32 imgref, vboref; extern GLuint* texid; extern bool disablevbos;