r693 - in trunk: . game

lordhavoc at icculus.org lordhavoc at icculus.org
Sat Apr 8 17:12:01 EDT 2006


Author: lordhavoc
Date: 2006-04-08 17:12:01 -0400 (Sat, 08 Apr 2006)
New Revision: 693

Modified:
   trunk/game/g_entity.c
   trunk/game/g_render.c
   trunk/game/g_world.c
   trunk/model.c
   trunk/model.h
   trunk/modelanim.c
   trunk/modelanim.h
   trunk/r_main.c
   trunk/util.c
Log:
reworking model structure in preparation for changes in skeletal
animation method


Modified: trunk/game/g_entity.c
===================================================================
--- trunk/game/g_entity.c	2006-04-08 21:09:02 UTC (rev 692)
+++ trunk/game/g_entity.c	2006-04-08 21:12:01 UTC (rev 693)
@@ -205,7 +205,7 @@
 	entity->modelindex = modelindex;
 	model = Resource_GetData(entity->modelindex);
 	if (model)
-		for (meshindex = 0;meshindex < model->nummeshes;meshindex++)
+		for (meshindex = 0;meshindex < model->num_meshes;meshindex++)
 			G_Entity_AddSurface(entity, meshindex);
 }
 

Modified: trunk/game/g_render.c
===================================================================
--- trunk/game/g_render.c	2006-04-08 21:09:02 UTC (rev 692)
+++ trunk/game/g_render.c	2006-04-08 21:12:01 UTC (rev 693)
@@ -33,7 +33,7 @@
 		}
 		if (!model)
 			continue;
-		R_DrawMesh(model->meshes[surface->meshindex].resource_material, surface->meshindex, entity->transforms);
+		R_DrawMesh(model->data_meshes[surface->meshindex].resource_material, surface->meshindex, entity->transforms);
 	}
 }
 
@@ -66,7 +66,7 @@
 			currententity = entity;
 			R_SetEntity(&entity->position.m, entity->cullradius, entity->modelindex);
 		}
-		mesh = model->meshes + surface->meshindex;
+		mesh = model->data_meshes + surface->meshindex;
 		material = Resource_GetData(mesh->resource_material);
 		if (Resource_GetData(material->texture_background))
 		{

Modified: trunk/game/g_world.c
===================================================================
--- trunk/game/g_world.c	2006-04-08 21:09:02 UTC (rev 692)
+++ trunk/game/g_world.c	2006-04-08 21:12:01 UTC (rev 693)
@@ -607,8 +607,8 @@
 			{
 				if (!SpheresOverlap(movecenter, moveradius, surface->cullorigin, surface->cullradius) || !BoxesOverlap(movemins, movemaxs, surface->cullmins, surface->cullmaxs))
 					continue;
-				mesh = model->meshes + surface->meshindex;
-				Collision_Trace_CheckBrushes(&collisiontrace, mesh->numcollisionbrushes, mesh->collisionbrushes, mesh->collisionbrushes);
+				mesh = model->data_meshes + surface->meshindex;
+				Collision_Trace_CheckBrushes(&collisiontrace, mesh->num_collisionbrushes, mesh->data_collisionbrushes, mesh->data_collisionbrushes);
 			}
 		}
 		Collision_Trace_End(&collisiontrace);

Modified: trunk/model.c
===================================================================
--- trunk/model.c	2006-04-08 21:09:02 UTC (rev 692)
+++ trunk/model.c	2006-04-08 21:12:01 UTC (rev 693)
@@ -275,27 +275,26 @@
 		//numJoints 3
 		else if (Util_ParseC_MatchKeyword(&thread, "numJoints"))
 		{
-			LoadInt(model->numtransforms, "after 'numJoints'");
-			if (model->numtransforms < 1)
+			LoadInt(model->num_transforms, "after 'numJoints'");
+			if (model->num_transforms < 1)
 			{
-				Console_Printf("Model_Load: numJoints %i < 1\n", model->numtransforms);
+				Console_Printf("Model_Load: numJoints %i < 1\n", model->num_transforms);
 				Abort();
 			}
-			model->transformnames = Mem_Alloc(r->memzone, model->numtransforms * sizeof(*model->transformnames));
-			model->transformradius = Mem_Alloc(r->memzone, model->numtransforms * sizeof(*model->transformradius));
-			model->basetransforms = Mem_Alloc(r->memzone, model->numtransforms * sizeof(*model->basetransforms));
-			model->baseinversetransforms = Mem_Alloc(r->memzone, model->numtransforms * sizeof(*model->baseinversetransforms));
+			model->max_transforms = model->num_transforms;
+			model->data_transforminfo = Mem_Alloc(r->memzone, model->max_transforms * sizeof(*model->data_transforminfo));
 		}
 		//numMeshes 1
 		else if (Util_ParseC_MatchKeyword(&thread, "numMeshes"))
 		{
-			LoadInt(model->nummeshes, "after 'numMeshes'");
-			if (model->nummeshes < 1)
+			LoadInt(model->num_meshes, "after 'numMeshes'");
+			if (model->num_meshes < 1)
 			{
-				Console_Printf("Model_Load: numMeshes %i < 1\n", model->nummeshes);
+				Console_Printf("Model_Load: numMeshes %i < 1\n", model->num_meshes);
 				Abort();
 			}
-			model->meshes = Mem_Alloc(r->memzone, model->nummeshes * sizeof(Model_Mesh));
+			model->max_meshes = model->num_meshes;
+			model->data_meshes = Mem_Alloc(r->memzone, model->max_meshes * sizeof(Model_Mesh));
 		}
 		//joints {
 		//	"root"	-1 ( 0.000000 0.000000 0.000000 ) ( -0.707107 -0.000000 -0.000000 )	//
@@ -309,31 +308,30 @@
 			for (jointnum = 0; !Util_ParseC_MatchKeyword(&thread, "}");jointnum++)
 			{
 				NSint32 parent;
-				double joint6[6];
 				//	"root"	-1 ( 0.000000 0.000000 0.000000 ) ( -0.707107 -0.000000 -0.000000 )
-				LoadString(model->transformnames[jointnum], "for joint name");
+				LoadString(model->data_transforminfo[jointnum].name, "for joint name");
 				LoadInt(parent, "as parent");
 				ExpectKeyword("(", "before first joint data list");
-				LoadValue(joint6[0], "(joint 0)");
-				LoadValue(joint6[1], "(joint 1)");
-				LoadValue(joint6[2], "(joint 2)");
+				LoadValue(model->data_transforminfo[jointnum].basepose[0], "(joint 0)");
+				LoadValue(model->data_transforminfo[jointnum].basepose[1], "(joint 1)");
+				LoadValue(model->data_transforminfo[jointnum].basepose[2], "(joint 2)");
 				ExpectKeyword(")", "after first joint data list");
 				ExpectKeyword("(", "before second joint data list");
-				LoadValue(joint6[3], "(joint 3)");
-				LoadValue(joint6[4], "(joint 4)");
-				LoadValue(joint6[5], "(joint 5)");
+				LoadValue(model->data_transforminfo[jointnum].basepose[3], "(joint 3)");
+				LoadValue(model->data_transforminfo[jointnum].basepose[4], "(joint 4)");
+				LoadValue(model->data_transforminfo[jointnum].basepose[5], "(joint 5)");
 				ExpectKeyword(")", "after second joint data list");
-				Matrix4x4_CreateFromDoom3Joint(&model->basetransforms[jointnum], joint6[0], joint6[1], joint6[2], joint6[3], joint6[4], joint6[5]);
-				Matrix4x4_Invert_Simple(&model->baseinversetransforms[jointnum], &model->basetransforms[jointnum]);
+				Matrix4x4_CreateFromDoom3Joint(&model->data_transforminfo[jointnum].basematrix, model->data_transforminfo[jointnum].basepose[0], model->data_transforminfo[jointnum].basepose[1], model->data_transforminfo[jointnum].basepose[2], model->data_transforminfo[jointnum].basepose[3], model->data_transforminfo[jointnum].basepose[4], model->data_transforminfo[jointnum].basepose[5]);
+				Matrix4x4_Invert_Simple(&model->data_transforminfo[jointnum].baseinversematrix, &model->data_transforminfo[jointnum].basematrix);
 				if (parent >= (NSint32)jointnum)
 				{
 					Console_Printf("Model_Load: joint.parent (%i) >= joint (%i)\n", parent, jointnum);
 					Abort();
 				}
 			}
-			if (jointnum != model->numtransforms)
+			if (jointnum != model->num_transforms)
 			{
-				Console_Printf("Model_Load: final jointnum (%i) != numJoints (%i)\n", jointnum, model->numtransforms);
+				Console_Printf("Model_Load: final jointnum (%i) != numJoints (%i)\n", jointnum, model->num_transforms);
 				Abort();
 			}
 		}
@@ -349,37 +347,40 @@
 			matrix4x4_t *matrix;
 
 			ExpectKeyword("{", "after 'mesh'");
-			if (meshnum >= model->nummeshes)
+			if (meshnum >= model->num_meshes)
 			{
-				Console_Printf("Model_Load: meshnum (%i) >= nummeshes (%i)\n", meshnum, model->nummeshes);
+				Console_Printf("Model_Load: meshnum (%i) >= nummeshes (%i)\n", meshnum, model->num_meshes);
 				Abort();
 			}
