From 6e686f6ea10c486a6271a6ca7cd084e124776b5a Mon Sep 17 00:00:00 2001 From: iwubcode Date: Wed, 23 Aug 2017 21:46:23 -0500 Subject: Software Backend: Fix xfb output and add vertical scaling support --- Source/Core/VideoBackends/Software/SWTexture.cpp | 32 ++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'Source/Core/VideoBackends/Software/SWTexture.cpp') diff --git a/Source/Core/VideoBackends/Software/SWTexture.cpp b/Source/Core/VideoBackends/Software/SWTexture.cpp index 164c0d5314..e2752fe0c7 100644 --- a/Source/Core/VideoBackends/Software/SWTexture.cpp +++ b/Source/Core/VideoBackends/Software/SWTexture.cpp @@ -4,8 +4,13 @@ #include "VideoBackends/Software/SWTexture.h" +#include + +#include "VideoBackends/Software/CopyRegion.h" + namespace SW { + SWTexture::SWTexture(const TextureConfig& tex_config) : AbstractTexture(tex_config) { } @@ -18,11 +23,38 @@ void SWTexture::CopyRectangleFromTexture(const AbstractTexture* source, const MathUtil::Rectangle& srcrect, const MathUtil::Rectangle& dstrect) { + const SWTexture * software_source_texture = static_cast(source); + + if (srcrect.GetWidth() == dstrect.GetWidth() && srcrect.GetHeight() == dstrect.GetHeight()) + { + m_data.assign(software_source_texture->GetData(), software_source_texture->GetData() + m_data.size()); + } + else + { + copy_region(software_source_texture->GetData(), srcrect, GetData(), dstrect); + } } void SWTexture::Load(u32 level, u32 width, u32 height, u32 row_length, const u8* buffer, size_t buffer_size) { + m_data.assign(buffer, buffer + buffer_size); +} + +const u8* SWTexture::GetData() const +{ + return m_data.data(); +} + +u8* SWTexture::GetData() +{ + return m_data.data(); +} + +std::optional SWTexture::MapFullImpl() +{ + return AbstractTexture::RawTextureInfo{ GetData(), + m_config.width * 4, m_config.width, m_config.height }; } } // namespace SW -- cgit v1.2.3