From 538674da51633e1251fbae4a9ba42986d0a8a8f8 Mon Sep 17 00:00:00 2001 From: Francisco Zurita Date: Sat, 11 Nov 2017 23:25:40 -0500 Subject: [PATCH] Fix Pokemon Snap border flicker This flicker happens while zooming in to take a picture while RDRAM to color buffer and color buffer to RDRAM are both enabled. --- src/BufferCopy/ColorBufferToRDRAM.cpp | 22 ++++++++++++++++++---- src/FrameBufferInfo.h | 6 +----- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/BufferCopy/ColorBufferToRDRAM.cpp b/src/BufferCopy/ColorBufferToRDRAM.cpp index 4d6a2962..5aa389ef 100644 --- a/src/BufferCopy/ColorBufferToRDRAM.cpp +++ b/src/BufferCopy/ColorBufferToRDRAM.cpp @@ -5,6 +5,7 @@ #include "WriteToRDRAM.h" #include +#include #include #include #include @@ -265,16 +266,29 @@ void ColorBufferToRDRAM::_copy(u32 _startAddress, u32 _endAddress, bool _sync) if (m_pCurFrameBuffer->m_size == G_IM_SIZ_32b) { u32 *ptr_src = (u32*)pPixels; u32 *ptr_dst = (u32*)(RDRAM + _startAddress); + + if (!FBInfo::fbInfo.isSupported() && config.frameBufferEmulation.copyFromRDRAM != 0) { + memset(ptr_dst, 0, numPixels * 4); + } + writeToRdram(ptr_src, ptr_dst, &ColorBufferToRDRAM::_RGBAtoRGBA32, 0, 0, width, height, numPixels, _startAddress, m_pCurFrameBuffer->m_startAddress, m_pCurFrameBuffer->m_size); - } - else if (m_pCurFrameBuffer->m_size == G_IM_SIZ_16b) { + } else if (m_pCurFrameBuffer->m_size == G_IM_SIZ_16b) { u32 *ptr_src = (u32*)pPixels; u16 *ptr_dst = (u16*)(RDRAM + _startAddress); + + if (!FBInfo::fbInfo.isSupported() && config.frameBufferEmulation.copyFromRDRAM != 0) { + memset(ptr_dst, 0, numPixels * 2); + } + writeToRdram(ptr_src, ptr_dst, &ColorBufferToRDRAM::_RGBAtoRGBA16, 0, 1, width, height, numPixels, _startAddress, m_pCurFrameBuffer->m_startAddress, m_pCurFrameBuffer->m_size); - } - else if (m_pCurFrameBuffer->m_size == G_IM_SIZ_8b) { + } else if (m_pCurFrameBuffer->m_size == G_IM_SIZ_8b) { u8 *ptr_src = (u8*)pPixels; u8 *ptr_dst = RDRAM + _startAddress; + + if (!FBInfo::fbInfo.isSupported() && config.frameBufferEmulation.copyFromRDRAM != 0) { + memset(ptr_dst, 0, numPixels); + } + writeToRdram(ptr_src, ptr_dst, &ColorBufferToRDRAM::_RGBAtoR8, 0, 3, width, height, numPixels, _startAddress, m_pCurFrameBuffer->m_startAddress, m_pCurFrameBuffer->m_size); } diff --git a/src/FrameBufferInfo.h b/src/FrameBufferInfo.h index a7e3a9a1..a2915bd2 100644 --- a/src/FrameBufferInfo.h +++ b/src/FrameBufferInfo.h @@ -1,11 +1,7 @@ #ifndef _FRAME_BUFFER_INFO_H_ #define _FRAME_BUFFER_INFO_H_ -#ifdef OS_WINDOWS -# include -#else -# include "winlnxdefs.h" -#endif // OS_WINDOWS +#include "Platform.h" #include "Types.h" #include "PluginAPI.h"