-			mesh = model->meshes + meshnum;
+			mesh = model->data_meshes + meshnum;
 			for (;;)
 			{
 				//	// meshes: v_pitch
 				//	shader "models/weapons/v_pitch"
 				if (Util_ParseC_MatchKeyword(&thread, "shader"))
 				{
-					char *shader = NULL;
-					LoadString(shader, "(shader name after 'shader')");
-					mesh->resource_material = Resource_IndexForName(shader, RESOURCETYPE_MATERIAL, 0, 0);
+					LoadString(mesh->materialname, "(shader name after 'shader')");
+					mesh->resource_material = Resource_IndexForName(mesh->materialname, RESOURCETYPE_MATERIAL, 0, 0);
 				}
 				//	numverts 292
 				else if (Util_ParseC_MatchKeyword(&thread, "numverts"))
 				{
-					LoadInt(mesh->numvertices, "after 'numverts'");
-					if (mesh->numvertices < 3)
+					LoadInt(mesh->num_vertices, "after 'numverts'");
+					if (mesh->num_vertices < 3)
 					{
-						Console_Printf("Model_Load: numverts (%i) < 3\n", mesh->numvertices);
+						Console_Printf("Model_Load: numverts (%i) < 3\n", mesh->num_vertices);
 						Abort();
 					}
-					mesh->vertex3f = Mem_Alloc(r->memzone, mesh->numvertices * sizeof(float[3]));
-					mesh->svector3f = Mem_Alloc(r->memzone, mesh->numvertices * sizeof(float[3]));
-					mesh->tvector3f = Mem_Alloc(r->memzone, mesh->numvertices * sizeof(float[3]));
-					mesh->normal3f = Mem_Alloc(r->memzone, mesh->numvertices * sizeof(float[3]));
-					mesh->texcoord2f = Mem_Alloc(r->memzone, mesh->numvertices * sizeof(float[2]));
-					md5weightrange = Mem_Alloc(Global_Zone, mesh->numvertices * sizeof(int[2]));
+					mesh->max_vertices = mesh->num_vertices;
+					mesh->data_vertex3f = Mem_Alloc(r->memzone, mesh->max_vertices * sizeof(float[3]));
+					mesh->data_svector3f = Mem_Alloc(r->memzone, mesh->max_vertices * sizeof(float[3]));
+					mesh->data_tvector3f = Mem_Alloc(r->memzone, mesh->max_vertices * sizeof(float[3]));
+					mesh->data_normal3f = Mem_Alloc(r->memzone, mesh->max_vertices * sizeof(float[3]));
+					mesh->data_texcoord2f = Mem_Alloc(r->memzone, mesh->max_vertices * sizeof(float[2]));
+					mesh->data_lightmaptexcoord2f = Mem_Alloc(r->memzone, mesh->max_vertices * sizeof(float[2]));
+					mesh->data_weightindex4i = Mem_Alloc(r->memzone, mesh->max_vertices * sizeof(NUint32[4]));
+					mesh->data_weightvalue4f = Mem_Alloc(r->memzone, mesh->max_vertices * sizeof(float[4]));
+					md5weightrange = Mem_Alloc(Global_Zone, mesh->max_vertices * sizeof(NUint32[2]));
 				}
 				//	vert 0 ( 0.142532 0.983877 ) 0 1
 				//	vert 1 ( 0.155314 0.987100 ) 1 1
@@ -389,17 +390,17 @@
 					NUint32 vertexnum;
 					// 0
 					LoadInt(vertexnum, "after 'vert'");
-					if (vertexnum >= mesh->numvertices)
+					if (vertexnum >= mesh->num_vertices)
 					{
-						Console_Printf("Model_Load: vert (%i) >= numverts (%i)\n", vertexnum, mesh->numvertices);
+						Console_Printf("Model_Load: vert (%i) >= numverts (%i)\n", vertexnum, mesh->num_vertices);
 						Abort();
 					}
 					// (
 					ExpectKeyword("(", "before texture coords");
 					// 0.142532
-					LoadValue(mesh->texcoord2f[vertexnum*2+0], "(first texcoord)");
+					LoadValue(mesh->data_texcoord2f[vertexnum*2+0], "(first texcoord)");
 					// 0.983877
-					LoadValue(mesh->texcoord2f[vertexnum*2+1], "(second texcoord)");
+					LoadValue(mesh->data_texcoord2f[vertexnum*2+1], "(second texcoord)");
 					// )
 					ExpectKeyword(")", "after texture coords");
 					// 0
@@ -411,15 +412,16 @@
 				//	numtris 274
 				else if (Util_ParseC_MatchKeyword(&thread, "numtris"))
 				{
-					LoadInt(mesh->numtriangles, "after 'numtris'");
-					if (mesh->numtriangles < 1)
+					LoadInt(mesh->num_triangles, "after 'numtris'");
+					if (mesh->num_triangles < 1)
 					{
-						Console_Printf("Model_Load: numtris (%i) < 1\n", mesh->numtriangles);
+						Console_Printf("Model_Load: numtris (%i) < 1\n", mesh->num_triangles);
 						Abort();
 					}
-					mesh->element3i = Mem_Alloc(r->memzone, mesh->numtriangles * sizeof(int[3]));
-					mesh->neighbor3i = Mem_Alloc(r->memzone, mesh->numtriangles * sizeof(int[3]));
-					mesh->plane4f = Mem_Alloc(r->memzone, mesh->numtriangles * sizeof(float[4]));
+					mesh->max_triangles = mesh->num_triangles;
+					mesh->data_element3i = Mem_Alloc(r->memzone, mesh->max_triangles * sizeof(NUint32[3]));
+					mesh->data_neighbor3i = Mem_Alloc(r->memzone, mesh->max_triangles * sizeof(NSint32[3]));
+					mesh->data_plane4f = Mem_Alloc(r->memzone, mesh->max_triangles * sizeof(float[4]));
 				}
 				//	tri 0 29 30 31
 				//	tri 1 32 29 76
@@ -428,17 +430,17 @@
 				{
 					NUint32 trianglenum;
 					LoadInt(trianglenum, "after 'tri'");
-					if (trianglenum >= mesh->numtriangles)
+					if (trianglenum >= mesh->num_triangles)
 					{
-						Console_Printf("Model_Load: tri (%i) >= numtris (%i)\n", trianglenum, mesh->numtriangles);
+						Console_Printf("Model_Load: tri (%i) >= numtris (%i)\n", trianglenum, mesh->num_triangles);
 						Abort();
 					}
 					// TODO: boundscheck elements
 					// note: this converts the clockwise triangles in the
 					// md5mesh file to counterclockwise for OpenGL
-					LoadInt(mesh->element3i[trianglenum*3+2], "(first index)");
-					LoadInt(mesh->element3i[trianglenum*3+1], "(second index)");
-					LoadInt(mesh->element3i[trianglenum*3+0], "(third index)");
+					LoadInt(mesh->data_element3i[trianglenum*3+2], "(first index)");
+					LoadInt(mesh->data_element3i[trianglenum*3+1], "(second index)");
+					LoadInt(mesh->data_element3i[trianglenum*3+0], "(third index)");
 				}
 				//	numweights 145
 				else if (Util_ParseC_MatchKeyword(&thread, "numweights"))
@@ -468,9 +470,9 @@
 					md5weight = md5weights + weightnum;
 					// 2
 					LoadInt(md5weight->jointnum, "(weight jointnum)");
-					if (md5weight->jointnum >= model->numtransforms)
+					if (md5weight->jointnum >= model->num_transforms)
 					{
-						Console_Printf("Model_Load: joint (%i) >= numtransforms (%i)\n", md5weight->jointnum, model->numtransforms);
+						Console_Printf("Model_Load: joint (%i) >= num_transforms (%i)\n", md5weight->jointnum, model->num_transforms);
 						Abort();
 					}
 					// 1.000000
@@ -495,65 +497,66 @@
 					break;
 				}
 			}
-			memset(mesh->vertex3f, 0, mesh->numvertices * sizeof(float[3]));
-			mesh->numweights = 0;
-			for (i = 0;i < mesh->numvertices;i++)
+			memset(mesh->data_vertex3f, 0, mesh->num_vertices * sizeof(float[3]));
+			mesh->num_weights = 0;
+			for (i = 0;i < mesh->num_vertices;i++)
 			{
 				Ndouble sum = 0;
 				for (j = 0, md5weight = md5weights + md5weightrange[i*2+0];j < md5weightrange[i*2+1];j++, md5weight++)
 				{
-					matrix = model->basetransforms + md5weight->jointnum;
-					mesh->vertex3f[i*3+0] += DotProduct4(md5weight->vertex, matrix->m[0]);
-					mesh->vertex3f[i*3+1] += DotProduct4(md5weight->vertex, matrix->m[1]);
-					mesh->vertex3f[i*3+2] += DotProduct4(md5weight->vertex, matrix->m[2]);
+					matrix = &model->data_transforminfo[md5weight->jointnum].basematrix;
+					mesh->data_vertex3f[i*3+0] += DotProduct4(md5weight->vertex, matrix->m[0]);
+					mesh->data_vertex3f[i*3+1] += DotProduct4(md5weight->vertex, matrix->m[1]);
+					mesh->data_vertex3f[i*3+2] += DotProduct4(md5weight->vertex, matrix->m[2]);
 					sum += md5weight->vertex[3];
-					mesh->numweights++;
+					mesh->num_weights++;
 				}
 				if (fabs(sum - 1) > 0.001)
 					Console_Printf("vertex #%i (weights %i-%i) does not sum to 1! (sum = %f)\n", i, md5weightrange[i*2+0], md5weightrange[i*2+0]+md5weightrange[i*2+1], sum);
 			}
 			// compile the base frame of the mesh for static uses
