diff --git a/src/r_segs.cpp b/src/r_segs.cpp index adbd5a3f9..9d97c0a29 100644 --- a/src/r_segs.cpp +++ b/src/r_segs.cpp @@ -1225,7 +1225,7 @@ void wallscan_drawcol1(int x, int y1, int y2, WallscanSampler &sampler, DWORD(*d } else { - if (sampler.uv_max == 0) // power of two + if (sampler.uv_max == 0 || sampler.uv_step == 0) // power of two { int count = y2 - y1; @@ -1300,7 +1300,7 @@ void wallscan_drawcol4(int x, int y1, int y2, WallscanSampler *sampler, void(*dr } else { - if (sampler[0].uv_max == 0) // power of two, no wrap handling needed + if (sampler[0].uv_max == 0 || sampler[0].uv_step == 0) // power of two, no wrap handling needed { int count = y2 - y1; for (int i = 0; i < 4; i++) diff --git a/src/v_draw.cpp b/src/v_draw.cpp index 2397fc48c..6276cb49e 100644 --- a/src/v_draw.cpp +++ b/src/v_draw.cpp @@ -1425,10 +1425,26 @@ void DCanvas::FillSimplePoly(FTexture *tex, FVector2 *points, int npoints, else R_SetSpanColormap(&identitycolormap, 0); R_SetSpanSource(tex); - scalex = double(1u << (32 - ds_xbits)) / scalex; - scaley = double(1u << (32 - ds_ybits)) / scaley; - ds_xstep = xs_RoundToInt(cosrot * scalex); - ds_ystep = xs_RoundToInt(sinrot * scaley); + if (ds_xbits != 0) + { + scalex = double(1u << (32 - ds_xbits)) / scalex; + ds_xstep = xs_RoundToInt(cosrot * scalex); + } + else + { // Texture is one pixel wide. + scalex = 0; + ds_xstep = 0; + } + if (ds_ybits != 0) + { + scaley = double(1u << (32 - ds_ybits)) / scaley; + ds_ystep = xs_RoundToInt(sinrot * scaley); + } + else + { // Texture is one pixel tall. + scaley = 0; + ds_ystep = 0; + } // Travel down the right edge and create an outline of that edge. pt1 = toppt;