1
0
mirror of https://github.com/The-Powder-Toy/The-Powder-Toy.git synced 2025-04-08 00:14:00 +02:00

Crash fix for wall drawing when OpenGL is enabled.

This commit is contained in:
Simon Robertshaw 2016-07-17 21:33:54 +01:00
parent 5b525852b4
commit 3b106b7c22

@ -63,7 +63,6 @@ void Renderer::RenderBegin()
draw_grav();
DrawWalls();
render_parts();
if(display_mode & DISPLAY_PERS)
{
int i,r,g,b;
@ -751,14 +750,14 @@ void Renderer::DrawWalls()
for (int j = 0; j < CELL; j++)
for (int i =0; i < CELL; i++)
if (i&j&1)
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = pc;
vid[(y*CELL+j)*(VIDXRES)+(x*CELL+i)] = pc;
}
else
{
for (int j = 0; j < CELL; j++)
for (int i = 0; i < CELL; i++)
if (!(i&j&1))
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = pc;
vid[(y*CELL+j)*(VIDXRES)+(x*CELL+i)] = pc;
}
}
else if (wt == WL_WALLELEC)
@ -767,9 +766,9 @@ void Renderer::DrawWalls()
for (int i = 0; i < CELL; i++)
{
if (!((y*CELL+j)%2) && !((x*CELL+i)%2))
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = pc;
vid[(y*CELL+j)*(VIDXRES)+(x*CELL+i)] = pc;
else
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x808080);
vid[(y*CELL+j)*(VIDXRES)+(x*CELL+i)] = PIXPACK(0x808080);
}
}
else if (wt == WL_EHOLE)
@ -778,16 +777,16 @@ void Renderer::DrawWalls()
{
for (int j = 0; j < CELL; j++)
for (int i = 0; i < CELL; i++)
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x242424);
vid[(y*CELL+j)*(VIDXRES)+(x*CELL+i)] = PIXPACK(0x242424);
for (int j = 0; j < CELL; j += 2)
for (int i = 0; i < CELL; i += 2)
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x000000);
vid[(y*CELL+j)*(VIDXRES)+(x*CELL+i)] = PIXPACK(0x000000);
}
else
{
for (int j = 0; j < CELL; j += 2)
for (int i =0; i < CELL; i += 2)
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x242424);
vid[(y*CELL+j)*(VIDXRES)+(x*CELL+i)] = PIXPACK(0x242424);
}
}
else if (wt == WL_STREAM)
@ -837,27 +836,27 @@ void Renderer::DrawWalls()
case 1:
for (int j = 0; j < CELL; j += 2)
for (int i = (j>>1)&1; i < CELL; i += 2)
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = pc;
vid[(y*CELL+j)*(VIDXRES)+(x*CELL+i)] = pc;
break;
case 2:
for (int j = 0; j < CELL; j += 2)
for (int i = 0; i < CELL; i += 2)
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = pc;
vid[(y*CELL+j)*(VIDXRES)+(x*CELL+i)] = pc;
break;
case 3:
for (int j = 0; j < CELL; j++)
for (int i = 0; i < CELL; i++)
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = pc;
vid[(y*CELL+j)*(VIDXRES)+(x*CELL+i)] = pc;
break;
case 4:
for (int j = 0; j < CELL; j++)
for (int i = 0; i < CELL; i++)
if (i == j)
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = pc;
vid[(y*CELL+j)*(VIDXRES)+(x*CELL+i)] = pc;
else if (i == j+1 || (i == 0 && j == CELL-1))
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = gc;
vid[(y*CELL+j)*(VIDXRES)+(x*CELL+i)] = gc;
else
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x202020);
vid[(y*CELL+j)*(VIDXRES)+(x*CELL+i)] = PIXPACK(0x202020);
break;
}
@ -905,7 +904,7 @@ void Renderer::DrawWalls()
for (int j = 0; j < CELL; j += 2)
for (int i = 0; i < CELL; i += 2)
// looks bad if drawing black blobs
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x000000);
vid[(y*CELL+j)*(VIDXRES)+(x*CELL+i)] = PIXPACK(0x000000);
}
else
{
@ -936,10 +935,10 @@ void Renderer::DrawWalls()
if (i == j)
drawblob((x*CELL+i), (y*CELL+j), PIXR(pc), PIXG(pc), PIXB(pc));
else if (i == j+1 || (i == 0 && j == CELL-1))
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = gc;
vid[(y*CELL+j)*(VIDXRES)+(x*CELL+i)] = gc;
else
// looks bad if drawing black blobs
vid[(y*CELL+j)*(XRES+BARSIZE)+(x*CELL+i)] = PIXPACK(0x202020);
vid[(y*CELL+j)*(VIDXRES)+(x*CELL+i)] = PIXPACK(0x202020);
break;
}
}