-			Model_MeshVectors(mesh->numtriangles, mesh->element3i, mesh->numvertices, mesh->vertex3f, mesh->texcoord2f, mesh->svector3f, mesh->tvector3f, mesh->normal3f);
-			Model_MeshNeighbors(mesh->numtriangles, mesh->element3i, mesh->neighbor3i, mesh->numvertices);
-			Model_BuildTrianglePlanes(mesh->vertex3f, mesh->numtriangles, mesh->element3i, mesh->plane4f);
+			Model_MeshVectors(mesh->num_triangles, mesh->data_element3i, mesh->num_vertices, mesh->data_vertex3f, mesh->data_texcoord2f, mesh->data_svector3f, mesh->data_tvector3f, mesh->data_normal3f);
+			Model_MeshNeighbors(mesh->num_triangles, mesh->data_element3i, mesh->data_neighbor3i, mesh->num_vertices);
+			Model_BuildTrianglePlanes(mesh->data_vertex3f, mesh->num_triangles, mesh->data_element3i, mesh->data_plane4f);
 			// collision brushes are for the static frame
 			// TODO: load separate collision brush file for faster collisions?
-			mesh->numcollisionbrushes = mesh->numtriangles;
-			mesh->collisionbrushes = Collision_Brush_AllocBrushesForTriangleMesh(r->memzone, mesh->numtriangles);
-			Collision_Brush_UpdateTriangleMeshBrushes(mesh->collisionbrushes, mesh->numtriangles, mesh->element3i, mesh->vertex3f);
+			mesh->num_collisionbrushes = mesh->num_triangles;
+			mesh->max_collisionbrushes = mesh->num_collisionbrushes;
+			mesh->data_collisionbrushes = Collision_Brush_AllocBrushesForTriangleMesh(r->memzone, mesh->max_triangles);
+			Collision_Brush_UpdateTriangleMeshBrushes(mesh->data_collisionbrushes, mesh->num_triangles, mesh->data_element3i, mesh->data_vertex3f);
 			// regenerate the weights from the static mesh and influences,
 			// because we need weights with svector/tvector/normal information
-			mesh->weights = Mem_Alloc(r->memzone, mesh->numweights * sizeof(Model_Weight));
+			mesh->weights = Mem_Alloc(r->memzone, mesh->num_weights * sizeof(Model_Weight));
 			weight = mesh->weights;
-			for (i = 0;i < mesh->numvertices;i++)
+			for (i = 0;i < mesh->num_vertices;i++)
 			{
 				if (!i && !meshnum)
 				{
-					VectorCopy(mesh->vertex3f, model->basecullmins);
-					VectorCopy(mesh->vertex3f, model->basecullmaxs);
+					VectorCopy(mesh->data_vertex3f, model->basecullmins);
+					VectorCopy(mesh->data_vertex3f, model->basecullmaxs);
 				}
 				else
 				{
-					model->basecullmins[0] = Min(model->basecullmins[0], mesh->vertex3f[i * 3 + 0]);
-					model->basecullmins[1] = Min(model->basecullmins[1], mesh->vertex3f[i * 3 + 1]);
-					model->basecullmins[2] = Min(model->basecullmins[2], mesh->vertex3f[i * 3 + 2]);
-					model->basecullmaxs[0] = Max(model->basecullmaxs[0], mesh->vertex3f[i * 3 + 0]);
-					model->basecullmaxs[1] = Max(model->basecullmaxs[1], mesh->vertex3f[i * 3 + 1]);
-					model->basecullmaxs[2] = Max(model->basecullmaxs[2], mesh->vertex3f[i * 3 + 2]);
+					model->basecullmins[0] = Min(model->basecullmins[0], mesh->data_vertex3f[i * 3 + 0]);
+					model->basecullmins[1] = Min(model->basecullmins[1], mesh->data_vertex3f[i * 3 + 1]);
+					model->basecullmins[2] = Min(model->basecullmins[2], mesh->data_vertex3f[i * 3 + 2]);
+					model->basecullmaxs[0] = Max(model->basecullmaxs[0], mesh->data_vertex3f[i * 3 + 0]);
+					model->basecullmaxs[1] = Max(model->basecullmaxs[1], mesh->data_vertex3f[i * 3 + 1]);
+					model->basecullmaxs[2] = Max(model->basecullmaxs[2], mesh->data_vertex3f[i * 3 + 2]);
 				}
 				if (!i)
 				{
-					VectorCopy(mesh->vertex3f, mesh->basecullmins);
-					VectorCopy(mesh->vertex3f, mesh->basecullmaxs);
+					VectorCopy(mesh->data_vertex3f, mesh->basecullmins);
+					VectorCopy(mesh->data_vertex3f, mesh->basecullmaxs);
 				}
 				else
 				{
-					mesh->basecullmins[0] = Min(mesh->basecullmins[0], mesh->vertex3f[i * 3 + 0]);
-					mesh->basecullmins[1] = Min(mesh->basecullmins[1], mesh->vertex3f[i * 3 + 1]);
-					mesh->basecullmins[2] = Min(mesh->basecullmins[2], mesh->vertex3f[i * 3 + 2]);
-					mesh->basecullmaxs[0] = Max(mesh->basecullmaxs[0], mesh->vertex3f[i * 3 + 0]);
-					mesh->basecullmaxs[1] = Max(mesh->basecullmaxs[1], mesh->vertex3f[i * 3 + 1]);
-					mesh->basecullmaxs[2] = Max(mesh->basecullmaxs[2], mesh->vertex3f[i * 3 + 2]);
+					mesh->basecullmins[0] = Min(mesh->basecullmins[0], mesh->data_vertex3f[i * 3 + 0]);
+					mesh->basecullmins[1] = Min(mesh->basecullmins[1], mesh->data_vertex3f[i * 3 + 1]);
+					mesh->basecullmins[2] = Min(mesh->basecullmins[2], mesh->data_vertex3f[i * 3 + 2]);
+					mesh->basecullmaxs[0] = Max(mesh->basecullmaxs[0], mesh->data_vertex3f[i * 3 + 0]);
+					mesh->basecullmaxs[1] = Max(mesh->basecullmaxs[1], mesh->data_vertex3f[i * 3 + 1]);
+					mesh->basecullmaxs[2] = Max(mesh->basecullmaxs[2], mesh->data_vertex3f[i * 3 + 2]);
 				}
 				for (j = 0, md5weight = md5weights + md5weightrange[i*2+0];j < md5weightrange[i*2+1];j++, md5weight++)
 				{
@@ -566,18 +569,18 @@
 					weight->vertex[2] = md5weight->vertex[2];
 					weight->vertex[3] = md5weight->vertex[3];
 					// calculate weights for the tangent space vectors
-					matrix = model->basetransforms + weight->transformindex;
-					weight->svector[0] = (mesh->svector3f[i*3+0] * matrix->m[0][0] + mesh->svector3f[i*3+1] * matrix->m[1][0] + mesh->svector3f[i*3+2] * matrix->m[2][0]) * weight->vertex[3];
-					weight->svector[1] = (mesh->svector3f[i*3+0] * matrix->m[0][1] + mesh->svector3f[i*3+1] * matrix->m[1][1] + mesh->svector3f[i*3+2] * matrix->m[2][1]) * weight->vertex[3];
-					weight->svector[2] = (mesh->svector3f[i*3+0] * matrix->m[0][2] + mesh->svector3f[i*3+1] * matrix->m[1][2] + mesh->svector3f[i*3+2] * matrix->m[2][2]) * weight->vertex[3];
-					weight->tvector[0] = (mesh->tvector3f[i*3+0] * matrix->m[0][0] + mesh->tvector3f[i*3+1] * matrix->m[1][0] + mesh->tvector3f[i*3+2] * matrix->m[2][0]) * weight->vertex[3];
-					weight->tvector[1] = (mesh->tvector3f[i*3+0] * matrix->m[0][1] + mesh->tvector3f[i*3+1] * matrix->m[1][1] + mesh->tvector3f[i*3+2] * matrix->m[2][1]) * weight->vertex[3];
-					weight->tvector[2] = (mesh->tvector3f[i*3+0] * matrix->m[0][2] + mesh->tvector3f[i*3+1] * matrix->m[1][2] + mesh->tvector3f[i*3+2] * matrix->m[2][2]) * weight->vertex[3];
-					weight->normal[0] = (mesh->normal3f[i*3+0] * matrix->m[0][0] + mesh->normal3f[i*3+1] * matrix->m[1][0] + mesh->normal3f[i*3+2] * matrix->m[2][0]) * weight->vertex[3];
-					weight->normal[1] = (mesh->normal3f[i*3+0] * matrix->m[0][1] + mesh->normal3f[i*3+1] * matrix->m[1][1] + mesh->normal3f[i*3+2] * matrix->m[2][1]) * weight->vertex[3];
-					weight->normal[2] = (mesh->normal3f[i*3+0] * matrix->m[0][2] + mesh->normal3f[i*3+1] * matrix->m[1][2] + mesh->normal3f[i*3+2] * matrix->m[2][2]) * weight->vertex[3];
+					matrix = &model->data_transforminfo[weight->transformindex].basematrix;
+					weight->svector[0] = (mesh->data_svector3f[i*3+0] * matrix->m[0][0] + mesh->data_svector3f[i*3+1] * matrix->m[1][0] + mesh->data_svector3f[i*3+2] * matrix->m[2][0]) * weight->vertex[3];
+					weight->svector[1] = (mesh->data_svector3f[i*3+0] * matrix->m[0][1] + mesh->data_svector3f[i*3+1] * matrix->m[1][1] + mesh->data_svector3f[i*3+2] * matrix->m[2][1]) * weight->vertex[3];
+					weight->svector[2] = (mesh->data_svector3f[i*3+0] * matrix->m[0][2] + mesh->data_svector3f[i*3+1] * matrix->m[1][2] + mesh->data_svector3f[i*3+2] * matrix->m[2][2]) * weight->vertex[3];
+					weight->tvector[0] = (mesh->data_tvector3f[i*3+0] * matrix->m[0][0] + mesh->data_tvector3f[i*3+1] * matrix->m[1][0] + mesh->data_tvector3f[i*3+2] * matrix->m[2][0]) * weight->vertex[3];
+					weight->tvector[1] = (mesh->data_tvector3f[i*3+0] * matrix->m[0][1] + mesh->data_tvector3f[i*3+1] * matrix->m[1][1] + mesh->data_tvector3f[i*3+2] * matrix->m[2][1]) * weight->vertex[3];
+					weight->tvector[2] = (mesh->data_tvector3f[i*3+0] * matrix->m[0][2] + mesh->data_tvector3f[i*3+1] * matrix->m[1][2] + mesh->data_tvector3f[i*3+2] * matrix->m[2][2]) * weight->vertex[3];
+					weight->normal[0] = (mesh->data_normal3f[i*3+0] * matrix->m[0][0] + mesh->data_normal3f[i*3+1] * matrix->m[1][0] + mesh->data_normal3f[i*3+2] * matrix->m[2][0]) * weight->vertex[3];
+					weight->normal[1] = (mesh->data_normal3f[i*3+0] * matrix->m[0][1] + mesh->data_normal3f[i*3+1] * matrix->m[1][1] + mesh->data_normal3f[i*3+2] * matrix->m[2][1]) * weight->vertex[3];
+					weight->normal[2] = (mesh->data_normal3f[i*3+0] * matrix->m[0][2] + mesh->data_normal3f[i*3+1] * matrix->m[1][2] + mesh->data_normal3f[i*3+2] * matrix->m[2][2]) * weight->vertex[3];
 					r = VectorLength(weight->vertex) / weight->vertex[3];
-					model->transformradius[weight->transformindex] = Max(model->transformradius[weight->transformindex], r);
+					model->data_transforminfo[weight->transformindex].radius = Max(model->data_transforminfo[weight->transformindex].radius, r);
 					weight++;
 				}
 			}
