summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/hud.cpp27
1 files changed, 24 insertions, 3 deletions
diff --git a/src/client/hud.cpp b/src/client/hud.cpp
index cb58fb500..51746f788 100644
--- a/src/client/hud.cpp
+++ b/src/client/hud.cpp
@@ -649,10 +649,31 @@ void drawItemStack(video::IVideoDriver *driver,
core::rect<s32> oldViewPort = driver->getViewPort();
core::matrix4 oldProjMat = driver->getTransform(video::ETS_PROJECTION);
core::matrix4 oldViewMat = driver->getTransform(video::ETS_VIEW);
+ core::rect<s32> viewrect = rect;
+ if (clip)
+ viewrect.clipAgainst(*clip);
+
core::matrix4 ProjMatrix;
- ProjMatrix.buildProjectionMatrixOrthoLH(2, 2, -1, 100);
+ ProjMatrix.buildProjectionMatrixOrthoLH(2.0f, 2.0f, -1.0f, 100.0f);
+
+ core::matrix4 ViewMatrix;
+ ViewMatrix.buildProjectionMatrixOrthoLH(
+ 2.0f * viewrect.getWidth() / rect.getWidth(),
+ 2.0f * viewrect.getHeight() / rect.getHeight(),
+ -1.0f,
+ 100.0f);
+ ViewMatrix.setTranslation(core::vector3df(
+ 1.0f * (rect.LowerRightCorner.X + rect.UpperLeftCorner.X -
+ viewrect.LowerRightCorner.X - viewrect.UpperLeftCorner.X) /
+ viewrect.getWidth(),
+ 1.0f * (viewrect.LowerRightCorner.Y + viewrect.UpperLeftCorner.Y -
+ rect.LowerRightCorner.Y - rect.UpperLeftCorner.Y) /
+ viewrect.getHeight(),
+ 0.0f));
+
driver->setTransform(video::ETS_PROJECTION, ProjMatrix);
- driver->setTransform(video::ETS_VIEW, ProjMatrix);
+ driver->setTransform(video::ETS_VIEW, ViewMatrix);
+
core::matrix4 matrix;
matrix.makeIdentity();
@@ -662,7 +683,7 @@ void drawItemStack(video::IVideoDriver *driver,
}
driver->setTransform(video::ETS_WORLD, matrix);
- driver->setViewPort(rect);
+ driver->setViewPort(viewrect);
video::SColor basecolor =
client->idef()->getItemstackColor(item, client);