summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/Software/SWTexture.cpp
diff options
context:
space:
mode:
authoriwubcode <iwubcode@users.noreply.github.com>2017-08-23 21:46:23 -0500
committeriwubcode <iwubcode@users.noreply.github.com>2017-11-17 22:11:31 -0600
commit6e686f6ea10c486a6271a6ca7cd084e124776b5a (patch)
tree55e0c3ae1a9735b4b80515a6dc60f72bebcd726e /Source/Core/VideoBackends/Software/SWTexture.cpp
parente6d85b0915681a3f8162d45468f2c488d6df8114 (diff)
Software Backend: Fix xfb output and add vertical scaling support
Diffstat (limited to 'Source/Core/VideoBackends/Software/SWTexture.cpp')
-rw-r--r--Source/Core/VideoBackends/Software/SWTexture.cpp32
1 files changed, 32 insertions, 0 deletions
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 <cstring>
+
+#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<int>& srcrect,
const MathUtil::Rectangle<int>& dstrect)
{
+ const SWTexture * software_source_texture = static_cast<const SWTexture*>(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<AbstractTexture::RawTextureInfo> SWTexture::MapFullImpl()
+{
+ return AbstractTexture::RawTextureInfo{ GetData(),
+ m_config.width * 4, m_config.width, m_config.height };
}
} // namespace SW