@@ -619,31 +622,31 @@
 	{
 		if (outvertex3f)
 		{
-			memcpy(outvertex3f, mesh->vertex3f, mesh->numvertices * sizeof(float[3]));
+			memcpy(outvertex3f, mesh->data_vertex3f, mesh->num_vertices * sizeof(float[3]));
 			if (outplane4f)
-				memcpy(outplane4f, mesh->plane4f, mesh->numtriangles * sizeof(float[4]));
+				memcpy(outplane4f, mesh->data_plane4f, mesh->num_triangles * sizeof(float[4]));
 		}
 		if (outsvector3f)
-			memcpy(outsvector3f, mesh->svector3f, mesh->numvertices * sizeof(float[3]));
+			memcpy(outsvector3f, mesh->data_svector3f, mesh->num_vertices * sizeof(float[3]));
 		if (outtvector3f)
-			memcpy(outtvector3f, mesh->tvector3f, mesh->numvertices * sizeof(float[3]));
+			memcpy(outtvector3f, mesh->data_tvector3f, mesh->num_vertices * sizeof(float[3]));
 		if (outnormal3f)
-			memcpy(outnormal3f, mesh->normal3f, mesh->numvertices * sizeof(float[3]));
+			memcpy(outnormal3f, mesh->data_normal3f, mesh->num_vertices * sizeof(float[3]));
 		return;
 	}
 	if (outvertex3f)
-		memset(outvertex3f, 0, mesh->numvertices * sizeof(float[3]));
+		memset(outvertex3f, 0, mesh->num_vertices * sizeof(float[3]));
 	if (outsvector3f)
-		memset(outsvector3f, 0, mesh->numvertices * sizeof(float[3]));
+		memset(outsvector3f, 0, mesh->num_vertices * sizeof(float[3]));
 	if (outtvector3f)
-		memset(outtvector3f, 0, mesh->numvertices * sizeof(float[3]));
+		memset(outtvector3f, 0, mesh->num_vertices * sizeof(float[3]));
 	if (outnormal3f)
