From aa535532ede7ff6efe510f4f5bdacf92706c796d Mon Sep 17 00:00:00 2001 From: staphen Date: Sun, 12 Nov 2023 00:25:31 -0500 Subject: [PATCH] Overlap texture data to fix the seam --- Source/engine/dx.cpp | 9 +++++---- Source/storm/storm_svid.cpp | 16 ++++++++-------- Source/utils/display.cpp | 8 ++++---- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/Source/engine/dx.cpp b/Source/engine/dx.cpp index 9a0555e6a..395b36c1d 100644 --- a/Source/engine/dx.cpp +++ b/Source/engine/dx.cpp @@ -231,7 +231,7 @@ void RenderPresent() if (SDL_UpdateTexture(left.get(), nullptr, surface->pixels, surface->pitch) <= -1) { // pitch is 2560 ErrSdl(); } - if (SDL_UpdateTexture(right.get(), nullptr, reinterpret_cast(surface->pixels) + surface->pitch / 2, surface->pitch) <= -1) { // pitch is 2560 + if (SDL_UpdateTexture(right.get(), nullptr, reinterpret_cast(surface->pixels) + surface->pitch - (surface->pitch / gnScreenWidth) * 512, surface->pitch) <= -1) { // pitch is 2560 ErrSdl(); } @@ -244,11 +244,12 @@ void RenderPresent() ErrSdl(); } SDL_Rect leftRect = MakeSdlRect(0, 0, gnScreenWidth / 2, gnScreenHeight); - if (SDL_RenderCopy(renderer, left.get(), nullptr, &leftRect) <= -1) { + if (SDL_RenderCopy(renderer, left.get(), &leftRect, &leftRect) <= -1) { ErrSdl(); } - SDL_Rect rightRect = MakeSdlRect(gnScreenWidth / 2, 0, gnScreenWidth / 2, gnScreenHeight); - if (SDL_RenderCopy(renderer, right.get(), nullptr, &rightRect) <= -1) { + SDL_Rect rightSrcRect = MakeSdlRect(512 - gnScreenWidth / 2 - gnScreenWidth % 2 - 1, 0, gnScreenWidth / 2 + gnScreenWidth % 2, gnScreenHeight); + SDL_Rect rightDstRect = MakeSdlRect(gnScreenWidth / 2, 0, gnScreenWidth / 2 + gnScreenWidth % 2, gnScreenHeight); + if (SDL_RenderCopy(renderer, right.get(), &rightSrcRect, &rightDstRect) <= -1) { ErrSdl(); } if (ControlMode == ControlTypes::VirtualGamepad) { diff --git a/Source/storm/storm_svid.cpp b/Source/storm/storm_svid.cpp index 4a4bd6e5a..cbb86d627 100644 --- a/Source/storm/storm_svid.cpp +++ b/Source/storm/storm_svid.cpp @@ -286,11 +286,11 @@ bool SVidPlayBegin(const char *filename, int flags) int renderWidth = static_cast(SVidWidth); int renderHeight = static_cast(SVidHeight); #ifdef PSP - left = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_ABGR1555, SDL_TEXTUREACCESS_STREAMING, renderWidth / 2, renderHeight); - right = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_ABGR1555, SDL_TEXTUREACCESS_STREAMING, renderWidth / 2, renderHeight); + left = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_ABGR1555, SDL_TEXTUREACCESS_STREAMING, 512, renderHeight); + right = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_ABGR1555, SDL_TEXTUREACCESS_STREAMING, 512, renderHeight); #else - left = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, renderWidth / 2, renderHeight); - right = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, renderWidth / 2, renderHeight); + left = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, 512, renderHeight); + right = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, 512, renderHeight); #endif if (SDL_RenderSetLogicalSize(renderer, renderWidth, renderHeight) <= -1) { ErrSdl(); @@ -386,11 +386,11 @@ void SVidPlayEnd() #ifndef USE_SDL1 if (renderer != nullptr) { #ifdef PSP - left = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_ABGR1555, SDL_TEXTUREACCESS_STREAMING, gnScreenWidth / 2, gnScreenHeight); - right = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_ABGR1555, SDL_TEXTUREACCESS_STREAMING, gnScreenWidth / 2, gnScreenHeight); + left = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_ABGR1555, SDL_TEXTUREACCESS_STREAMING, 512, gnScreenHeight); + right = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_ABGR1555, SDL_TEXTUREACCESS_STREAMING, 512, gnScreenHeight); #else - left = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, gnScreenWidth / 2, gnScreenHeight); - right = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, gnScreenWidth / 2, gnScreenHeight); + left = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, 512, gnScreenHeight); + right = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, 512, gnScreenHeight); #endif if (renderer != nullptr && SDL_RenderSetLogicalSize(renderer, gnScreenWidth, gnScreenHeight) <= -1) { ErrSdl(); diff --git a/Source/utils/display.cpp b/Source/utils/display.cpp index 8098f513a..57c4a9e1d 100644 --- a/Source/utils/display.cpp +++ b/Source/utils/display.cpp @@ -390,11 +390,11 @@ void ReinitializeTexture() SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, quality.c_str()); #ifdef PSP - left = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_ABGR1555, SDL_TEXTUREACCESS_STREAMING, gnScreenWidth / 2, gnScreenHeight); - right = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_ABGR1555, SDL_TEXTUREACCESS_STREAMING, gnScreenWidth / 2, gnScreenHeight); + left = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_ABGR1555, SDL_TEXTUREACCESS_STREAMING, 512, gnScreenHeight); + right = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_ABGR1555, SDL_TEXTUREACCESS_STREAMING, 512, gnScreenHeight); #else - left = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, gnScreenWidth / 2, gnScreenHeight); - right = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, gnScreenWidth / 2, gnScreenHeight); + left = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, 512, gnScreenHeight); + right = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, 512, gnScreenHeight); #endif }