summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp
diff options
context:
space:
mode:
authorMatthew Parlane <parlane@gmail.com>2013-11-15 13:00:38 +1300
committerMatthew Parlane <parlane@gmail.com>2013-11-15 13:00:38 +1300
commit033ed9477e9e2319df449b1e310de96e5c371968 (patch)
treef746948015cb1e6c1e39d63b420f7ef282235360 /Source/Core/VideoBackends/D3D/Src/TextureCache.cpp
parent2703cae8d3847f826c88cce4622b75c2fd725795 (diff)
Reworked Screenshot saving.
Now OGL doesn't rely on WX for PNG saving. FlipImageData supports (pixel data len > 3) now. TextureToPng is now in ImageWrite.cpp/h Video Common depends on zlib and png. D3D no longer depends on zlib and png.
Diffstat (limited to 'Source/Core/VideoBackends/D3D/Src/TextureCache.cpp')
-rw-r--r--Source/Core/VideoBackends/D3D/Src/TextureCache.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp b/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp
index 0c6e759de5..faf83c23ca 100644
--- a/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp
+++ b/Source/Core/VideoBackends/D3D/Src/TextureCache.cpp
@@ -14,6 +14,7 @@
#include "PSTextureEncoder.h"
#include "HW/Memmap.h"
#include "VideoConfig.h"
+#include "ImageWrite.h"
namespace DX11
{
@@ -54,6 +55,8 @@ bool TextureCache::TCacheEntry::Save(const char filename[], unsigned int level)
HRESULT hr = D3D::device->CreateTexture2D(&desc, NULL, &pNewTexture);
+ bool saved_png = false;
+
if (SUCCEEDED(hr) && pNewTexture)
{
D3D::context->CopyResource(pNewTexture, pSurface);
@@ -62,13 +65,19 @@ bool TextureCache::TCacheEntry::Save(const char filename[], unsigned int level)
HRESULT hr = D3D::context->Map(pNewTexture, 0, D3D11_MAP_READ_WRITE, 0, &map);
if (SUCCEEDED(hr))
{
- hr = D3D::TextureToPng(map, filename, desc.Width, desc.Height);
+ if (map.pData)
+ {
+ u8* data = new u8[map.RowPitch * desc.Height];
+ memcpy(data, map.pData, map.RowPitch * desc.Height);
+
+ saved_png = TextureToPng(data, map.RowPitch, filename, desc.Width, desc.Height);
+ }
D3D::context->Unmap(pNewTexture, 0);
}
SAFE_RELEASE(pNewTexture);
}
- return SUCCEEDED(hr);
+ return saved_png;
}
void TextureCache::TCacheEntry::Load(unsigned int width, unsigned int height,