From dfc5ab140c3211d73239352253ee0f80a960dfd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3zef=20Kucia?= Date: Tue, 29 May 2012 11:29:23 +0200 Subject: [PATCH] d3dx9: Forward D3DXSaveTextureToFile to D3DXSaveTextureToFileInMemory. --- dlls/d3dx9_36/d3dx9_36.spec | 6 ++-- dlls/d3dx9_36/texture.c | 61 +++++++++++++++++++++++++++++++++++++ include/d3dx9tex.h | 5 +++ 3 files changed, 69 insertions(+), 3 deletions(-) diff --git a/dlls/d3dx9_36/d3dx9_36.spec b/dlls/d3dx9_36/d3dx9_36.spec index 44efaf5d003..aec2a5c8321 100644 --- a/dlls/d3dx9_36/d3dx9_36.spec +++ b/dlls/d3dx9_36/d3dx9_36.spec @@ -266,9 +266,9 @@ @ stdcall D3DXSaveSurfaceToFileA(ptr long ptr ptr ptr) @ stdcall D3DXSaveSurfaceToFileInMemory(ptr long ptr ptr ptr) @ stdcall D3DXSaveSurfaceToFileW(ptr long ptr ptr ptr) -@ stub D3DXSaveTextureToFileA(ptr long ptr ptr) -@ stub D3DXSaveTextureToFileInMemory(ptr long ptr ptr) -@ stub D3DXSaveTextureToFileW(ptr long ptr ptr) +@ stdcall D3DXSaveTextureToFileA(ptr long ptr ptr) +@ stdcall D3DXSaveTextureToFileInMemory(ptr long ptr ptr) +@ stdcall D3DXSaveTextureToFileW(ptr long ptr ptr) @ stub D3DXSaveVolumeToFileA(ptr long ptr ptr ptr) @ stub D3DXSaveVolumeToFileInMemory(ptr long ptr ptr ptr) @ stub D3DXSaveVolumeToFileW(ptr long ptr ptr ptr) diff --git a/dlls/d3dx9_36/texture.c b/dlls/d3dx9_36/texture.c index c17a3277843..97d26d95b5b 100644 --- a/dlls/d3dx9_36/texture.c +++ b/dlls/d3dx9_36/texture.c @@ -1606,3 +1606,64 @@ HRESULT WINAPI D3DXFillVolumeTexture(LPDIRECT3DVOLUMETEXTURE9 texture, return D3D_OK; } + +HRESULT WINAPI D3DXSaveTextureToFileA(const char *dst_filename, D3DXIMAGE_FILEFORMAT file_format, + IDirect3DBaseTexture9 *src_texture, const PALETTEENTRY *src_palette) +{ + int len; + WCHAR *filename; + HRESULT hr; + ID3DXBuffer *buffer; + + TRACE("(%s, %#x, %p, %p): relay\n", + wine_dbgstr_a(dst_filename), file_format, src_texture, src_palette); + + if (!dst_filename) return D3DERR_INVALIDCALL; + + len = MultiByteToWideChar(CP_ACP, 0, dst_filename, -1, NULL, 0); + filename = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (!filename) return E_OUTOFMEMORY; + MultiByteToWideChar(CP_ACP, 0, dst_filename, -1, filename, len); + + hr = D3DXSaveTextureToFileInMemory(&buffer, file_format, src_texture, src_palette); + if (SUCCEEDED(hr)) + { + hr = write_buffer_to_file(filename, buffer); + ID3DXBuffer_Release(buffer); + } + + HeapFree(GetProcessHeap(), 0, filename); + return hr; +} + +HRESULT WINAPI D3DXSaveTextureToFileW(const WCHAR *dst_filename, D3DXIMAGE_FILEFORMAT file_format, + IDirect3DBaseTexture9 *src_texture, const PALETTEENTRY *src_palette) +{ + HRESULT hr; + ID3DXBuffer *buffer; + + TRACE("(%s, %#x, %p, %p): relay\n", + wine_dbgstr_w(dst_filename), file_format, src_texture, src_palette); + + if (!dst_filename) return D3DERR_INVALIDCALL; + + hr = D3DXSaveTextureToFileInMemory(&buffer, file_format, src_texture, src_palette); + if (SUCCEEDED(hr)) + { + hr = write_buffer_to_file(dst_filename, buffer); + ID3DXBuffer_Release(buffer); + } + + return hr; +} + +HRESULT WINAPI D3DXSaveTextureToFileInMemory(ID3DXBuffer **dst_buffer, D3DXIMAGE_FILEFORMAT file_format, + IDirect3DBaseTexture9 *src_texture, const PALETTEENTRY *src_palette) +{ + FIXME("(%p, %#x, %p, %p): stub\n", + dst_buffer, file_format, src_texture, src_palette); + + if (!dst_buffer || !src_texture) return D3DERR_INVALIDCALL; + + return E_NOTIMPL; +} diff --git a/include/d3dx9tex.h b/include/d3dx9tex.h index 0e890210be8..38441ceaec6 100644 --- a/include/d3dx9tex.h +++ b/include/d3dx9tex.h @@ -638,6 +638,11 @@ HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemoryEx(LPDIRECT3DDEVICE9 devic PALETTEENTRY *palette, LPDIRECT3DVOLUMETEXTURE9 *volume); +HRESULT WINAPI D3DXSaveTextureToFileInMemory(LPD3DXBUFFER *destbuffer, + D3DXIMAGE_FILEFORMAT destformat, + LPDIRECT3DBASETEXTURE9 srctexture, + CONST PALETTEENTRY *srcpalette); + HRESULT WINAPI D3DXSaveTextureToFileA(LPCSTR destfile, D3DXIMAGE_FILEFORMAT destformat, LPDIRECT3DBASETEXTURE9 srctexture,