diff --git a/docs/rh-log.txt b/docs/rh-log.txt
index b74db371c..352586608 100644
--- a/docs/rh-log.txt
+++ b/docs/rh-log.txt
@@ -1,4 +1,14 @@
January 11, 2008
+- For compatibility with the software renderer, D3DFB::DrawTextureV needs to
+ truncate the coordinates to integers before sending them to the hardware.
+ Otherwise, there can be one pixel gaps compared to the software renderer,
+ because the hardware is rounding to nearest but the software renderer is
+ simply truncating the fractional part of the coordinate. This is the real
+ cause of the gap at the top of the status bar at 1152x864 (and another gap
+ to the left of the status bar at 800x500).
+- Fixed: When D3DFB::DrawTextureV had to clip a tile, it adjusted the
+ texture coordinates erroneously, still using the old calculations from
+ before texture packing was implemented.
- Moved thingdef_codeptr.cpp into thingdef/ with the other thingdef files.
January 11, 2008 (Changes by Graf Zahl)
diff --git a/src/g_shared/shared_sbar.cpp b/src/g_shared/shared_sbar.cpp
index 6913c6562..e586100ed 100644
--- a/src/g_shared/shared_sbar.cpp
+++ b/src/g_shared/shared_sbar.cpp
@@ -213,9 +213,6 @@ void FBaseStatusBar::SetScaled (bool scale)
::ST_Y = Scale(ST_Y - 100, SCREENHEIGHT*3, BaseRatioSizes[4][1]) + SCREENHEIGHT/2
+ (SCREENHEIGHT - SCREENHEIGHT * BaseRatioSizes[4][3] / 48) / 2;
}
- // If this is odd, add one to make it even and close the gap between the
- // status bar and the rest of the screen
- ::ST_Y += (::ST_Y & 1);
Displacement = 0;
}
::ST_X = ST_X;
diff --git a/src/win32/fb_d3d9.cpp b/src/win32/fb_d3d9.cpp
index c394f0eca..9fa13cb0f 100644
--- a/src/win32/fb_d3d9.cpp
+++ b/src/win32/fb_d3d9.cpp
@@ -2160,8 +2160,8 @@ void STACK_ARGS D3DFB::DrawTextureV (FTexture *img, int x, int y, uint32 tags_fi
float v0 = tex->Box->Top;
float u1 = tex->Box->Right;
float v1 = tex->Box->Bottom;
- float uscale = 1.f / (parms.texwidth / u1);
- float vscale = 1.f / (parms.texheight / v1) / yscale;
+ float uscale = 1.f / tex->Box->Owner->Width;
+ float vscale = 1.f / tex->Box->Owner->Height / yscale;
if (y0 < parms.uclip)
{
@@ -2210,10 +2210,14 @@ void STACK_ARGS D3DFB::DrawTextureV (FTexture *img, int x, int y, uint32 tags_fi
}
float yoffs = GatheringWipeScreen ? 0.5f : 0.5f - LBOffset;
- x0 -= 0.5f;
- y0 -= yoffs;
- x1 -= 0.5f;
- y1 -= yoffs;
+
+ // Coordinates are truncated to integers, because that's effectively
+ // what the software renderer does. The hardware will instead round
+ // to nearest, it seems.
+ x0 = floorf(x0) - 0.5f;
+ y0 = floorf(y0) - yoffs;
+ x1 = floorf(x1) - 0.5f;
+ y1 = floorf(y1) - yoffs;
FBVERTEX *vert = &VertexData[VertexPos];
diff --git a/zdoom.vcproj b/zdoom.vcproj
index 3fa390beb..a4cf0d5aa 100644
--- a/zdoom.vcproj
+++ b/zdoom.vcproj
@@ -1,7 +1,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2721,14 +2729,6 @@
GeneratePreprocessedFile="0"
/>
-
-
-
@@ -2751,7 +2751,7 @@
/>
-
-
-
@@ -4806,6 +4796,16 @@
Outputs="$(IntDir)/$(InputName).obj"
/>
+
+
+
@@ -4830,16 +4830,6 @@
Outputs="$(IntDir)\$(InputName).obj"
/>
-
-
-
@@ -4850,6 +4840,16 @@
Outputs="$(IntDir)/$(InputName).obj"
/>
+
+
+
@@ -4874,16 +4874,6 @@
Outputs="$(IntDir)\$(InputName).obj"
/>
-
-
-
@@ -4894,6 +4884,16 @@
Outputs="$(IntDir)\$(InputName).obj"
/>
+
+
+
@@ -4918,16 +4918,6 @@
Outputs="$(IntDir)\$(InputName).obj"
/>
-
-
-
@@ -4938,6 +4928,16 @@
Outputs="$(IntDir)\$(InputName).obj"
/>
+
+
+
@@ -4962,16 +4962,6 @@
Outputs="$(IntDir)\$(InputName).obj"
/>
-
-
-
@@ -4982,6 +4972,16 @@
Outputs="$(IntDir)\$(InputName).obj"
/>
+
+
+
@@ -5069,7 +5069,7 @@
/>
+
+
+
@@ -5408,14 +5416,6 @@
Outputs="$(IntDir)\$(InputName).obj"
/>
-
-
-
-
-
-
@@ -5650,6 +5642,14 @@
GeneratePreprocessedFile="0"
/>
+
+
+
@@ -5671,7 +5671,7 @@
/>
+
+
+
@@ -9176,14 +9184,6 @@
AdditionalIncludeDirectories="src\win32;$(NoInherit)"
/>
-
-
-
@@ -9358,7 +9358,7 @@
/>