diff --git a/osu.Framework/Graphics/Rendering/Renderer.cs b/osu.Framework/Graphics/Rendering/Renderer.cs index cf8a4d43ea..aa9ae1994a 100644 --- a/osu.Framework/Graphics/Rendering/Renderer.cs +++ b/osu.Framework/Graphics/Rendering/Renderer.cs @@ -793,6 +793,8 @@ public bool BindTexture(Texture texture, int unit, WrapMode? wrapModeS, WrapMode if (texture is TextureWhitePixel && lastBoundTextureIsAtlas[unit]) { + setWrapMode(wrapModeS ?? texture.WrapModeS, wrapModeT ?? texture.WrapModeT); + // We can use the special white space from any atlas texture. return true; } @@ -823,26 +825,35 @@ public bool BindTexture(INativeTexture texture, int unit = 0, WrapMode wrapModeS if (!SetTextureImplementation(texture, unit)) return false; + setWrapMode(wrapModeS, wrapModeT); + + lastBoundTexture[unit] = texture; + lastBoundTextureIsAtlas[unit] = false; + lastActiveTextureUnit = unit; + + FrameStatistics.Increment(StatisticsCounterType.TextureBinds); + texture.TotalBindCount++; + + return true; + } + + private void setWrapMode(WrapMode wrapModeS, WrapMode wrapModeT) + { if (wrapModeS != CurrentWrapModeS) { + FlushCurrentBatch(FlushBatchSource.BindTexture); + CurrentWrapModeS = wrapModeS; globalUniformsChanged = true; } if (wrapModeT != CurrentWrapModeT) { + FlushCurrentBatch(FlushBatchSource.BindTexture); + CurrentWrapModeT = wrapModeT; globalUniformsChanged = true; } - - lastBoundTexture[unit] = texture; - lastBoundTextureIsAtlas[unit] = false; - lastActiveTextureUnit = unit; - - FrameStatistics.Increment(StatisticsCounterType.TextureBinds); - texture.TotalBindCount++; - - return true; } ///