fix a bug in the vertex list generation which resulted in empty, unlinked vertices in the list. also added a few variables to savestate

This commit is contained in:
zeromus 2009-02-03 04:51:18 +00:00
parent d4604c7d81
commit 0d4cf9fe49
1 changed files with 28 additions and 8 deletions

View File

@ -192,6 +192,8 @@ struct tmpVertInfo {
int count; int count;
//indices to the main vert list //indices to the main vert list
int map[4]; int map[4];
//indicates that the first poly in a list has been completed
BOOL first;
} tempVertInfo; } tempVertInfo;
@ -553,6 +555,7 @@ void gfx3d_glBegin(unsigned long v)
vtxFormat = v&0x03; vtxFormat = v&0x03;
triStripToggle = 0; triStripToggle = 0;
tempVertInfo.count = 0; tempVertInfo.count = 0;
tempVertInfo.first = true;
} }
void gfx3d_glEnd(void) void gfx3d_glEnd(void)
@ -608,9 +611,16 @@ static void SetVertex()
//TODO - culling should be done here. //TODO - culling should be done here.
//TODO - viewport transform //TODO - viewport transform
int continuation = 0;
if(vtxFormat==2 && !tempVertInfo.first)
continuation = 2;
else if(vtxFormat==3 && !tempVertInfo.first)
continuation = 2;
//record the vertex //record the vertex
//VERT &vert = tempVertList.list[tempVertList.count]; //VERT &vert = tempVertList.list[tempVertList.count];
VERT &vert = vertlist->list[vertlist->count + tempVertInfo.count]; VERT &vert = vertlist->list[vertlist->count + tempVertInfo.count - continuation];
vert.texcoord[0] = last_s; vert.texcoord[0] = last_s;
vert.texcoord[1] = last_t; vert.texcoord[1] = last_t;
@ -623,7 +633,7 @@ static void SetVertex()
vert.color[2] = colorRGB[2]; vert.color[2] = colorRGB[2];
vert.color[3] = colorRGB[3]; vert.color[3] = colorRGB[3];
vert.depth = 0x7FFF * coordTransformed[2]; vert.depth = 0x7FFF * coordTransformed[2];
tempVertInfo.map[tempVertInfo.count] = vertlist->count + tempVertInfo.count; tempVertInfo.map[tempVertInfo.count] = vertlist->count + tempVertInfo.count - continuation;
tempVertInfo.count++; tempVertInfo.count++;
//possibly complete a polygon //possibly complete a polygon
@ -664,13 +674,17 @@ static void SetVertex()
polylist->list[polylist->count].type = 3; polylist->list[polylist->count].type = 3;
if(triStripToggle) if(triStripToggle)
tempVertInfo.map[1] = vertlist->count+2; tempVertInfo.map[1] = vertlist->count+2-continuation;
else else
tempVertInfo.map[0] = vertlist->count+2; tempVertInfo.map[0] = vertlist->count+2-continuation;
vertlist->count+=3; if(tempVertInfo.first)
vertlist->count+=3;
else
vertlist->count+=1;
triStripToggle ^= 1; triStripToggle ^= 1;
tempVertInfo.first = false;
tempVertInfo.count = 2; tempVertInfo.count = 2;
break; break;
case 3: //GL_QUAD_STRIP case 3: //GL_QUAD_STRIP
@ -682,9 +696,12 @@ static void SetVertex()
SUBMITVERTEX(2,3); SUBMITVERTEX(2,3);
SUBMITVERTEX(3,2); SUBMITVERTEX(3,2);
polylist->list[polylist->count].type = 4; polylist->list[polylist->count].type = 4;
tempVertInfo.map[0] = vertlist->count+2; tempVertInfo.map[0] = vertlist->count+2-continuation;
tempVertInfo.map[1] = vertlist->count+3; tempVertInfo.map[1] = vertlist->count+3-continuation;
vertlist->count+=4; if(tempVertInfo.first)
vertlist->count+=4;
else vertlist->count+=2;
tempVertInfo.first = false;
tempVertInfo.count = 2; tempVertInfo.count = 2;
break; break;
} }
@ -2111,6 +2128,9 @@ SFORMAT SF_GFX3D[]={
{ "GMSP", 2, 1, &dsSpecular}, { "GMSP", 2, 1, &dsSpecular},
{ "GMEM", 2, 1, &dsEmission}, { "GMEM", 2, 1, &dsEmission},
{ "GTST", 4, 1, &triStripToggle}, { "GTST", 4, 1, &triStripToggle},
{ "GTVC", 4, 1, &tempVertInfo.count},
{ "GTVM", 4, 4, &tempVertInfo.map[0]},
{ "GTVF", 4, 1, &tempVertInfo.first},
{ "GLTW", 4, 1, &listTwiddle}, { "GLTW", 4, 1, &listTwiddle},
{ "GFLP", 4, 1, &flushPending}, { "GFLP", 4, 1, &flushPending},
{ "GDRP", 4, 1, &drawPending}, { "GDRP", 4, 1, &drawPending},