From 22b3d84ee033eb7b94e63350e5eb3abe5b4bf07a Mon Sep 17 00:00:00 2001 From: "@clasher113" Date: Thu, 13 Jun 2024 17:34:36 +0300 Subject: [PATCH] texture animation optimization --- src/assets/assetload_funcs.cpp | 8 +++++--- src/graphics/core/TextureAnimation.cpp | 15 --------------- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/src/assets/assetload_funcs.cpp b/src/assets/assetload_funcs.cpp index b30bd6da..88ad1335 100644 --- a/src/assets/assetload_funcs.cpp +++ b/src/assets/assetload_funcs.cpp @@ -235,8 +235,10 @@ static TextureAnimation create_animation( uint srcWidth = srcTex->getWidth(); uint srcHeight = srcTex->getHeight(); - frame.dstPos = glm::ivec2(region.u1 * dstWidth, region.v1 * dstHeight); - frame.size = glm::ivec2(region.u2 * dstWidth, region.v2 * dstHeight) - frame.dstPos; + const int extension = 2; + + frame.dstPos = glm::ivec2(region.u1 * dstWidth, region.v1 * dstHeight) - extension; + frame.size = glm::ivec2(region.u2 * dstWidth, region.v2 * dstHeight) - frame.dstPos + extension; for (const auto& elem : frameList) { if (!srcAtlas->has(elem.first)) { @@ -247,7 +249,7 @@ static TextureAnimation create_animation( if (elem.second > 0) { frame.duration = static_cast(elem.second) / 1000.0f; } - frame.srcPos = glm::ivec2(region.u1 * srcWidth, srcHeight - region.v2 * srcHeight); + frame.srcPos = glm::ivec2(region.u1 * srcWidth, srcHeight - region.v2 * srcHeight) - extension; animation.addFrame(frame); } return animation; diff --git a/src/graphics/core/TextureAnimation.cpp b/src/graphics/core/TextureAnimation.cpp index f6cbbef2..f3d0c2a2 100644 --- a/src/graphics/core/TextureAnimation.cpp +++ b/src/graphics/core/TextureAnimation.cpp @@ -52,21 +52,6 @@ void TextureAnimator::update(float delta) { float srcPosY = elem.srcTexture->getHeight() - frame.size.y - frame.srcPos.y; // vertical flip - // Extensions - const int ext = 2; - for (int y = -1; y <= 1; y++) { - for (int x = -1; x <= 1; x++) { - if (x == 0 && y == 0) - continue; - glBlitFramebuffer( - frame.srcPos.x, srcPosY, frame.srcPos.x + frame.size.x, srcPosY + frame.size.y, - frame.dstPos.x+x*ext, frame.dstPos.y+y*ext, - frame.dstPos.x + frame.size.x+x*ext, frame.dstPos.y + frame.size.y+y*ext, - GL_COLOR_BUFFER_BIT, GL_NEAREST - ); - } - } - glBlitFramebuffer( frame.srcPos.x, srcPosY, frame.srcPos.x + frame.size.x,