-		memset(outnormal3f, 0, mesh->numvertices * sizeof(float[3]));
+		memset(outnormal3f, 0, mesh->num_vertices * sizeof(float[3]));
 	// TODO: SSE assembly support
 	if (outvertex3f && outsvector3f && outtvector3f && outnormal3f)
 	{
 		// fastpath for all properties at once
-		for (j = 0, weight = mesh->weights;j < mesh->numweights;j++, weight++)
+		for (j = 0, weight = mesh->weights;j < mesh->num_weights;j++, weight++)
 		{
 			matrix = transforms + weight->transformindex;
 			index = weight->vertexindex*3;
@@ -661,14 +664,14 @@
 			outnormal3f[index+2] += DotProduct(weight->normal, matrix->m[2]);
 		}
 		if (outplane4f)
-			Model_BuildTrianglePlanes(outvertex3f, mesh->numtriangles, mesh->element3i, outplane4f);
+			Model_BuildTrianglePlanes(outvertex3f, mesh->num_triangles, mesh->data_element3i, outplane4f);
 		return;
 	}
 	// partial request, handle each in turn (usually only vertex)
 	// FIXME: would it be worth saving separate weights for vertex?
 	if (outvertex3f)
 	{
-		for (j = 0, weight = mesh->weights;j < mesh->numweights;j++, weight++)
+		for (j = 0, weight = mesh->weights;j < mesh->num_weights;j++, weight++)
 		{
 			matrix = transforms + weight->transformindex;
 			index = weight->vertexindex*3;
@@ -677,11 +680,11 @@
 			outvertex3f[index+2] += DotProduct4(weight->vertex, matrix->m[2]);
 		}
 		if (outplane4f)
-			Model_BuildTrianglePlanes(outvertex3f, mesh->numtriangles, mesh->element3i, outplane4f);
+			Model_BuildTrianglePlanes(outvertex3f, mesh->num_triangles, mesh->data_element3i, outplane4f);
 	}
 	if (outsvector3f)
 	{
-		for (j = 0, weight = mesh->weights;j < mesh->numweights;j++, weight++)
+		for (j = 0, weight = mesh->weights;j < mesh->num_weights;j++, weight++)
 		{
 			matrix = transforms + weight->transformindex;
 			index = weight->vertexindex*3;
@@ -692,7 +695,7 @@
 	}
 	if (outtvector3f)
 	{
-		for (j = 0, weight = mesh->weights;j < mesh->numweights;j++, weight++)
+		for (j = 0, weight = mesh->weights;j < mesh->num_weights;j++, weight++)
 		{
 			matrix = transforms + weight->transformindex;
 			index = weight->vertexindex*3;
@@ -703,7 +706,7 @@
 	}
 	if (outnormal3f)
 	{
-		for (j = 0, weight = mesh->weights;j < mesh->numweights;j++, weight++)
+		for (j = 0, weight = mesh->weights;j < mesh->num_weights;j++, weight++)
 		{
 			matrix = transforms + weight->transformindex;
 			index = weight->vertexindex*3;
@@ -739,7 +742,7 @@
 
 		Matrix4x4_OriginFromMatrix(transforms, origin);
 		// TODO: scale radius based on longest vector in transform?
-		radius = model->transformradius[0];
+		radius = model->data_transforminfo[0].radius;
 		cullmins[0] = origin[0] - radius;
 		cullmins[1] = origin[1] - radius;
 		cullmins[2] = origin[2] - radius;
@@ -747,11 +750,11 @@
 		cullmaxs[1] = origin[1] + radius;
 		cullmaxs[2] = origin[2] + radius;
 
-		for (i = 1;i < model->numtransforms;i++)
+		for (i = 1;i < model->num_transforms;i++)
 		{
 			Matrix4x4_OriginFromMatrix(transforms + i, origin);
 			// TODO: scale radius based on longest vector in transform?
-			radius = model->transformradius[i];
+			radius = model->data_transforminfo[i].radius;
 			cullmins[0] = Min(cullmins[0], origin[0] - radius);
 			cullmins[1] = Min(cullmins[1], origin[1] - radius);
 			cullmins[2] = Min(cullmins[2], origin[2] - radius);
@@ -771,9 +774,9 @@
 	model = Resource_GetData(modelresource);
 	if (!model)
 		return; // no model
-	if (meshindex >= model->nummeshes)
+	if (meshindex >= model->num_meshes)
 		return; // invalid mesh
-	mesh = model->meshes + meshindex;
+	mesh = model->data_meshes + meshindex;
 	if (!transforms)
 	{
 		// easy case
@@ -787,11 +790,11 @@
 		// array and then memset it and blend, add a weightrange array indexable
 		// by vertex number to make this faster (no intermediate buffer involved)
 		NUint32 i;
-		float *v, *vertex3f = Mem_Alloc(Global_Zone, mesh->numvertices * sizeof(float[3]));
+		float *v, *vertex3f = Mem_Alloc(Global_Zone, mesh->num_vertices * sizeof(float[3]));
 		Model_GetVertices(mesh, transforms, vertex3f, NULL, NULL, NULL, NULL);
 		VectorCopy(vertex3f, cullmins);
 		VectorCopy(vertex3f, cullmaxs);
-		for (i = 0, v = vertex3f;i < mesh->numvertices;i++, v += 3)
+		for (i = 0, v = vertex3f;i < mesh->num_vertices;i++, v += 3)
 		{
 			cullmins[0] = Min(cullmins[0], v[0]);
 			cullmins[1] = Min(cullmins[1], v[1]);
@@ -811,8 +814,8 @@
 	model = Resource_GetData(modelresource);
 	if (!model)
 		return -1; // no model
-	for (i = 0;i < model->numtransforms;i++)
-		if (!String_Compare(model->transformnames[i], name))
+	for (i = 0;i < model->num_transforms;i++)
+		if (!String_Compare(model->data_transforminfo[i].name, name))
 			return i;
 	return -1;
 }
@@ -825,12 +828,12 @@
 
 NUint32 Model_GetNumMeshes(NUint32 resourceindex)
 {
-	return ((Model *)Resource_GetData(resourceindex))->nummeshes;
+	return ((Model *)Resource_GetData(resourceindex))->num_meshes;
 }
 
 NUint32 Model_GetNumTransforms(NUint32 resourceindex)
 {
-	return ((Model *)Resource_GetData(resourceindex))->numtransforms;
+	return ((Model *)Resource_GetData(resourceindex))->num_transforms;
 }
 
 const char **Model_GetTransformNames(NUint32 resourceindex)
@@ -845,12 +848,12 @@
 
 NUint32 Model_GetMeshMaterial(NUint32 resourceindex, NUint32 meshindex)
 {
-	return ((Model *)Resource_GetData(resourceindex))->meshes[meshindex].resource_material;
+	return ((Model *)Resource_GetData(resourceindex))->data_meshes[meshindex].resource_material;
 }
 
 NUint32 Model_GetMeshNumVertices(NUint32 resourceindex, NUint32 meshindex)
 {
-	return ((Model *)Resource_GetData(resourceindex))->meshes[meshindex].resource_material;
+	return ((Model *)Resource_GetData(resourceindex))->data_meshes[meshindex].resource_material;
 }
 
 // unfinished

Modified: trunk/model.h
===================================================================
--- trunk/model.h	2006-04-08 21:09:02 UTC (rev 692)
+++ trunk/model.h	2006-04-08 21:12:01 UTC (rev 693)
@@ -4,6 +4,20 @@
 
 #include "collision.h"
 
+typedef struct Model_TransformInfo
+{
+	char *name;
+
+	// doom3 joint pose format
+	float basepose[6];
+
+	matrix4x4_t basematrix;
+	matrix4x4_t baseinversematrix;
+
+	float radius;
+}
+Model_TransformInfo;
+
 typedef struct Model_Weight
 {
 	// this struct is intended to be easy for SSE 4 component math ops
@@ -27,64 +41,79 @@
 
 typedef struct Model_Mesh
 {
+	char *materialname;
+
 	// material applied to this mesh
 	NUint32 resource_material;
 
-	// number of vertices in this mesh
-	NUint32 numvertices;
-	// texture coordinates for vertices in this mesh
-	float *texcoord2f;
-
 	// number of triangles in this mesh
-	NUint32 numtriangles;
+	NUint32 num_triangles;
+	// amount of memory allocated for triangles in this mesh
+	NUint32 max_triangles;
 	// triangle vertex indices
-	NUint32 *element3i;
+	NUint32 *data_element3i;
 	// triangle neighbor indices, -1 means no neighbor on this edge
-	NSint32 *neighbor3i;
+	NSint32 *data_neighbor3i;
 	// plane of each triangle for shadow casting
 	// DotProduct4(plane4f, lightorigin) > 0 means the light is infront
-	float *plane4f;
+	float *data_plane4f;
 
-	// number of skeletal transforms to blend onto the vertex array
-	// (always >= numvertices)
-	NUint32 numweights;
-	// skeletal transform weights
-	Model_Weight *weights;
-
-	// static mesh data for non-animated models
+	// number of vertices in this mesh
+	NUint32 num_vertices;
+	// amount of memory allocated for vertices in this mesh (used when loading/converting models)
+	NUint32 max_vertices;
 	// note: vertex, svector, tvector, and normal form a valid [4][3] matrix
 	// defining tangentspace at each vertex, simply transforming the light
 	// using this tangentspace matrix gives a vector suitable for normalmapped
 	// (aka bumpmapped) lighting.
 	// location of vertex
-	float *vertex3f;
+	float *data_vertex3f;
 	// direction of S texcoord
-	float *svector3f;
+	float *data_svector3f;
 	// direction of T texcoord
-	float *tvector3f;
+	float *data_tvector3f;
 	// direction of R texcoord (surface normal)
-	float *normal3f;
+	float *data_normal3f;
+	// texture coordinates for vertices in this mesh
+	float *data_texcoord2f;
+	// lightmap texture coordinates for vertices in this mesh
+	float *data_lightmaptexcoord2f;
+	// indices of up to 4 transforms per vertex
+	int *data_weightindex4i;
+	// blending influence values of up to 4 transforms per vertex
+	float *data_weightvalue4f;
 
-	// collision brushes for the static mesh
-	// (generally these are triangle brushes)
-	NUint32 numcollisionbrushes;
-	Collision_Brush *collisionbrushes;
+#if 1
+	// number of skeletal transforms to blend onto the vertex array
+	// (always >= numvertices)
+	NUint32 num_weights;
+	// skeletal transform weights
+	Model_Weight *weights;
+#endif
 
 	Nvec3 basecullmins;
 	Nvec3 basecullmaxs;
+
+	// number of collision burhses in this mesh
+	NUint32 num_collisionbrushes;
+	// amount of memory allocated for collision brushes in this mesh
+	NUint32 max_collisionbrushes;
+	// collision brushes for the static mesh
+	// (generally these are triangle brushes)
+	Collision_Brush *data_collisionbrushes;
 }
 Model_Mesh;
 
+
 typedef struct Model
 {
-	NUint32 nummeshes;
-	Model_Mesh *meshes;
+	NUint32 num_meshes;
+	NUint32 max_meshes;
+	Model_Mesh *data_meshes;
 
-	NUint32 numtransforms;
-	char **transformnames;
-	float *transformradius;
-	matrix4x4_t *basetransforms;
-	matrix4x4_t *baseinversetransforms;
+	NUint32 num_transforms;
+	NUint32 max_transforms;
+	Model_TransformInfo *data_transforminfo;
 
 	Nvec3 basecullmins;
 	Nvec3 basecullmaxs;

Modified: trunk/modelanim.c
===================================================================
--- trunk/modelanim.c	2006-04-08 21:09:02 UTC (rev 692)
+++ trunk/modelanim.c	2006-04-08 21:12:01 UTC (rev 693)
@@ -104,10 +104,10 @@
 		//numJoints 3
 		else if (Util_ParseC_MatchKeyword(&thread, "numJoints"))
 		{
-			LoadInt(modelanim->numtransforms, "after 'numJoints'");
-			if (modelanim->numtransforms < 1)
+			LoadInt(modelanim->num_transforms, "after 'numJoints'");
+			if (modelanim->num_transforms < 1)
 			{
-				Console_Printf("ModelAnim_Load: numJoints %i < 1\n", modelanim->numtransforms);
+				Console_Printf("ModelAnim_Load: numJoints %i < 1\n", modelanim->num_transforms);
 				Abort();
 			}
 		}
@@ -130,7 +130,7 @@
 				Console_Printf("ModelAnim_Load: numAnimatedComponents %i < 0\n", modelanim->numvaluesperframe);
 				Abort();
 			}
-			if (modelanim->numvaluesperframe > modelanim->numtransforms * 6)
+			if (modelanim->numvaluesperframe > modelanim->num_transforms * 6)
 			{
 				Console_Printf("ModelAnim_Load: numAnimatedComponents %i > numJoints * 6\n", modelanim->numvaluesperframe);
 				Abort();
@@ -141,7 +141,7 @@
 		{
 			NUint32 jointnum;
 			ExpectKeyword("{", "after 'hierarchy'");
-			modelanim->transforminfo = Mem_Alloc(r->memzone, modelanim->numtransforms * sizeof(*modelanim->transforminfo));
+			modelanim->transforminfo = Mem_Alloc(r->memzone, modelanim->num_transforms * sizeof(*modelanim->transforminfo));
 			for (jointnum = 0; !Util_ParseC_MatchKeyword(&thread, "}");jointnum++)
 			{
 				NSint32 parent;
@@ -178,9 +178,9 @@
 				modelanim->transforminfo[jointnum].firstvalue = firstcomponent;
 				modelanim->transforminfo[jointnum].numvalues = numcomponents;
 			}
-			if (jointnum != modelanim->numtransforms)
+			if (jointnum != modelanim->num_transforms)
 			{
-				Console_Printf("ModelAnim_Load: final jointnum (%i) != numJoints (%i)\n", jointnum, modelanim->numtransforms);
+				Console_Printf("ModelAnim_Load: final jointnum (%i) != numJoints (%i)\n", jointnum, modelanim->num_transforms);
 				Abort();
 			}
 		}
@@ -215,7 +215,7 @@
 		{
 			NUint32 jointnum;
 			ExpectKeyword("{", "after 'baseframe'");
-			modelanim->basevalues = Mem_Alloc(r->memzone, modelanim->numtransforms * 6 * sizeof(*modelanim->basevalues));
+			modelanim->basevalues = Mem_Alloc(r->memzone, modelanim->num_transforms * 6 * sizeof(*modelanim->basevalues));
 			modelanim->values = Mem_Alloc(r->memzone, modelanim->numframes * modelanim->numvaluesperframe * sizeof(*modelanim->values));
 			for (jointnum = 0; !Util_ParseC_MatchKeyword(&thread, "}");jointnum++)
 			{
@@ -231,9 +231,9 @@
 				LoadValue(modelanim->basevalues[jointnum*6+5], "(joint 5)");
 				ExpectKeyword(")", "after second joint data list");
 			}
-			if (jointnum != modelanim->numtransforms)
+			if (jointnum != modelanim->num_transforms)
 			{
-				Console_Printf("ModelAnim_Load: final jointnum (%i) != numJoints (%i)\n", jointnum, modelanim->numtransforms);
+				Console_Printf("ModelAnim_Load: final jointnum (%i) != numJoints (%i)\n", jointnum, modelanim->num_transforms);
 				Abort();
 			}
 		}
@@ -291,7 +291,7 @@
 	modelanim = Resource_GetData(resourceindex);
 	if (!modelanim)
 		return 0; // no modelanim
-	return modelanim->numtransforms;
+	return modelanim->num_transforms;
 }
 
 NUint32 ModelAnim_GetNumFrames(NUint32 resourceindex)
@@ -326,12 +326,12 @@
 	model = Resource_GetData(modelresource);
 	if (!model)
 		return; // no model
-	if (model->numtransforms != modelanim->numtransforms)
+	if (model->num_transforms != modelanim->num_transforms)
 		return; // error
 	v1 = modelanim->values + frame1 * modelanim->numvaluesperframe;
 	v2 = modelanim->values + frame2 * modelanim->numvaluesperframe;
 	b = modelanim->basevalues;
-	for (transformnum = 0, info = modelanim->transforminfo;transformnum < modelanim->numtransforms;transformnum++, info++, b += 6)
+	for (transformnum = 0, info = modelanim->transforminfo;transformnum < modelanim->num_transforms;transformnum++, info++, b += 6)
 	{
 		NUint32 component;
 		NUint32 valueflags = info->valueflags;
@@ -347,6 +347,6 @@
 				pose[component] = b[component];
 		}
 		Matrix4x4_CreateFromDoom3Joint(&posematrix, pose[0], pose[1], pose[2], pose[3], pose[4], pose[5]);
-		Matrix4x4_Concat(&relativematrix, &posematrix, &model->baseinversetransforms[transformnum]);
+		Matrix4x4_Concat(&relativematrix, &posematrix, &model->data_transforminfo[transformnum].baseinversematrix);
 	}
 }

Modified: trunk/modelanim.h
===================================================================
--- trunk/modelanim.h	2006-04-08 21:09:02 UTC (rev 692)
+++ trunk/modelanim.h	2006-04-08 21:12:01 UTC (rev 693)
@@ -18,13 +18,13 @@
 	// the quaternions are stored as canonical unit vectors in which w is
 	// assumed to be negative (it is easy to regenerate any one component of a
 	// unit vector if you know its sign)
-	NUint32 numtransforms;
+	NUint32 num_transforms;
 	NUint32 numvaluesperframe;
 	NUint32 numframes;
 	float framerate;
-	ModelAnim_TransformInfo *transforminfo; // [numtransforms]
+	ModelAnim_TransformInfo *transforminfo; // [num_transforms]
 	float *values; // [numframes*numvaluesperframe]
-	float *basevalues; // [numtransforms*6]
+	float *basevalues; // [num_transforms*6]
 }
 ModelAnim;
 

Modified: trunk/r_main.c
===================================================================
--- trunk/r_main.c	2006-04-08 21:09:02 UTC (rev 692)
+++ trunk/r_main.c	2006-04-08 21:12:01 UTC (rev 693)
@@ -1172,9 +1172,9 @@
 	if (R.shadowbuilder_maxshadowmarklist < R.shadowbuilder_numshadowmarklist + innumtris)
 	{
 		R.shadowbuilder_maxshadowmarklist = R.shadowbuilder_numshadowmarklist + innumtris + 256;
-		Mem_ReAlloc(R.zone, &R.shadowbuilder_shadowmark, R.shadowbuilder_maxshadowmarklist * sizeof(int));
-		Mem_ReAlloc(R.zone, &R.shadowbuilder_shadowmarklist, R.shadowbuilder_maxshadowmarklist * sizeof(int));
-		Mem_ReAlloc(R.zone, &R.shadowbuilder_shadowelements, R.shadowbuilder_maxshadowmarklist * 24 * sizeof(int));
+		Mem_ReAlloc(R.zone, &R.shadowbuilder_shadowmark, R.shadowbuilder_maxshadowmarklist * sizeof(NUint32));
+		Mem_ReAlloc(R.zone, &R.shadowbuilder_shadowmarklist, R.shadowbuilder_maxshadowmarklist * sizeof(NUint32));
+		Mem_ReAlloc(R.zone, &R.shadowbuilder_shadowelements, R.shadowbuilder_maxshadowmarklist * 24 * sizeof(NUint32));
 	}
 
 	// increment R.shadowbuilder_shadowmarknum for marking which triangles are
@@ -1183,8 +1183,8 @@
 	// if R.shadowbuilder_vertexupdatenum wrapped, clear the arrays
 	if (R.shadowbuilder_shadowmarknum == 0)
 	{
-		memset(R.shadowbuilder_shadowmark, 0, R.shadowbuilder_maxshadowmarklist * sizeof(int));
-		memset(R.shadowbuilder_shadowelements, 0, R.shadowbuilder_maxshadowmarklist * 24 * sizeof(int));
+		memset(R.shadowbuilder_shadowmark, 0, R.shadowbuilder_maxshadowmarklist * sizeof(NUint32));
+		memset(R.shadowbuilder_shadowelements, 0, R.shadowbuilder_maxshadowmarklist * 24 * sizeof(NUint32));
 		R.shadowbuilder_shadowmarknum = 1;
 	}
 
@@ -1192,8 +1192,8 @@
 	if (R.shadowbuilder_maxvertexupdate < innumvertices)
 	{
 		R.shadowbuilder_maxvertexupdate = innumvertices + 256;
-		Mem_ReAlloc(R.zone, &R.shadowbuilder_vertexupdate, R.shadowbuilder_maxvertexupdate * sizeof(int));
-		Mem_ReAlloc(R.zone, &R.shadowbuilder_vertexremap, R.shadowbuilder_maxvertexupdate * sizeof(int));
+		Mem_ReAlloc(R.zone, &R.shadowbuilder_vertexupdate, R.shadowbuilder_maxvertexupdate * sizeof(NUint32));
+		Mem_ReAlloc(R.zone, &R.shadowbuilder_vertexremap, R.shadowbuilder_maxvertexupdate * sizeof(NUint32));
 	}
 
 	// increment R.shadowbuilder_vertexupdatenum for marking which vertices
@@ -1202,8 +1202,8 @@
 	// if R.shadowbuilder_vertexupdatenum wrapped, clear the arrays
 	if (R.shadowbuilder_vertexupdatenum == 0)
 	{
-		memset(R.shadowbuilder_vertexupdate, 0, R.shadowbuilder_maxvertexupdate * sizeof(int));
-		memset(R.shadowbuilder_vertexremap, 0, R.shadowbuilder_maxvertexupdate * sizeof(int));
+		memset(R.shadowbuilder_vertexupdate, 0, R.shadowbuilder_maxvertexupdate * sizeof(NUint32));
+		memset(R.shadowbuilder_vertexremap, 0, R.shadowbuilder_maxvertexupdate * sizeof(NUint32));
 		R.shadowbuilder_vertexupdatenum = 1;
 	}
 
@@ -1920,13 +1920,13 @@
 	material = Resource_GetData(materialresource);
 	if (!material)
 		return; // TODO: warning
-	if (meshindex >= model->nummeshes)
+	if (meshindex >= model->num_meshes)
 		return; // TODO: warning
-	mesh = model->meshes + meshindex;
-	if (mesh->numvertices <= 0 || mesh->numtriangles <= 0)
+	mesh = model->data_meshes + meshindex;
+	if (!mesh->num_vertices < 1 || mesh->num_triangles < 1)
 		return; // TODO: warning
-	R.speeds_data.numdrawmesh_vertices += mesh->numvertices;
-	R.speeds_data.numdrawmesh_triangles += mesh->numtriangles;
+	R.speeds_data.numdrawmesh_vertices += mesh->num_vertices;
+	R.speeds_data.numdrawmesh_triangles += mesh->num_triangles;
 	switch (R.drawmode)
 	{
 	case R_DRAWMODE_ZFILL:
@@ -1937,9 +1937,9 @@
 			Model_GetVertices(mesh, transforms, vertex3f, NULL, NULL, NULL, NULL);
 		}
 		else
-			vertex3f = mesh->vertex3f;
+			vertex3f = mesh->data_vertex3f;
 		qglVertexPointer(3, GL_FLOAT, sizeof(float[3]), vertex3f);
-		R_DrawTriangles(0, mesh->numvertices, mesh->numtriangles, mesh->element3i);
+		R_DrawTriangles(0, mesh->num_vertices, mesh->num_triangles, mesh->data_element3i);
 		R_CheckError();
 		break;
 	case R_DRAWMODE_SKY:
@@ -1951,10 +1951,10 @@
 			Model_GetVertices(mesh, transforms, vertex3f, NULL, NULL, NULL, NULL);
 		}
 		else
-			vertex3f = mesh->vertex3f;
+			vertex3f = mesh->data_vertex3f;
 		qglVertexPointer(3, GL_FLOAT, sizeof(float[3]), vertex3f);
-		qglTexCoordPointer(2, GL_FLOAT, sizeof(float[2]), mesh->texcoord2f);
-		R_DrawTriangles(0, mesh->numvertices, mesh->numtriangles, mesh->element3i);
+		qglTexCoordPointer(2, GL_FLOAT, sizeof(float[2]), mesh->data_texcoord2f);
+		R_DrawTriangles(0, mesh->num_vertices, mesh->num_triangles, mesh->data_element3i);
 		R_CheckError();
 		break;
 	case R_DRAWMODE_BACKGROUND:
@@ -1965,15 +1965,15 @@
 			Model_GetVertices(mesh, transforms, vertex3f, NULL, NULL, NULL, NULL);
 		}
 		else
-			vertex3f = mesh->vertex3f;
-		for (i = 0, v = vertex3f, tc = R.varray_texcoord2f;i < mesh->numvertices;i++, v += 3, tc += 2)
+			vertex3f = mesh->data_vertex3f;
+		for (i = 0, v = vertex3f, tc = R.varray_texcoord2f;i < mesh->num_vertices;i++, v += 3, tc += 2)
 		{
 			tc[0] = VectorDistance(v, R.entityeyeorigin) * R.fog_rangerecip;
 			tc[1] = 0;
 		}
 		qglVertexPointer(3, GL_FLOAT, sizeof(float[3]), vertex3f);
 		qglClientActiveTextureARB(GL_TEXTURE0_ARB);
-		qglTexCoordPointer(2, GL_FLOAT, sizeof(float[2]), mesh->texcoord2f);
+		qglTexCoordPointer(2, GL_FLOAT, sizeof(float[2]), mesh->data_texcoord2f);
 		qglClientActiveTextureARB(GL_TEXTURE1_ARB);
 		qglTexCoordPointer(2, GL_FLOAT, sizeof(float[2]), R.varray_texcoord2f);
 
@@ -1994,14 +1994,14 @@
 
 		R_CheckError();
 		R_SetBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
-		R_DrawTriangles(0, mesh->numvertices, mesh->numtriangles, mesh->element3i);
+		R_DrawTriangles(0, mesh->num_vertices, mesh->num_triangles, mesh->data_element3i);
 
 		// fog darkening
 		qglEnable(GL_TEXTURE_2D);
 
 		R_CheckError();
 		R_SetBlendFunc(GL_SRC_ALPHA, GL_ONE);
-		R_DrawTriangles(0, mesh->numvertices, mesh->numtriangles, mesh->element3i);
+		R_DrawTriangles(0, mesh->num_vertices, mesh->num_triangles, mesh->data_element3i);
 		R_CheckError();
 		break;
 	case R_DRAWMODE_UNLIT:
@@ -2016,18 +2016,18 @@
 			Model_GetVertices(mesh, transforms, vertex3f, NULL, NULL, NULL, NULL);
 		}
 		else
-			vertex3f = mesh->vertex3f;
-		for (i = 0, v = vertex3f, tc = R.varray_texcoord2f;i < mesh->numvertices;i++, v += 3, tc += 2)
+			vertex3f = mesh->data_vertex3f;
+		for (i = 0, v = vertex3f, tc = R.varray_texcoord2f;i < mesh->num_vertices;i++, v += 3, tc += 2)
 		{
 			tc[0] = VectorDistance(v, R.entityeyeorigin) * R.fog_rangerecip;
 			tc[1] = 0;
 		}
 		qglVertexPointer(3, GL_FLOAT, sizeof(float[3]), vertex3f);
 		qglClientActiveTextureARB(GL_TEXTURE0_ARB);
-		qglTexCoordPointer(2, GL_FLOAT, sizeof(float[2]), mesh->texcoord2f);
+		qglTexCoordPointer(2, GL_FLOAT, sizeof(float[2]), mesh->data_texcoord2f);
 		qglClientActiveTextureARB(GL_TEXTURE1_ARB);
 		qglTexCoordPointer(2, GL_FLOAT, sizeof(float[2]), R.varray_texcoord2f);
-		R_DrawTriangles(0, mesh->numvertices, mesh->numtriangles, mesh->element3i);
+		R_DrawTriangles(0, mesh->num_vertices, mesh->num_triangles, mesh->data_element3i);
 		R_CheckError();
 		break;
 	case R_DRAWMODE_LIT_SHADOWVOLUME:
@@ -2041,11 +2041,11 @@
 		}
 		else
 		{
-			vertex3f = mesh->vertex3f;
-			plane4f = mesh->plane4f;
+			vertex3f = mesh->data_vertex3f;
+			plane4f = mesh->data_plane4f;
 		}
 		// generate shadowvolume in R.varray_vertex3f2 from vertex3f
