mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-30 05:06:15 +00:00
d3dx9: Use d3dx_image structure inside of D3DXCreateTextureFromFileInMemoryEx().
Signed-off-by: Connor McAdams <cmcadams@codeweavers.com>
This commit is contained in:
parent
fd2861252c
commit
f89b00c878
|
@ -122,6 +122,11 @@ struct d3dx_image
|
|||
D3DXIMAGE_FILEFORMAT image_file_format;
|
||||
};
|
||||
|
||||
HRESULT d3dx_image_init(const void *src_data, uint32_t src_data_size, struct d3dx_image *image, uint32_t flags);
|
||||
void d3dx_image_cleanup(struct d3dx_image *image);
|
||||
HRESULT d3dx_image_get_pixels(struct d3dx_image *image, struct d3dx_pixels *pixels);
|
||||
void d3dximage_info_from_d3dx_image(D3DXIMAGE_INFO *info, struct d3dx_image *image);
|
||||
|
||||
struct d3dx_include_from_file
|
||||
{
|
||||
ID3DXInclude ID3DXInclude_iface;
|
||||
|
|
|
@ -1132,8 +1132,7 @@ exit:
|
|||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT d3dx_image_init(const void *src_data, uint32_t src_data_size,
|
||||
struct d3dx_image *image, uint32_t flags)
|
||||
HRESULT d3dx_image_init(const void *src_data, uint32_t src_data_size, struct d3dx_image *image, uint32_t flags)
|
||||
{
|
||||
if (!src_data || !src_data_size || !image)
|
||||
return D3DERR_INVALIDCALL;
|
||||
|
@ -1145,13 +1144,13 @@ static HRESULT d3dx_image_init(const void *src_data, uint32_t src_data_size,
|
|||
return d3dx_initialize_image_from_wic(src_data, src_data_size, image, flags);
|
||||
}
|
||||
|
||||
static void d3dx_image_cleanup(struct d3dx_image *image)
|
||||
void d3dx_image_cleanup(struct d3dx_image *image)
|
||||
{
|
||||
free(image->image_buf);
|
||||
free(image->palette);
|
||||
}
|
||||
|
||||
static HRESULT d3dx_image_get_pixels(struct d3dx_image *image, struct d3dx_pixels *pixels)
|
||||
HRESULT d3dx_image_get_pixels(struct d3dx_image *image, struct d3dx_pixels *pixels)
|
||||
{
|
||||
uint32_t row_pitch, slice_pitch;
|
||||
RECT unaligned_rect;
|
||||
|
@ -1168,7 +1167,7 @@ static HRESULT d3dx_image_get_pixels(struct d3dx_image *image, struct d3dx_pixel
|
|||
return D3D_OK;
|
||||
}
|
||||
|
||||
static void d3dximage_info_from_d3dx_image(D3DXIMAGE_INFO *info, struct d3dx_image *image)
|
||||
void d3dximage_info_from_d3dx_image(D3DXIMAGE_INFO *info, struct d3dx_image *image)
|
||||
{
|
||||
info->ImageFileFormat = image->image_file_format;
|
||||
info->Width = image->width;
|
||||
|
|
|
@ -571,6 +571,7 @@ HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(struct IDirect3DDevice9 *devi
|
|||
unsigned int loaded_miplevels, skip_levels;
|
||||
IDirect3DTexture9 *staging_tex, *tex;
|
||||
IDirect3DSurface9 *surface;
|
||||
struct d3dx_image image;
|
||||
D3DXIMAGE_INFO imginfo;
|
||||
D3DCAPS9 caps;
|
||||
HRESULT hr;
|
||||
|
@ -586,13 +587,15 @@ HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(struct IDirect3DDevice9 *devi
|
|||
return D3DERR_INVALIDCALL;
|
||||
|
||||
staging_tex = tex = *texture = NULL;
|
||||
hr = D3DXGetImageInfoFromFileInMemory(srcdata, srcdatasize, &imginfo);
|
||||
hr = d3dx_image_init(srcdata, srcdatasize, &image, 0);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
FIXME("Unrecognized file format, returning failure.\n");
|
||||
return hr;
|
||||
}
|
||||
|
||||
d3dximage_info_from_d3dx_image(&imginfo, &image);
|
||||
|
||||
/* handle default values */
|
||||
if (width == 0 || width == D3DX_DEFAULT_NONPOW2)
|
||||
width = imginfo.Width;
|
||||
|
@ -692,8 +695,16 @@ HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(struct IDirect3DDevice9 *devi
|
|||
TRACE("Texture created correctly. Now loading the texture data into it.\n");
|
||||
if (imginfo.ImageFileFormat != D3DXIFF_DDS)
|
||||
{
|
||||
const RECT src_rect = { 0, 0, imginfo.Width, imginfo.Height };
|
||||
struct d3dx_pixels pixels;
|
||||
|
||||
hr = d3dx_image_get_pixels(&image, &pixels);
|
||||
if (FAILED(hr))
|
||||
goto err;
|
||||
|
||||
IDirect3DTexture9_GetSurfaceLevel(tex, 0, &surface);
|
||||
hr = D3DXLoadSurfaceFromFileInMemory(surface, palette, NULL, srcdata, srcdatasize, NULL, filter, colorkey, NULL);
|
||||
hr = D3DXLoadSurfaceFromMemory(surface, palette, NULL, pixels.data, imginfo.Format,
|
||||
pixels.row_pitch, pixels.palette, &src_rect, filter, colorkey);
|
||||
IDirect3DSurface9_Release(surface);
|
||||
loaded_miplevels = min(IDirect3DTexture9_GetLevelCount(tex), imginfo.MipLevels);
|
||||
}
|
||||
|
@ -731,12 +742,14 @@ HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(struct IDirect3DDevice9 *devi
|
|||
*texture = tex;
|
||||
}
|
||||
|
||||
d3dx_image_cleanup(&image);
|
||||
if (srcinfo)
|
||||
*srcinfo = imginfo;
|
||||
|
||||
return hr;
|
||||
|
||||
err:
|
||||
d3dx_image_cleanup(&image);
|
||||
if (tex)
|
||||
IDirect3DTexture9_Release(tex);
|
||||
|
||||
|
|
Loading…
Reference in a new issue