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