Removing .ms2 meshing from GLQuake
Moderator: InsideQC Admins
5 posts
• Page 1 of 1
Removing .ms2 meshing from GLQuake
1. Open gl_vidnt.c
2. Open gl_model.c
3. Open gl_mesh.c
Compile, delete c:\quake\id1\glquake folder. Start up newly compiled glquake and you'll notice it no longer builds the .ms2 files "meshing something.mdl ..." nor does it read them.
Find and comment out this:
- Code: Select all
// Baker: no longer need this
// sprintf (gldir, "%s/glquake", com_gamedir);
// Sys_mkdir (gldir);
Since the glquake dir where the .ms2 files used to be output will no longer be used.
2. Open gl_model.c
Find "GL_MakeAliasModelDisplayLists (mod, pheader);"
Delete the yellow text above ^^ so it reads like this:
- Code: Select all
GL_MakeAliasModelDisplayLists (pheader);
3. Open gl_mesh.c
Find this ...
- Code: Select all
/*
================
GL_MakeAliasModelDisplayLists
================
*/
void GL_MakeAliasModelDisplayLists (model_t *m, aliashdr_t *hdr)
{
int i, j;
maliasgroup_t *paliasgroup;
int *cmds;
trivertx_t *verts;
char cache[MAX_QPATH], fullpath[MAX_OSPATH], *c;
FILE *f;
int len;
byte *data;
aliasmodel = m;
paliashdr = hdr; // (aliashdr_t *)Mod_Extradata (m);
//
// look for a cached version
//
strcpy (cache, "glquake/");
COM_StripExtension (m->name+strlen("progs/"), cache+strlen("glquake/"));
strcat (cache, ".ms2");
COM_FOpenFile (cache, &f);
if (f)
{
fread (&numcommands, 4, 1, f);
fread (&numorder, 4, 1, f);
fread (&commands, numcommands * sizeof(commands[0]), 1, f);
fread (&vertexorder, numorder * sizeof(vertexorder[0]), 1, f);
fclose (f);
}
else
{
//
// build it from scratch
//
Con_Printf ("meshing %s...\n",m->name);
BuildTris (); // trifans or lists
//
// save out the cached version
//
sprintf (fullpath, "%s/%s", com_gamedir, cache);
f = fopen (fullpath, "wb");
if (f)
{
fwrite (&numcommands, 4, 1, f);
fwrite (&numorder, 4, 1, f);
fwrite (&commands, numcommands * sizeof(commands[0]), 1, f);
fwrite (&vertexorder, numorder * sizeof(vertexorder[0]), 1, f);
fclose (f);
}
}
// save the data out
paliashdr->poseverts = numorder;
cmds = Hunk_Alloc (numcommands * 4);
paliashdr->commands = (byte *)cmds - (byte *)paliashdr;
memcpy (cmds, commands, numcommands * 4);
verts = Hunk_Alloc (paliashdr->numposes * paliashdr->poseverts
* sizeof(trivertx_t) );
paliashdr->posedata = (byte *)verts - (byte *)paliashdr;
for (i=0 ; i<paliashdr->numposes ; i++)
for (j=0 ; j<numorder ; j++)
*verts++ = poseverts[i][vertexorder[j]];
}
Delete and replace with ...
- Code: Select all
void GL_MakeAliasModelDisplayLists (aliashdr_t *paliashdr) {
int i, j, *cmds;
trivertx_t *verts;
// Tonik: don't cache anything, because it seems just as fast
// (if not faster) to rebuild the tris instead of loading them from disk
BuildTris (); // trifans or lists
// save the data out
paliashdr->poseverts = numorder;
cmds = Hunk_Alloc (numcommands * 4);
paliashdr->commands = (byte *)cmds - (byte *)paliashdr;
memcpy (cmds, commands, numcommands * 4);
verts = Hunk_Alloc (paliashdr->numposes * paliashdr->poseverts * sizeof(trivertx_t));
paliashdr->posedata = (byte *)verts - (byte *)paliashdr;
for (i=0 ; i<paliashdr->numposes ; i++)
for (j=0 ; j<numorder ; j++)
*verts++ = poseverts[i][vertexorder[j]];
}
Compile, delete c:\quake\id1\glquake folder. Start up newly compiled glquake and you'll notice it no longer builds the .ms2 files "meshing something.mdl ..." nor does it read them.
-

Baker - Posts: 3666
- Joined: Tue Mar 14, 2006 5:15 am
WTF?!?!?!?!
First you write a tutorial without a single comment on what is done or why. And then when someone asks what the old code did, you dont even know?
So for those that wonder.
BuildTris() parses all the triangles in the model and builds tri strips and tri fans ( makes the rendering alot faster )
The purpose of the ms2 files was to save out these "commands" that tell the renderer how the tri fans and tri strips are built to avoid having to reparse the model the next time the game was played.
Now as mentioned by TONIK's code comment ( not Baker's ) on a modern computer the parsing is done so fast that caching it does'nt make any sense anymore. The reason the ms2 thrases models is if someone has made a mod with a custum model that has the same name as an original quake model. Because then it will load the .ms2 from the quake id1 dir that is for the original quake model, and use it with the custom model. So the commands for the tri strips and tri fans is'nt correct. This was never an issue if one didnt play mods that shared models with the same name as an original quake model.
After typing this I found out another thing.
Baker, next time you make a tutorial based on code you didnt write ( which I assume you havent given the fact the code has a comment by Tonik and the fact you dont even know what the code does or even mention why one should remove the mod part when calling the function ) please mention who wrote the code.
First you write a tutorial without a single comment on what is done or why. And then when someone asks what the old code did, you dont even know?
So for those that wonder.
BuildTris() parses all the triangles in the model and builds tri strips and tri fans ( makes the rendering alot faster )
The purpose of the ms2 files was to save out these "commands" that tell the renderer how the tri fans and tri strips are built to avoid having to reparse the model the next time the game was played.
Now as mentioned by TONIK's code comment ( not Baker's ) on a modern computer the parsing is done so fast that caching it does'nt make any sense anymore. The reason the ms2 thrases models is if someone has made a mod with a custum model that has the same name as an original quake model. Because then it will load the .ms2 from the quake id1 dir that is for the original quake model, and use it with the custom model. So the commands for the tri strips and tri fans is'nt correct. This was never an issue if one didnt play mods that shared models with the same name as an original quake model.
After typing this I found out another thing.
Baker, next time you make a tutorial based on code you didnt write ( which I assume you havent given the fact the code has a comment by Tonik and the fact you dont even know what the code does or even mention why one should remove the mod part when calling the function ) please mention who wrote the code.
- Tomaz
- Posts: 67
- Joined: Fri Nov 05, 2004 8:21 pm
5 posts
• Page 1 of 1
Return to Programming Tutorials
Who is online
Users browsing this forum: No registered users and 1 guest
