]> git.cworth.org Git - apitrace/blobdiff - retrace/d3d11state_images.cpp
glretrace: Silence the warnings about unsupported GLX_EXT_texture_from_pixmap calls.
[apitrace] / retrace / d3d11state_images.cpp
index e08bc29e71c86e295e585df1dd0b777d736d2ee1..08f745dddc87cb3f1c99ba073f0da212121ff532 100644 (file)
 #include <iostream>
 #include <algorithm>
 
-#include "image.hpp"
+#include "os.hpp"
+#include "json.hpp"
 #include "d3d11imports.hpp"
 #include "d3d10state.hpp"
-
-#ifdef __MINGW32__
-#define nullptr NULL
-#endif
-#include "DirectXTex.h"
-
-
-/**
- * Convert between DXGI formats.
- *
- */
-static HRESULT
-ConvertFormat(DXGI_FORMAT SrcFormat,
-              void *SrcData,
-              UINT SrcPitch,
-              DXGI_FORMAT DstFormat,
-              void *DstData,
-              UINT DstPitch,
-              UINT Width, UINT Height)
-{
-    HRESULT hr;
-
-    DirectX::Image SrcImage;
-    DirectX::Image DstImage;
-    
-    SrcImage.width = Width;
-    SrcImage.height = Height;
-    SrcImage.format = SrcFormat;
-    SrcImage.rowPitch = SrcPitch;
-    SrcImage.slicePitch = Height * SrcPitch;
-    SrcImage.pixels = (uint8_t*)SrcData;
-    
-    DstImage.width = Width;
-    DstImage.height = Height;
-    DstImage.format = DstFormat;
-    DstImage.rowPitch = DstPitch;
-    DstImage.slicePitch = Height * DstPitch;
-    DstImage.pixels = (uint8_t*)DstData;
-    DirectX::Rect rect(0, 0, Width, Height);
-    if (SrcFormat != DstFormat) {
-        DirectX::ScratchImage ScratchImage;
-        ScratchImage.Initialize2D(DstFormat, Width, Height, 1, 1);
-  
-        hr = DirectX::Convert(SrcImage, DstFormat, DirectX::TEX_FILTER_DEFAULT, 0.0f, ScratchImage);
-        if (SUCCEEDED(hr)) {
-            hr = CopyRectangle(*ScratchImage.GetImage(0, 0, 0), rect, DstImage, DirectX::TEX_FILTER_DEFAULT, 0, 0);
-        }
-    } else {
-        hr = CopyRectangle(SrcImage, rect, DstImage, DirectX::TEX_FILTER_DEFAULT, 0, 0);
-    }
-    return hr;
-}
+#include "dxgistate.hpp"
 
 
 namespace d3dstate {
@@ -265,25 +212,11 @@ getRenderTargetViewImage(ID3D11DeviceContext *pDevice,
         goto no_map;
     }
 
-    image = new image::Image(Width, Height, 4);
-    if (!image) {
-        goto no_image;
-    }
-    assert(image->stride() > 0);
-
-    hr = ConvertFormat(Desc.Format,
-                       MappedSubresource.pData,
-                       MappedSubresource.RowPitch,
-                       DXGI_FORMAT_R8G8B8A8_UNORM,
-                       image->start(),
-                       image->stride(),
-                       Width, Height);
-    if (FAILED(hr)) {
-        delete image;
-        image = NULL;
-    }
+    image = ConvertImage(Desc.Format,
+                         MappedSubresource.pData,
+                         MappedSubresource.RowPitch,
+                         Width, Height);
 
-no_image:
     pDevice->Unmap(pStagingResource, Subresource);
 no_map:
     if (pStagingResource) {
@@ -297,8 +230,6 @@ no_staging:
 }
 
 
-
-
 image::Image *
 getRenderTargetImage(ID3D11DeviceContext *pDevice) {
     ID3D11RenderTargetView *pRenderTargetView = NULL;