- Fixed: Revision 3711 broke the drawing of all but the first post in each voxel column.

SVN r3724 (trunk)
This commit is contained in:
Randy Heit 2012-07-01 22:18:59 +00:00
parent b6fb733a81
commit 2d8b43734b

View file

@ -2453,9 +2453,9 @@ void R_DrawVoxel(fixed_t dasprx, fixed_t daspry, fixed_t dasprz, angle_t daspran
else yinc = (((1 << 24) - 1) / (z2 - z1)) * zleng >> 8; else yinc = (((1 << 24) - 1) / (z2 - z1)) * zleng >> 8;
} }
// [RH] Clip each column separately, not just by the first one. // [RH] Clip each column separately, not just by the first one.
for (int stripwidth = MIN<int>(countof(z1a), rx - lx); for (int stripwidth = MIN<int>(countof(z1a), rx - lx), lxt = lx;
lx < rx; lxt < rx;
(lx += countof(z1a)), stripwidth = MIN<int>(countof(z1a), rx - lx)) (lxt += countof(z1a)), stripwidth = MIN<int>(countof(z1a), rx - lxt))
{ {
// Calculate top and bottom pixels locations // Calculate top and bottom pixels locations
for (int xxx = 0; xxx < stripwidth; ++xxx) for (int xxx = 0; xxx < stripwidth; ++xxx)
@ -2463,14 +2463,14 @@ void R_DrawVoxel(fixed_t dasprx, fixed_t daspry, fixed_t dasprz, angle_t daspran
if (zleng == 1) if (zleng == 1)
{ {
yplc[xxx] = 0; yplc[xxx] = 0;
z1a[xxx] = MAX<int>(z1, daumost[lx + xxx]); z1a[xxx] = MAX<int>(z1, daumost[lxt + xxx]);
} }
else else
{ {
if (z1 < daumost[lx + xxx]) if (z1 < daumost[lxt + xxx])
{ {
yplc[xxx] = yinc * (daumost[lx + xxx] - z1); yplc[xxx] = yinc * (daumost[lxt + xxx] - z1);
z1a[xxx] = daumost[lx + xxx]; z1a[xxx] = daumost[lxt + xxx];
} }
else else
{ {
@ -2478,7 +2478,7 @@ void R_DrawVoxel(fixed_t dasprx, fixed_t daspry, fixed_t dasprz, angle_t daspran
z1a[xxx] = z1; z1a[xxx] = z1;
} }
} }
z2a[xxx] = MIN<int>(z2, dadmost[lx + xxx]); z2a[xxx] = MIN<int>(z2, dadmost[lxt + xxx]);
} }
// Find top and bottom pixels that match and draw them as one strip // Find top and bottom pixels that match and draw them as one strip
for (int xxl = 0, xxr; xxl < stripwidth; ) for (int xxl = 0, xxr; xxl < stripwidth; )
@ -2500,7 +2500,7 @@ void R_DrawVoxel(fixed_t dasprx, fixed_t daspry, fixed_t dasprz, angle_t daspran
if (!(flags & DVF_OFFSCREEN)) if (!(flags & DVF_OFFSCREEN))
{ {
// Draw directly to the screen. // Draw directly to the screen.
R_DrawSlab(xxr - xxl, yplc[xxl], z2 - z1, yinc, col, ylookup[z1] + lx + xxl + dc_destorg); R_DrawSlab(xxr - xxl, yplc[xxl], z2 - z1, yinc, col, ylookup[z1] + lxt + xxl + dc_destorg);
} }
else else
{ {
@ -2511,10 +2511,10 @@ void R_DrawVoxel(fixed_t dasprx, fixed_t daspry, fixed_t dasprz, angle_t daspran
dc_iscale = yinc; dc_iscale = yinc;
for (int x = xxl; x < xxr; ++x) for (int x = xxl; x < xxr; ++x)
{ {
OffscreenCoverageBuffer->InsertSpan(lx + x, z1, z1 + z2); OffscreenCoverageBuffer->InsertSpan(lxt + x, z1, z1 + z2);
if (!(flags & DVF_SPANSONLY)) if (!(flags & DVF_SPANSONLY))
{ {
dc_x = lx + x; dc_x = lxt + x;
rt_initcols(OffscreenColorBuffer + (dc_x & ~3) * OffscreenBufferHeight); rt_initcols(OffscreenColorBuffer + (dc_x & ~3) * OffscreenBufferHeight);
dc_source = col; dc_source = col;
dc_texturefrac = yplc[xxl]; dc_texturefrac = yplc[xxl];