From 8f3f87774408742c635163be3a8b1a52534edc1a Mon Sep 17 00:00:00 2001 From: past-due <30942300+past-due@users.noreply.github.com> Date: Thu, 31 Aug 2023 17:25:35 -0400 Subject: [PATCH] iV_DrawImageTint: Use floats for x,y --- lib/ivis_opengl/pieblitfunc.cpp | 27 ++++++++++++++++++++++++--- lib/ivis_opengl/pieblitfunc.h | 2 +- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/lib/ivis_opengl/pieblitfunc.cpp b/lib/ivis_opengl/pieblitfunc.cpp index 0241c3bfb25..714f3ebe73c 100644 --- a/lib/ivis_opengl/pieblitfunc.cpp +++ b/lib/ivis_opengl/pieblitfunc.cpp @@ -613,7 +613,7 @@ static inline void pie_DrawImageTemplate(IMAGEFILE *imageFile, int id, Vector2i glm::mat4 mvp = modelViewProjection * glm::translate(glm::vec3((float)dest->x, (float)dest->y, 0.f)); - iv_DrawImageImpl(pie_Texture(texPage), Vector2i(0, 0), Vector2i(dest->w, dest->h), Vector2f(tu, tv), Vector2f(su, sv), colour, mvp); + iv_DrawImageImpl(pie_Texture(texPage), Vector2i(0, 0), Vector2f(dest->w, dest->h), Vector2f(tu, tv), Vector2f(su, sv), colour, mvp); } static void pie_DrawImage(IMAGEFILE *imageFile, int id, Vector2i size, const PIERECT *dest, PIELIGHT colour, const glm::mat4 &modelViewProjection, Vector2i textureInset = Vector2i(0, 0)) @@ -685,6 +685,22 @@ static Vector2i makePieImage(IMAGEFILE *imageFile, unsigned id, PIERECT *dest, i return pieImage; } +static Vector2i makePieImagef(IMAGEFILE *imageFile, unsigned id, PIERECT *dest, float x, float y) +{ + AtlasImageDef const &image = imageFile->imageDefs[id]; + Vector2i pieImage; + pieImage.x = image.Width; + pieImage.y = image.Height; + if (dest != nullptr) + { + dest->x = x + static_cast(image.XOffset); + dest->y = y + static_cast(image.YOffset); + dest->w = static_cast(image.Width); + dest->h = static_cast(image.Height); + } + return pieImage; +} + void iV_DrawImage2(const WzString &filename, float x, float y, float width, float height) { if (filename.isEmpty()) { return; } @@ -733,7 +749,7 @@ void iV_DrawImage(IMAGEFILE *ImageFile, UWORD ID, int x, int y, const glm::mat4 } } -void iV_DrawImageTint(IMAGEFILE *ImageFile, UWORD ID, int x, int y, PIELIGHT color, const glm::mat4 &modelViewProjection, BatchedImageDrawRequests* pBatchedRequests) +void iV_DrawImageTint(IMAGEFILE *ImageFile, UWORD ID, float x, float y, PIELIGHT color, optional size, const glm::mat4 &modelViewProjection, BatchedImageDrawRequests* pBatchedRequests) { if (!assertValidImage(ImageFile, ID)) { @@ -741,7 +757,12 @@ void iV_DrawImageTint(IMAGEFILE *ImageFile, UWORD ID, int x, int y, PIELIGHT col } PIERECT dest; - Vector2i pieImage = makePieImage(ImageFile, ID, &dest, x, y); + Vector2i pieImage = makePieImagef(ImageFile, ID, &dest, x, y); + if (size.has_value()) + { + dest.w = size.value().x; + dest.h = size.value().y; + } if (pBatchedRequests == nullptr) { diff --git a/lib/ivis_opengl/pieblitfunc.h b/lib/ivis_opengl/pieblitfunc.h index ea0f168a432..1354e792941 100644 --- a/lib/ivis_opengl/pieblitfunc.h +++ b/lib/ivis_opengl/pieblitfunc.h @@ -276,7 +276,7 @@ void iV_DrawImageAnisotropic(gfx_api::texture& TextureID, Vector2i Position, Vec void iV_DrawImageText(gfx_api::texture& TextureID, Vector2f Position, Vector2f offset, Vector2f size, float angle, PIELIGHT colour); void iV_DrawImageTextClipped(gfx_api::texture& TextureID, Vector2i textureSize, Vector2f Position, Vector2f offset, Vector2f size, float angle, PIELIGHT colour, WzRect clippingRect); void iV_DrawImage(IMAGEFILE *ImageFile, UWORD ID, int x, int y, const glm::mat4 &modelViewProjection = defaultProjectionMatrix(), BatchedImageDrawRequests* pBatchedRequests = nullptr, uint8_t alpha = 255); -void iV_DrawImageTint(IMAGEFILE *ImageFile, UWORD ID, int x, int y, PIELIGHT color, const glm::mat4 &modelViewProjection = defaultProjectionMatrix(), BatchedImageDrawRequests* pBatchedRequests = nullptr); +void iV_DrawImageTint(IMAGEFILE *ImageFile, UWORD ID, float x, float y, PIELIGHT color, optional size = nullopt, const glm::mat4 &modelViewProjection = defaultProjectionMatrix(), BatchedImageDrawRequests* pBatchedRequests = nullptr); void iV_DrawImageFileAnisotropic(IMAGEFILE *ImageFile, UWORD ID, int x, int y, Vector2f size, const glm::mat4 &modelViewProjection = defaultProjectionMatrix(), uint8_t alpha = 255); void iV_DrawImage2(const WzString &filename, float x, float y, float width = -0.0f, float height = -0.0f); void iV_DrawImage2(const AtlasImageDef *image, float x, float y, float width = -0.0f, float height = -0.0f);