From 45c1978a85b4e3578389b3d6759401ff2bac9d2d Mon Sep 17 00:00:00 2001 From: fallenoak Date: Sat, 4 Mar 2023 12:20:15 -0600 Subject: [PATCH] feat(gx): handle changes to texture wrap settings --- src/gx/CGxDevice.cpp | 12 +++++++++++- src/gx/Types.hpp | 4 ++-- src/model/CM2SceneRender.cpp | 5 +++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/gx/CGxDevice.cpp b/src/gx/CGxDevice.cpp index e98a89e..0c9c11c 100644 --- a/src/gx/CGxDevice.cpp +++ b/src/gx/CGxDevice.cpp @@ -930,7 +930,17 @@ void CGxDevice::TexMarkForUpdate(CGxTex* texId, const CiRect& updateRect, int32_ } void CGxDevice::TexSetWrap(CGxTex* texId, EGxTexWrapMode wrapU, EGxTexWrapMode wrapV) { - // TODO + if (texId->m_flags.m_wrapU == wrapU && texId->m_flags.m_wrapV == wrapV) { + return; + } + + texId->m_flags.m_wrapU = wrapU; + texId->m_flags.m_wrapV = wrapV; + texId->m_needsFlagUpdate = 1; + + for (int32_t rs = GxRs_Texture0; rs <= GxRs_Texture15; rs++) { + this->IRsForceUpdate(static_cast(rs)); + } } void CGxDevice::ValidateDraw(CGxBatch* batch, int32_t count) { diff --git a/src/gx/Types.hpp b/src/gx/Types.hpp index d0b0895..d9d3ed9 100644 --- a/src/gx/Types.hpp +++ b/src/gx/Types.hpp @@ -283,8 +283,8 @@ enum EGxTexTarget { }; enum EGxTexWrapMode { - GxTex_WrapMode0 = 0, - GxTex_WrapMode1 = 1 + GxTex_Clamp = 0, + GxTex_Wrap = 1 }; enum EGxXform { diff --git a/src/model/CM2SceneRender.cpp b/src/model/CM2SceneRender.cpp index a94b8f2..8dba022 100644 --- a/src/model/CM2SceneRender.cpp +++ b/src/model/CM2SceneRender.cpp @@ -516,8 +516,9 @@ void CM2SceneRender::SetupTextures() { if (texture) { uint16_t textureFlags = this->m_data->textures[textureIndex].flags; - EGxTexWrapMode wrapU = static_cast(textureFlags & 0x1); - EGxTexWrapMode wrapV = static_cast(textureFlags & 0x2); + EGxTexWrapMode wrapU = textureFlags & 0x1 ? GxTex_Wrap : GxTex_Clamp; + EGxTexWrapMode wrapV = textureFlags & 0x2 ? GxTex_Wrap : GxTex_Clamp; + GxTexSetWrap(texture, wrapU, wrapV); }