-		tris = R_ConstructShadowVolume(mesh->numvertices, mesh->numtriangles, mesh->element3i, mesh->neighbor3i, vertex3f, &outverts, plane4f);
+		tris = R_ConstructShadowVolume(mesh->num_vertices, mesh->num_triangles, mesh->data_element3i, mesh->data_neighbor3i, vertex3f, &outverts, plane4f);
 		qglVertexPointer(3, GL_FLOAT, sizeof(float[3]), R.varray_vertex3f2);
 		if (R.drawmode == R_DRAWMODE_LIT_VISIBLESHADOWVOLUME)
 		{
@@ -2109,10 +2109,10 @@
 		}
 		else
 		{
-			vertex3f = mesh->vertex3f;
-			svector3f = mesh->svector3f;
-			tvector3f = mesh->tvector3f;
-			normal3f = mesh->normal3f;
+			vertex3f = mesh->data_vertex3f;
+			svector3f = mesh->data_svector3f;
+			tvector3f = mesh->data_tvector3f;
+			normal3f = mesh->data_normal3f;
 		}
 
 		// bind the 3 material textures and the light cubemap and the fog mask texture
@@ -2139,7 +2139,7 @@
 
 		// bind the texcoord and tangentspace vector arrays
 		qglClientActiveTextureARB(GL_TEXTURE0_ARB);
