From 38b8949fea926a0afce627537f29df413397f34f Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=B3zef=20Kucia?= Date: Tue, 29 May 2012 11:29:24 +0200 Subject: [PATCH] d3dx9: Implement D3DXSaveTextureToFileInMemory. --- dlls/d3dx9_36/texture.c | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/dlls/d3dx9_36/texture.c b/dlls/d3dx9_36/texture.c index 97d26d95b5b..1e87a00d05c 100644 --- a/dlls/d3dx9_36/texture.c +++ b/dlls/d3dx9_36/texture.c @@ -1660,10 +1660,40 @@ HRESULT WINAPI D3DXSaveTextureToFileW(const WCHAR *dst_filename, D3DXIMAGE_FILEF HRESULT WINAPI D3DXSaveTextureToFileInMemory(ID3DXBuffer **dst_buffer, D3DXIMAGE_FILEFORMAT file_format, IDirect3DBaseTexture9 *src_texture, const PALETTEENTRY *src_palette) { - FIXME("(%p, %#x, %p, %p): stub\n", + HRESULT hr; + D3DRESOURCETYPE type; + IDirect3DSurface9 *surface; + + TRACE("(%p, %#x, %p, %p)\n", dst_buffer, file_format, src_texture, src_palette); if (!dst_buffer || !src_texture) return D3DERR_INVALIDCALL; - return E_NOTIMPL; + if (file_format == D3DXIFF_DDS) + { + FIXME("DDS file format isn't supported yet\n"); + return E_NOTIMPL; + } + + type = IDirect3DBaseTexture9_GetType(src_texture); + switch (type) + { + case D3DRTYPE_TEXTURE: + case D3DRTYPE_CUBETEXTURE: + hr = get_surface(type, src_texture, D3DCUBEMAP_FACE_POSITIVE_X, 0, &surface); + break; + case D3DRTYPE_VOLUMETEXTURE: + FIXME("Volume textures aren't supported yet\n"); + return E_NOTIMPL; + default: + return D3DERR_INVALIDCALL; + } + + if (SUCCEEDED(hr)) + { + hr = D3DXSaveSurfaceToFileInMemory(dst_buffer, file_format, surface, src_palette, NULL); + IDirect3DSurface9_Release(surface); + } + + return hr; } -- 2.11.4.GIT