-		qglTexCoordPointer(2, GL_FLOAT, sizeof(float[2]), mesh->texcoord2f);
+		qglTexCoordPointer(2, GL_FLOAT, sizeof(float[2]), mesh->data_texcoord2f);
 
 		qglClientActiveTextureARB(GL_TEXTURE1_ARB);
 		qglTexCoordPointer(3, GL_FLOAT, sizeof(float[3]), svector3f);
@@ -2189,7 +2189,7 @@
 		if (s->loc_SpecularScale >= 0)
 			qglUniform1fARB(s->loc_SpecularScale, specularintensity);
 
-		R_DrawTriangles(0, mesh->numvertices, mesh->numtriangles, mesh->element3i);
+		R_DrawTriangles(0, mesh->num_vertices, mesh->num_triangles, mesh->data_element3i);
 		R_CheckError();
 		break;
 	case R_DRAWMODE_LIT_FINISH:
@@ -2204,18 +2204,18 @@
 			Model_GetVertices(mesh, transforms, vertex3f, NULL, NULL, NULL, NULL);
 		}
 		else
-			vertex3f = mesh->vertex3f;
-		for (i = 0, v = vertex3f, tc = R.varray_texcoord2f;i < mesh->numvertices;i++, v += 3, tc += 2)
+			vertex3f = mesh->data_vertex3f;
+		for (i = 0, v = vertex3f, tc = R.varray_texcoord2f;i < mesh->num_vertices;i++, v += 3, tc += 2)
 		{
 			tc[0] = VectorDistance(v, R.entityeyeorigin) * R.fog_rangerecip;
 			tc[1] = 0;
 		}
 		qglVertexPointer(3, GL_FLOAT, sizeof(float[3]), vertex3f);
 		qglClientActiveTextureARB(GL_TEXTURE0_ARB);
-		qglTexCoordPointer(2, GL_FLOAT, sizeof(float[2]), mesh->texcoord2f);
+		qglTexCoordPointer(2, GL_FLOAT, sizeof(float[2]), mesh->data_texcoord2f);
 		qglClientActiveTextureARB(GL_TEXTURE1_ARB);
 		qglTexCoordPointer(2, GL_FLOAT, sizeof(float[2]), R.varray_texcoord2f);
-		R_DrawTriangles(0, mesh->numvertices, mesh->numtriangles, mesh->element3i);
+		R_DrawTriangles(0, mesh->num_vertices, mesh->num_triangles, mesh->data_element3i);
 		R_CheckError();
 		break;
 	case R_DRAWMODE_HUD:
@@ -2227,10 +2227,10 @@
 			Model_GetVertices(mesh, transforms, vertex3f, NULL, NULL, NULL, NULL);
 		}
 		else
-			vertex3f = mesh->vertex3f;
+			vertex3f = mesh->data_vertex3f;
 		qglVertexPointer(3, GL_FLOAT, sizeof(float[3]), vertex3f);
-		qglTexCoordPointer(2, GL_FLOAT, sizeof(float[2]), mesh->texcoord2f);
-		R_DrawTriangles(0, mesh->numvertices, mesh->numtriangles, mesh->element3i);
+		qglTexCoordPointer(2, GL_FLOAT, sizeof(float[2]), mesh->data_texcoord2f);
+		R_DrawTriangles(0, mesh->num_vertices, mesh->num_triangles, mesh->data_element3i);
 		R_CheckError();
 		break;
 	case R_DRAWMODE_LINES:
@@ -2242,17 +2242,17 @@
 			Model_GetVertices(mesh, transforms, vertex3f, NULL, NULL, NULL, NULL);
 		}
 		else
-			vertex3f = mesh->vertex3f;
+			vertex3f = mesh->data_vertex3f;
 		qglVertexPointer(3, GL_FLOAT, sizeof(float[3]), vertex3f);
 		qglBegin(GL_LINES);
-		for (i = 0;i < mesh->numtriangles;i++)
+		for (i = 0;i < mesh->num_triangles;i++)
 		{
-			qglArrayElement(mesh->element3i[i*3+0]);
-			qglArrayElement(mesh->element3i[i*3+1]);
-			qglArrayElement(mesh->element3i[i*3+1]);
-			qglArrayElement(mesh->element3i[i*3+2]);
-			qglArrayElement(mesh->element3i[i*3+2]);
-			qglArrayElement(mesh->element3i[i*3+0]);
+			qglArrayElement(mesh->data_element3i[i*3+0]);
+			qglArrayElement(mesh->data_element3i[i*3+1]);
+			qglArrayElement(mesh->data_element3i[i*3+1]);
+			qglArrayElement(mesh->data_element3i[i*3+2]);
+			qglArrayElement(mesh->data_element3i[i*3+2]);
+			qglArrayElement(mesh->data_element3i[i*3+0]);
 		}
 		qglEnd();
 		R_CheckError();

Modified: trunk/util.c
===================================================================
--- trunk/util.c	2006-04-08 21:09:02 UTC (rev 692)
+++ trunk/util.c	2006-04-08 21:12:01 UTC (rev 693)
@@ -312,7 +312,7 @@
 	if (surface->num_triangles >= surface->max_triangles)
 	{
 		surface->max_triangles = Max(surface->max_triangles * 2, 1024);
-		Mem_ReAlloc(Global_Zone, &surface->data_element3i, surface->max_triangles * sizeof(int[3]));
+		Mem_ReAlloc(Global_Zone, &surface->data_element3i, surface->max_triangles * sizeof(NUint32[3]));
 	}
 	e = surface->data_element3i + surface->num_triangles * 3;
 	e[0] = e0;
@@ -879,11 +879,11 @@
 			tileheight = Bound(0, height - by, tilesize+2);
 			//memset(mesh, 0, sizeof(mesh));
 			mesh->materialname = materialname;
-			mesh->vertex3f = Mem_Alloc(Global_Zone, (tilesize+2)*(tilesize+2) * sizeof(float[3]));
-			mesh->texcoord2f = Mem_Alloc(Global_Zone, (tilesize+2)*(tilesize+2) * sizeof(float[2]));
-			mesh->element3i = Mem_Alloc(Global_Zone, (tilesize+1)*(tilesize+1)*2 * sizeof(NUint32[3]));
-			mesh->numvertices = tilewidth*tileheight;
-			mesh->numtriangles = (tilewidth-1)*(tileheight-1)*2;
+			mesh->data_vertex3f = Mem_Alloc(Global_Zone, (tilesize+2)*(tilesize+2) * sizeof(float[3]));
+			mesh->data_texcoord2f = Mem_Alloc(Global_Zone, (tilesize+2)*(tilesize+2) * sizeof(float[2]));
+			mesh->data_element3i = Mem_Alloc(Global_Zone, (tilesize+1)*(tilesize+1)*2 * sizeof(NUint32[3]));
+			mesh->num_vertices = tilewidth*tileheight;
+			mesh->num_triangles = (tilewidth-1)*(tileheight-1)*2;
 			for (ty = 0, num = 0;ty < tileheight;ty++)
 			{
 				for (tx = 0;tx < tilewidth;tx++, num++)
@@ -900,11 +900,11 @@
 					pyf = py - pyi;
 					p = pixels + (pyi * width + pxi) * 4;
 					pz = ((p[0]+p[1]+p[2])*(1.0-pxf)+(p[4]+p[5]+p[6])*(pxf))*(1.0-pyf)+((p[w+0]+p[w+1]+p[w+2])*(1.0-pxf)+(p[w+4]+p[w+5]+p[w+6])*(pxf))*(pyf);
-					mesh->vertex3f[num*3+0] = px * terrainscale[0] + terrainorigin[0];
-					mesh->vertex3f[num*3+1] = py * terrainscale[1] + terrainorigin[1];
-					mesh->vertex3f[num*3+2] = pz * terrainscale[2] + terrainorigin[2];
-					mesh->texcoord2f[num*2+0] = mesh->vertex3f[num*3+0] * texturescale[0];
-					mesh->texcoord2f[num*2+1] = mesh->vertex3f[num*3+1] * texturescale[1];
+					mesh->data_vertex3f[num*3+0] = px * terrainscale[0] + terrainorigin[0];
+					mesh->data_vertex3f[num*3+1] = py * terrainscale[1] + terrainorigin[1];
+					mesh->data_vertex3f[num*3+2] = pz * terrainscale[2] + terrainorigin[2];
+					mesh->data_texcoord2f[num*2+0] = mesh->data_vertex3f[num*3+0] * texturescale[0];
+					mesh->data_texcoord2f[num*2+1] = mesh->data_vertex3f[num*3+1] * texturescale[1];
 				}
 			}
 			for (ty = 0, num = 0;ty < tileheight-1;ty++)
@@ -912,12 +912,12 @@
 				for (tx = 0;tx < tilewidth-1;tx++, num += 6)
 				{
 					NUint32 b = ty*tilewidth+tx;
-					mesh->element3i[num+0] = b;
-					mesh->element3i[num+1] = b+1;
-					mesh->element3i[num+2] = b+1+tilewidth;
-					mesh->element3i[num+3] = b;
-					mesh->element3i[num+4] = b+1+tilewidth;
-					mesh->element3i[num+5] = b+tilewidth;
+					mesh->data_element3i[num+0] = b;
+					mesh->data_element3i[num+1] = b+1;
+					mesh->data_element3i[num+2] = b+1+tilewidth;
+					mesh->data_element3i[num+3] = b;
+					mesh->data_element3i[num+4] = b+1+tilewidth;
+					mesh->data_element3i[num+5] = b+tilewidth;
 				}
 			}
 			mesh++;
@@ -929,9 +929,9 @@
 	Mem_Free(&pixels);
 	for (i = 0, mesh = meshes;i < nummeshes;i++, mesh++)
 	{
-		Mem_Free(&mesh->vertex3f);
-		Mem_Free(&mesh->texcoord2f);
-		Mem_Free(&mesh->element3i);
+		Mem_Free(&mesh->data_vertex3f);
+		Mem_Free(&mesh->data_texcoord2f);
+		Mem_Free(&mesh->data_element3i);
 	}
 	Mem_Free(&meshes);
 }




More information about the neither-commits mailing list