ReactOS  0.4.15-dev-1206-g731eddf
texture.c File Reference
#include "config.h"
#include "wine/port.h"
#include "d3dx9_private.h"
Include dependency graph for texture.c:

Go to the source code of this file.

Enumerations

enum  cube_coord {
  XCOORD = 0, XCOORDINV = 1, YCOORD = 2, YCOORDINV = 3,
  ZERO = 4, ONE = 5, XCOORD = 0, XCOORDINV = 1,
  YCOORD = 2, YCOORDINV = 3, ZERO = 4, ONE = 5
}
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (d3dx)
 
static BOOL is_pow2 (UINT num)
 
static UINT make_pow2 (UINT num)
 
static HRESULT get_surface (D3DRESOURCETYPE type, struct IDirect3DBaseTexture9 *tex, int face, UINT level, struct IDirect3DSurface9 **surf)
 
HRESULT WINAPI D3DXFilterTexture (IDirect3DBaseTexture9 *texture, const PALETTEENTRY *palette, UINT srclevel, DWORD filter)
 
static D3DFORMAT get_luminance_replacement_format (D3DFORMAT format)
 
HRESULT WINAPI D3DXCheckTextureRequirements (struct IDirect3DDevice9 *device, UINT *width, UINT *height, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool)
 
HRESULT WINAPI D3DXCheckCubeTextureRequirements (struct IDirect3DDevice9 *device, UINT *size, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool)
 
HRESULT WINAPI D3DXCheckVolumeTextureRequirements (struct IDirect3DDevice9 *device, UINT *width, UINT *height, UINT *depth, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool)
 
HRESULT WINAPI D3DXCreateTexture (struct IDirect3DDevice9 *device, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DTexture9 **texture)
 
static D3DFORMAT get_alpha_replacement_format (D3DFORMAT format)
 
HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx (struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatasize, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture)
 
HRESULT WINAPI D3DXCreateTextureFromFileInMemory (struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatasize, struct IDirect3DTexture9 **texture)
 
HRESULT WINAPI D3DXCreateTextureFromFileExW (struct IDirect3DDevice9 *device, const WCHAR *srcfile, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture)
 
HRESULT WINAPI D3DXCreateTextureFromFileExA (struct IDirect3DDevice9 *device, const char *srcfile, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture)
 
HRESULT WINAPI D3DXCreateTextureFromFileA (struct IDirect3DDevice9 *device, const char *srcfile, struct IDirect3DTexture9 **texture)
 
HRESULT WINAPI D3DXCreateTextureFromFileW (struct IDirect3DDevice9 *device, const WCHAR *srcfile, struct IDirect3DTexture9 **texture)
 
HRESULT WINAPI D3DXCreateTextureFromResourceA (struct IDirect3DDevice9 *device, HMODULE srcmodule, const char *resource, struct IDirect3DTexture9 **texture)
 
HRESULT WINAPI D3DXCreateTextureFromResourceW (struct IDirect3DDevice9 *device, HMODULE srcmodule, const WCHAR *resource, struct IDirect3DTexture9 **texture)
 
HRESULT WINAPI D3DXCreateTextureFromResourceExA (struct IDirect3DDevice9 *device, HMODULE srcmodule, const char *resource, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture)
 
HRESULT WINAPI D3DXCreateTextureFromResourceExW (struct IDirect3DDevice9 *device, HMODULE srcmodule, const WCHAR *resource, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture)
 
HRESULT WINAPI D3DXCreateCubeTexture (struct IDirect3DDevice9 *device, UINT size, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DCubeTexture9 **texture)
 
HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemory (struct IDirect3DDevice9 *device, const void *data, UINT datasize, struct IDirect3DCubeTexture9 **texture)
 
HRESULT WINAPI D3DXCreateVolumeTexture (struct IDirect3DDevice9 *device, UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DVolumeTexture9 **texture)
 
HRESULT WINAPI D3DXCreateVolumeTextureFromFileA (IDirect3DDevice9 *device, const char *filename, IDirect3DVolumeTexture9 **volume_texture)
 
HRESULT WINAPI D3DXCreateVolumeTextureFromFileW (IDirect3DDevice9 *device, const WCHAR *filename, IDirect3DVolumeTexture9 **volume_texture)
 
HRESULT WINAPI D3DXCreateVolumeTextureFromFileExA (IDirect3DDevice9 *device, const char *filename, UINT width, UINT height, UINT depth, UINT mip_levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mip_filter, D3DCOLOR color_key, D3DXIMAGE_INFO *src_info, PALETTEENTRY *palette, IDirect3DVolumeTexture9 **volume_texture)
 
HRESULT WINAPI D3DXCreateVolumeTextureFromFileExW (IDirect3DDevice9 *device, const WCHAR *filename, UINT width, UINT height, UINT depth, UINT mip_levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mip_filter, D3DCOLOR color_key, D3DXIMAGE_INFO *src_info, PALETTEENTRY *palette, IDirect3DVolumeTexture9 **volume_texture)
 
HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemory (IDirect3DDevice9 *device, const void *data, UINT data_size, IDirect3DVolumeTexture9 **volume_texture)
 
HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemoryEx (IDirect3DDevice9 *device, const void *data, UINT data_size, UINT width, UINT height, UINT depth, UINT mip_levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mip_filter, D3DCOLOR color_key, D3DXIMAGE_INFO *info, PALETTEENTRY *palette, IDirect3DVolumeTexture9 **volume_texture)
 
static void fill_texture (const struct pixel_format_desc *format, BYTE *pos, const D3DXVECTOR4 *value)
 
HRESULT WINAPI D3DXFillTexture (struct IDirect3DTexture9 *texture, LPD3DXFILL2D function, void *funcdata)
 
HRESULT WINAPI D3DXFillTextureTX (struct IDirect3DTexture9 *texture, ID3DXTextureShader *texture_shader)
 
HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemoryEx (IDirect3DDevice9 *device, const void *src_data, UINT src_data_size, UINT size, UINT mip_levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mip_filter, D3DCOLOR color_key, D3DXIMAGE_INFO *src_info, PALETTEENTRY *palette, IDirect3DCubeTexture9 **cube_texture)
 
HRESULT WINAPI D3DXCreateCubeTextureFromFileA (IDirect3DDevice9 *device, const char *src_filename, IDirect3DCubeTexture9 **cube_texture)
 
HRESULT WINAPI D3DXCreateCubeTextureFromFileW (IDirect3DDevice9 *device, const WCHAR *src_filename, IDirect3DCubeTexture9 **cube_texture)
 
HRESULT WINAPI D3DXCreateCubeTextureFromFileExA (IDirect3DDevice9 *device, const char *src_filename, UINT size, UINT mip_levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mip_filter, D3DCOLOR color_key, D3DXIMAGE_INFO *image_info, PALETTEENTRY *palette, IDirect3DCubeTexture9 **cube_texture)
 
HRESULT WINAPI D3DXCreateCubeTextureFromFileExW (IDirect3DDevice9 *device, const WCHAR *src_filename, UINT size, UINT mip_levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mip_filter, D3DCOLOR color_key, D3DXIMAGE_INFO *image_info, PALETTEENTRY *palette, IDirect3DCubeTexture9 **cube_texture)
 
static float get_cube_coord (enum cube_coord coord, unsigned int x, unsigned int y, unsigned int size)
 
HRESULT WINAPI D3DXFillCubeTexture (struct IDirect3DCubeTexture9 *texture, LPD3DXFILL3D function, void *funcdata)
 
HRESULT WINAPI D3DXFillCubeTextureTX (struct IDirect3DCubeTexture9 *texture, ID3DXTextureShader *texture_shader)
 
HRESULT WINAPI D3DXFillVolumeTexture (struct IDirect3DVolumeTexture9 *texture, LPD3DXFILL3D function, void *funcdata)
 
HRESULT WINAPI D3DXFillVolumeTextureTX (struct IDirect3DVolumeTexture9 *texture, ID3DXTextureShader *texture_shader)
 
HRESULT WINAPI D3DXSaveTextureToFileA (const char *dst_filename, D3DXIMAGE_FILEFORMAT file_format, IDirect3DBaseTexture9 *src_texture, const PALETTEENTRY *src_palette)
 
HRESULT WINAPI D3DXSaveTextureToFileW (const WCHAR *dst_filename, D3DXIMAGE_FILEFORMAT file_format, IDirect3DBaseTexture9 *src_texture, const PALETTEENTRY *src_palette)
 
HRESULT WINAPI D3DXSaveTextureToFileInMemory (ID3DXBuffer **dst_buffer, D3DXIMAGE_FILEFORMAT file_format, IDirect3DBaseTexture9 *src_texture, const PALETTEENTRY *src_palette)
 
HRESULT WINAPI D3DXComputeNormalMap (IDirect3DTexture9 *texture, IDirect3DTexture9 *src_texture, const PALETTEENTRY *src_palette, DWORD flags, DWORD channel, float amplitude)
 

Enumeration Type Documentation

◆ cube_coord

Enumerator
XCOORD 
XCOORDINV 
YCOORD 
YCOORDINV 
ZERO 
ONE 
XCOORD 
XCOORDINV 
YCOORD 
YCOORDINV 
ZERO 
ONE 

Definition at line 1670 of file texture.c.

1671 {
1672  XCOORD = 0,
1673  XCOORDINV = 1,
1674  YCOORD = 2,
1675  YCOORDINV = 3,
1676  ZERO = 4,
1677  ONE = 5
1678 };
Definition: texture.c:1677
Definition: texture.c:1676

Function Documentation

◆ D3DXCheckCubeTextureRequirements()

HRESULT WINAPI D3DXCheckCubeTextureRequirements ( struct IDirect3DDevice9 *  device,
UINT size,
UINT miplevels,
DWORD  usage,
D3DFORMAT format,
D3DPOOL  pool 
)

Definition at line 417 of file texture.c.

419 {
420  D3DCAPS9 caps;
421  UINT s = (size && *size) ? *size : 256;
422  HRESULT hr;
423 
424  TRACE("(%p, %p, %p, %u, %p, %u)\n", device, size, miplevels, usage, format, pool);
425 
426  if (s == D3DX_DEFAULT)
427  s = 256;
428 
430  return D3DERR_INVALIDCALL;
431 
432  if (!(caps.TextureCaps & D3DPTEXTURECAPS_CUBEMAP))
433  return D3DERR_NOTAVAILABLE;
434 
435  /* ensure width/height is power of 2 */
437  s = make_pow2(s);
438 
439  hr = D3DXCheckTextureRequirements(device, &s, &s, miplevels, usage, format, pool);
440 
442  {
443  if(miplevels)
444  *miplevels = 1;
445  }
446 
447  if (size)
448  *size = s;
449 
450  return hr;
451 }
DWORD TextureCaps
Definition: d3d9caps.h:279
HRESULT hr
Definition: shlfolder.c:183
#define D3DPTEXTURECAPS_CUBEMAP_POW2
Definition: d3d8caps.h:126
#define D3DERR_INVALIDCALL
static UINT make_pow2(UINT num)
Definition: texture.c:36
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
Definition: devices.h:37
#define D3DX_DEFAULT
Definition: d3dx9.h:24
#define D3DERR_NOTAVAILABLE
Definition: d3d8.h:84
#define D3DPTEXTURECAPS_CUBEMAP
Definition: d3d8caps.h:121
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
LONG HRESULT
Definition: typedefs.h:79
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
GLdouble s
Definition: gl.h:2039
#define IDirect3DDevice9_GetDeviceCaps(p, a)
Definition: d3d9.h:1514
unsigned int UINT
Definition: ndis.h:50
HRESULT WINAPI D3DXCheckTextureRequirements(struct IDirect3DDevice9 *device, UINT *width, UINT *height, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool)
Definition: texture.c:209
#define D3DPTEXTURECAPS_MIPCUBEMAP
Definition: d3d8caps.h:125
static BOOL is_pow2(UINT num)
Definition: texture.c:30

Referenced by D3DXCreateCubeTexture(), D3DXCreateCubeTextureFromFileInMemoryEx(), and test_D3DXCheckCubeTextureRequirements().

◆ D3DXCheckTextureRequirements()

HRESULT WINAPI D3DXCheckTextureRequirements ( struct IDirect3DDevice9 *  device,
UINT width,
UINT height,
UINT miplevels,
DWORD  usage,
D3DFORMAT format,
D3DPOOL  pool 
)

Definition at line 209 of file texture.c.

211 {
212  UINT w = (width && *width) ? *width : 1;
213  UINT h = (height && *height) ? *height : 1;
214  D3DCAPS9 caps;
216  IDirect3D9 *d3d = NULL;
218  HRESULT hr;
219  D3DFORMAT usedformat = D3DFMT_UNKNOWN;
220  const struct pixel_format_desc *fmt;
221 
222  TRACE("(%p, %p, %p, %p, %u, %p, %u)\n", device, width, height, miplevels, usage, format, pool);
223 
224  if (!device)
225  return D3DERR_INVALIDCALL;
226 
227  /* usage */
228  if (usage == D3DX_DEFAULT)
229  usage = 0;
231  return D3DERR_INVALIDCALL;
232 
233  /* pool */
235  return D3DERR_INVALIDCALL;
236 
237  /* format */
238  if (format)
239  {
240  TRACE("Requested format %x\n", *format);
241  usedformat = *format;
242  }
243 
245 
246  if (FAILED(hr))
247  goto cleanup;
248 
250 
251  if (FAILED(hr))
252  goto cleanup;
253 
255 
256  if (FAILED(hr))
257  goto cleanup;
258 
259  if ((usedformat == D3DFMT_UNKNOWN) || (usedformat == D3DX_DEFAULT))
260  usedformat = D3DFMT_A8R8G8B8;
261 
262  fmt = get_format_info(usedformat);
263 
264  hr = IDirect3D9_CheckDeviceFormat(d3d, params.AdapterOrdinal, params.DeviceType, mode.Format,
265  usage, D3DRTYPE_TEXTURE, usedformat);
266  if (FAILED(hr))
267  {
268  BOOL allow_24bits;
269  int bestscore = INT_MIN, i = 0, j;
270  unsigned int channels;
271  const struct pixel_format_desc *curfmt, *bestfmt = NULL;
272 
273  TRACE("Requested format is not supported, looking for a fallback.\n");
274 
275  if (!fmt)
276  {
277  FIXME("Pixel format %x not handled\n", usedformat);
278  goto cleanup;
279  }
281 
282  allow_24bits = fmt->bytes_per_pixel == 3;
283  channels = !!fmt->bits[0] + !!fmt->bits[1] + !!fmt->bits[2] + !!fmt->bits[3];
284  usedformat = D3DFMT_UNKNOWN;
285 
286  while ((curfmt = get_format_info_idx(i)))
287  {
288  unsigned int curchannels = !!curfmt->bits[0] + !!curfmt->bits[1]
289  + !!curfmt->bits[2] + !!curfmt->bits[3];
290  int score;
291 
292  i++;
293 
294  if (curchannels < channels)
295  continue;
296  if (curfmt->bytes_per_pixel == 3 && !allow_24bits)
297  continue;
298 
299  hr = IDirect3D9_CheckDeviceFormat(d3d, params.AdapterOrdinal, params.DeviceType,
300  mode.Format, usage, D3DRTYPE_TEXTURE, curfmt->format);
301  if (FAILED(hr))
302  continue;
303 
304  /* This format can be used, let's evaluate it.
305  Weights chosen quite arbitrarily... */
306  score = 512 * (curfmt->type == fmt->type);
307  score -= 32 * (curchannels - channels);
308 
309  for (j = 0; j < 4; j++)
310  {
311  int diff = curfmt->bits[j] - fmt->bits[j];
312  score -= (diff < 0 ? -diff * 8 : diff) * (j == 0 ? 1 : 2);
313  }
314 
315  if (score > bestscore)
316  {
317  bestscore = score;
318  usedformat = curfmt->format;
319  bestfmt = curfmt;
320  }
321  }
322  fmt = bestfmt;
323  hr = D3D_OK;
324  }
325 
327  return D3DERR_INVALIDCALL;
328 
329  if ((w == D3DX_DEFAULT) && (h == D3DX_DEFAULT))
330  w = h = 256;
331  else if (w == D3DX_DEFAULT)
332  w = (height ? h : 256);
333  else if (h == D3DX_DEFAULT)
334  h = (width ? w : 256);
335 
336  if (fmt->block_width != 1 || fmt->block_height != 1)
337  {
338  if (w % fmt->block_width)
339  w += fmt->block_width - w % fmt->block_width;
340  if (h % fmt->block_height)
341  h += fmt->block_height - h % fmt->block_height;
342  }
343 
344  if ((caps.TextureCaps & D3DPTEXTURECAPS_POW2) && (!is_pow2(w)))
345  w = make_pow2(w);
346 
347  if (w > caps.MaxTextureWidth)
348  w = caps.MaxTextureWidth;
349 
350  if ((caps.TextureCaps & D3DPTEXTURECAPS_POW2) && (!is_pow2(h)))
351  h = make_pow2(h);
352 
353  if (h > caps.MaxTextureHeight)
354  h = caps.MaxTextureHeight;
355 
357  {
358  if (w > h)
359  h = w;
360  else
361  w = h;
362  }
363 
364  if (width)
365  *width = w;
366 
367  if (height)
368  *height = h;
369 
370  if (miplevels && (usage & D3DUSAGE_AUTOGENMIPMAP))
371  {
372  if (*miplevels > 1)
373  *miplevels = 0;
374  }
375  else if (miplevels)
376  {
377  UINT max_mipmaps = 1;
378 
379  if (!width && !height)
380  max_mipmaps = 9; /* number of mipmaps in a 256x256 texture */
381  else
382  {
383  UINT max_dimen = max(w, h);
384 
385  while (max_dimen > 1)
386  {
387  max_dimen >>= 1;
388  max_mipmaps++;
389  }
390  }
391 
392  if (*miplevels == 0 || *miplevels > max_mipmaps)
393  *miplevels = max_mipmaps;
394  }
395 
396 cleanup:
397 
398  if (d3d)
399  IDirect3D9_Release(d3d);
400 
401  if (FAILED(hr))
402  return hr;
403 
404  if (usedformat == D3DFMT_UNKNOWN)
405  {
406  WARN("Couldn't find a suitable pixel format\n");
407  return D3DERR_NOTAVAILABLE;
408  }
409 
410  TRACE("Format chosen: %x\n", usedformat);
411  if (format)
412  *format = usedformat;
413 
414  return D3D_OK;
415 }
#define IDirect3D9_CheckDeviceFormat(p, a, b, c, d, e, f)
Definition: d3d9.h:229
GLint GLint GLsizei width
Definition: gl.h:1546
#define max(a, b)
Definition: svc.c:63
#define D3DPTEXTURECAPS_POW2
Definition: d3d8caps.h:114
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
DWORD TextureCaps
Definition: d3d9caps.h:279
HRESULT hr
Definition: shlfolder.c:183
#define IDirect3DDevice9_GetCreationParameters(p, a)
Definition: d3d9.h:1516
#define D3DUSAGE_AUTOGENMIPMAP
Definition: d3d9types.h:113
#define WARN(fmt,...)
Definition: debug.h:112
int bits
Definition: dsound.c:944
#define D3DUSAGE_POINTS
Definition: d3d8types.h:96
const char * fmt
Definition: wsprintf.c:30
DWORD MaxTextureHeight
Definition: d3d9caps.h:287
#define D3DUSAGE_DONOTCLIP
Definition: d3d8types.h:95
#define D3DERR_INVALIDCALL
int This channels
Definition: rdpsnd_libao.c:37
#define D3DUSAGE_WRITEONLY
Definition: d3d8types.h:93
static UINT make_pow2(UINT num)
Definition: texture.c:36
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
#define IDirect3D9_Release(p)
Definition: d3d9.h:220
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLenum const GLfloat * params
Definition: glext.h:5645
unsigned int BOOL
Definition: ntddk_ex.h:94
Definition: devices.h:37
DWORD MaxTextureWidth
Definition: d3d9caps.h:286
#define FIXME(fmt,...)
Definition: debug.h:111
#define D3DX_DEFAULT
Definition: d3dx9.h:24
#define D3DERR_NOTAVAILABLE
Definition: d3d8.h:84
#define D3DPTEXTURECAPS_SQUAREONLY
Definition: d3d8caps.h:116
const struct pixel_format_desc * get_format_info_idx(int idx) DECLSPEC_HIDDEN
Definition: util.c:222
smooth NULL
Definition: ftsmooth.c:416
enum _D3DFORMAT D3DFORMAT
#define IDirect3DDevice9_GetDisplayMode(p, a, b)
Definition: d3d9.h:1515
#define D3DUSAGE_NPATCHES
Definition: d3d8types.h:98
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
#define IDirect3DDevice9_GetDirect3D(p, a)
Definition: d3d9.h:1513
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
enum format_type type
Definition: d3dx9_private.h:65
#define D3DUSAGE_RTPATCHES
Definition: d3d8types.h:97
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
GLenum mode
Definition: glext.h:6217
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
#define INT_MIN
Definition: limits.h:39
#define D3D_OK
Definition: d3d.h:106
#define IDirect3DDevice9_GetDeviceCaps(p, a)
Definition: d3d9.h:1514
static D3DFORMAT get_luminance_replacement_format(D3DFORMAT format)
Definition: texture.c:188
unsigned int UINT
Definition: ndis.h:50
char * cleanup(char *str)
Definition: wpickclick.c:99
const struct pixel_format_desc * get_format_info(D3DFORMAT format) DECLSPEC_HIDDEN
Definition: util.c:213
static BOOL is_pow2(UINT num)
Definition: texture.c:30
Definition: dsound.c:943

Referenced by D3DXCheckCubeTextureRequirements(), D3DXCheckVolumeTextureRequirements(), D3DXCreateRenderToEnvMap(), D3DXCreateTexture(), D3DXCreateTextureFromFileInMemoryEx(), and test_D3DXCheckTextureRequirements().

◆ D3DXCheckVolumeTextureRequirements()

HRESULT WINAPI D3DXCheckVolumeTextureRequirements ( struct IDirect3DDevice9 *  device,
UINT width,
UINT height,
UINT depth,
UINT miplevels,
DWORD  usage,
D3DFORMAT format,
D3DPOOL  pool 
)

Definition at line 453 of file texture.c.

455 {
456  D3DCAPS9 caps;
457  UINT w = width ? *width : D3DX_DEFAULT;
459  UINT d = (depth && *depth) ? *depth : 1;
460  HRESULT hr;
461 
462  TRACE("(%p, %p, %p, %p, %p, %u, %p, %u)\n", device, width, height, depth, miplevels,
463  usage, format, pool);
464 
466  return D3DERR_INVALIDCALL;
467 
469  return D3DERR_NOTAVAILABLE;
470 
472  if (d == D3DX_DEFAULT)
473  d = 1;
474 
475  /* ensure width/height is power of 2 */
477  (!is_pow2(w) || !is_pow2(h) || !is_pow2(d)))
478  {
479  w = make_pow2(w);
480  h = make_pow2(h);
481  d = make_pow2(d);
482  }
483 
484  if (w > caps.MaxVolumeExtent)
485  w = caps.MaxVolumeExtent;
486  if (h > caps.MaxVolumeExtent)
487  h = caps.MaxVolumeExtent;
488  if (d > caps.MaxVolumeExtent)
489  d = caps.MaxVolumeExtent;
490 
491  if (miplevels)
492  {
494  *miplevels = 1;
495  else if ((usage & D3DUSAGE_AUTOGENMIPMAP))
496  {
497  if (*miplevels > 1)
498  *miplevels = 0;
499  }
500  else
501  {
502  UINT max_mipmaps = 1;
503  UINT max_dimen = max(max(w, h), d);
504 
505  while (max_dimen > 1)
506  {
507  max_dimen >>= 1;
508  max_mipmaps++;
509  }
510 
511  if (*miplevels == 0 || *miplevels > max_mipmaps)
512  *miplevels = max_mipmaps;
513  }
514  }
515 
516  if (width)
517  *width = w;
518  if (height)
519  *height = h;
520  if (depth)
521  *depth = d;
522 
523  return hr;
524 }
GLint GLint GLsizei width
Definition: gl.h:1546
#define max(a, b)
Definition: svc.c:63
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
DWORD TextureCaps
Definition: d3d9caps.h:279
HRESULT hr
Definition: shlfolder.c:183
#define D3DUSAGE_AUTOGENMIPMAP
Definition: d3d9types.h:113
#define D3DERR_INVALIDCALL
#define D3DPTEXTURECAPS_MIPVOLUMEMAP
Definition: d3d8caps.h:124
static UINT make_pow2(UINT num)
Definition: texture.c:36
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
DWORD MaxVolumeExtent
Definition: d3d9caps.h:288
Definition: devices.h:37
#define D3DX_DEFAULT
Definition: d3dx9.h:24
#define D3DERR_NOTAVAILABLE
Definition: d3d8.h:84
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define d
Definition: ke_i.h:81
LONG HRESULT
Definition: typedefs.h:79
GLint GLint GLsizei GLsizei GLsizei depth
Definition: gl.h:1546
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
#define IDirect3DDevice9_GetDeviceCaps(p, a)
Definition: d3d9.h:1514
unsigned int UINT
Definition: ndis.h:50
HRESULT WINAPI D3DXCheckTextureRequirements(struct IDirect3DDevice9 *device, UINT *width, UINT *height, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool)
Definition: texture.c:209
#define D3DPTEXTURECAPS_VOLUMEMAP_POW2
Definition: d3d8caps.h:127
static BOOL is_pow2(UINT num)
Definition: texture.c:30
#define D3DPTEXTURECAPS_VOLUMEMAP
Definition: d3d8caps.h:122

Referenced by D3DXCreateVolumeTexture(), D3DXCreateVolumeTextureFromFileInMemoryEx(), and test_D3DXCheckVolumeTextureRequirements().

◆ D3DXComputeNormalMap()

HRESULT WINAPI D3DXComputeNormalMap ( IDirect3DTexture9 *  texture,
IDirect3DTexture9 *  src_texture,
const PALETTEENTRY src_palette,
DWORD  flags,
DWORD  channel,
float  amplitude 
)

Definition at line 1934 of file texture.c.

1936 {
1937  FIXME("texture %p, src_texture %p, src_palette %p, flags %#x, channel %u, amplitude %.8e stub.\n",
1938  texture, src_texture, src_palette, flags, channel, amplitude);
1939 
1940  return D3D_OK;
1941 }
#define FIXME(fmt,...)
Definition: debug.h:111
GLenum GLuint texture
Definition: glext.h:6295
GLbitfield flags
Definition: glext.h:7161
#define D3D_OK
Definition: d3d.h:106

◆ D3DXCreateCubeTexture()

HRESULT WINAPI D3DXCreateCubeTexture ( struct IDirect3DDevice9 *  device,
UINT  size,
UINT  miplevels,
DWORD  usage,
D3DFORMAT  format,
D3DPOOL  pool,
struct IDirect3DCubeTexture9 **  texture 
)

Definition at line 913 of file texture.c.

915 {
916  HRESULT hr;
917 
918  TRACE("(%p, %u, %u, %#x, %#x, %#x, %p)\n", device, size, miplevels, usage, format,
919  pool, texture);
920 
921  if (!device || !texture)
922  return D3DERR_INVALIDCALL;
923 
925 
926  if (FAILED(hr))
927  {
928  TRACE("D3DXCheckCubeTextureRequirements failed\n");
929  return hr;
930  }
931 
933 }
HRESULT WINAPI D3DXCheckCubeTextureRequirements(struct IDirect3DDevice9 *device, UINT *size, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool)
Definition: texture.c:417
HRESULT hr
Definition: shlfolder.c:183
#define D3DERR_INVALIDCALL
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
Definition: devices.h:37
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
GLenum GLuint texture
Definition: glext.h:6295
LONG HRESULT
Definition: typedefs.h:79
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
#define IDirect3DDevice9_CreateCubeTexture(p, a, b, c, d, e, f, g)
Definition: d3d9.h:1532

Referenced by D3DXCreateCubeTextureFromFileInMemoryEx().

◆ D3DXCreateCubeTextureFromFileA()

HRESULT WINAPI D3DXCreateCubeTextureFromFileA ( IDirect3DDevice9 *  device,
const char src_filename,
IDirect3DCubeTexture9 **  cube_texture 
)

Definition at line 1538 of file texture.c.

1541 {
1542  int len;
1543  HRESULT hr;
1544  WCHAR *filename;
1545  void *data;
1546  DWORD data_size;
1547 
1548  TRACE("(%p, %s, %p): relay\n", device, wine_dbgstr_a(src_filename), cube_texture);
1549 
1550  if (!src_filename) return D3DERR_INVALIDCALL;
1551 
1552  len = MultiByteToWideChar(CP_ACP, 0, src_filename, -1, NULL, 0);
1553  filename = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1554  if (!filename) return E_OUTOFMEMORY;
1555  MultiByteToWideChar(CP_ACP, 0, src_filename, -1, filename, len);
1556 
1557  hr = map_view_of_file(filename, &data, &data_size);
1558  if (FAILED(hr))
1559  {
1561  return D3DXERR_INVALIDDATA;
1562  }
1563 
1566 
1569  return hr;
1570 }
const char int int int static __inline const char * wine_dbgstr_a(const char *s)
Definition: debug.h:186
HRESULT hr
Definition: shlfolder.c:183
#define CP_ACP
Definition: compat.h:109
#define D3DERR_INVALIDCALL
const char * filename
Definition: ioapi.h:135
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
Definition: devices.h:37
#define D3DX_DEFAULT
Definition: d3dx9.h:24
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:79
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
HRESULT map_view_of_file(const WCHAR *filename, void **buffer, DWORD *length) DECLSPEC_HIDDEN
Definition: util.c:118
GLenum GLsizei len
Definition: glext.h:6722
#define MultiByteToWideChar
Definition: compat.h:110
HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemoryEx(IDirect3DDevice9 *device, const void *src_data, UINT src_data_size, UINT size, UINT mip_levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mip_filter, D3DCOLOR color_key, D3DXIMAGE_INFO *src_info, PALETTEENTRY *palette, IDirect3DCubeTexture9 **cube_texture)
Definition: texture.c:1401
#define UnmapViewOfFile
Definition: compat.h:605
#define HeapFree(x, y, z)
Definition: compat.h:594

◆ D3DXCreateCubeTextureFromFileExA()

HRESULT WINAPI D3DXCreateCubeTextureFromFileExA ( IDirect3DDevice9 *  device,
const char src_filename,
UINT  size,
UINT  mip_levels,
DWORD  usage,
D3DFORMAT  format,
D3DPOOL  pool,
DWORD  filter,
DWORD  mip_filter,
D3DCOLOR  color_key,
D3DXIMAGE_INFO image_info,
PALETTEENTRY palette,
IDirect3DCubeTexture9 **  cube_texture 
)

Definition at line 1592 of file texture.c.

1605 {
1606  int len;
1607  HRESULT hr;
1608  WCHAR *filename;
1609  void *data;
1610  DWORD data_size;
1611 
1612  TRACE("(%p, %s, %u, %u, %#x, %#x, %#x, %#x, %#x, %#x, %p, %p, %p): relay\n",
1613  device, wine_dbgstr_a(src_filename), size, mip_levels, usage, format,
1614  pool, filter, mip_filter, color_key, image_info, palette, cube_texture);
1615 
1616  if (!src_filename) return D3DERR_INVALIDCALL;
1617 
1618  len = MultiByteToWideChar(CP_ACP, 0, src_filename, -1, NULL, 0);
1619  filename = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1620  if (!filename) return E_OUTOFMEMORY;
1621  MultiByteToWideChar(CP_ACP, 0, src_filename, -1, filename, len);
1622 
1623  hr = map_view_of_file(filename, &data, &data_size);
1624  if (FAILED(hr))
1625  {
1627  return D3DXERR_INVALIDDATA;
1628  }
1629 
1630  hr = D3DXCreateCubeTextureFromFileInMemoryEx(device, data, data_size, size, mip_levels,
1631  usage, format, pool, filter, mip_filter, color_key, image_info, palette, cube_texture);
1632 
1635  return hr;
1636 }
const char int int int static __inline const char * wine_dbgstr_a(const char *s)
Definition: debug.h:186
HRESULT hr
Definition: shlfolder.c:183
#define CP_ACP
Definition: compat.h:109
#define D3DERR_INVALIDCALL
const char * filename
Definition: ioapi.h:135
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
Definition: devices.h:37
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:79
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
HRESULT map_view_of_file(const WCHAR *filename, void **buffer, DWORD *length) DECLSPEC_HIDDEN
Definition: util.c:118
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
GLenum GLsizei len
Definition: glext.h:6722
static HPALETTE palette
Definition: clipboard.c:1345
#define MultiByteToWideChar
Definition: compat.h:110
HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemoryEx(IDirect3DDevice9 *device, const void *src_data, UINT src_data_size, UINT size, UINT mip_levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mip_filter, D3DCOLOR color_key, D3DXIMAGE_INFO *src_info, PALETTEENTRY *palette, IDirect3DCubeTexture9 **cube_texture)
Definition: texture.c:1401
#define UnmapViewOfFile
Definition: compat.h:605
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005
#define HeapFree(x, y, z)
Definition: compat.h:594

◆ D3DXCreateCubeTextureFromFileExW()

HRESULT WINAPI D3DXCreateCubeTextureFromFileExW ( IDirect3DDevice9 *  device,
const WCHAR src_filename,
UINT  size,
UINT  mip_levels,
DWORD  usage,
D3DFORMAT  format,
D3DPOOL  pool,
DWORD  filter,
DWORD  mip_filter,
D3DCOLOR  color_key,
D3DXIMAGE_INFO image_info,
PALETTEENTRY palette,
IDirect3DCubeTexture9 **  cube_texture 
)

Definition at line 1638 of file texture.c.

1651 {
1652  HRESULT hr;
1653  void *data;
1654  DWORD data_size;
1655 
1656  TRACE("(%p, %s, %u, %u, %#x, %#x, %#x, %#x, %#x, %#x, %p, %p, %p): relay\n",
1657  device, wine_dbgstr_w(src_filename), size, mip_levels, usage, format,
1658  pool, filter, mip_filter, color_key, image_info, palette, cube_texture);
1659 
1660  hr = map_view_of_file(src_filename, &data, &data_size);
1661  if (FAILED(hr)) return D3DXERR_INVALIDDATA;
1662 
1663  hr = D3DXCreateCubeTextureFromFileInMemoryEx(device, data, data_size, size, mip_levels,
1664  usage, format, pool, filter, mip_filter, color_key, image_info, palette, cube_texture);
1665 
1667  return hr;
1668 }
HRESULT hr
Definition: shlfolder.c:183
char * wine_dbgstr_w(const wchar_t *wstr)
Definition: atltest.h:87
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
Definition: devices.h:37
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
LONG HRESULT
Definition: typedefs.h:79
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
HRESULT map_view_of_file(const WCHAR *filename, void **buffer, DWORD *length) DECLSPEC_HIDDEN
Definition: util.c:118
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
static HPALETTE palette
Definition: clipboard.c:1345
HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemoryEx(IDirect3DDevice9 *device, const void *src_data, UINT src_data_size, UINT size, UINT mip_levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mip_filter, D3DCOLOR color_key, D3DXIMAGE_INFO *src_info, PALETTEENTRY *palette, IDirect3DCubeTexture9 **cube_texture)
Definition: texture.c:1401
#define UnmapViewOfFile
Definition: compat.h:605
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005

◆ D3DXCreateCubeTextureFromFileInMemory()

HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemory ( struct IDirect3DDevice9 *  device,
const void data,
UINT  datasize,
struct IDirect3DCubeTexture9 **  texture 
)

Definition at line 935 of file texture.c.

937 {
938  TRACE("(%p, %p, %u, %p)\n", device, data, datasize, texture);
939 
942 }
Definition: devices.h:37
#define D3DX_DEFAULT
Definition: d3dx9.h:24
smooth NULL
Definition: ftsmooth.c:416
static SIZE_T datasize
Definition: asm.c:30
#define TRACE(s)
Definition: solgame.cpp:4
GLenum GLuint texture
Definition: glext.h:6295
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemoryEx(IDirect3DDevice9 *device, const void *src_data, UINT src_data_size, UINT size, UINT mip_levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mip_filter, D3DCOLOR color_key, D3DXIMAGE_INFO *src_info, PALETTEENTRY *palette, IDirect3DCubeTexture9 **cube_texture)
Definition: texture.c:1401

Referenced by test_D3DXCreateCubeTextureFromFileInMemory().

◆ D3DXCreateCubeTextureFromFileInMemoryEx()

HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemoryEx ( IDirect3DDevice9 *  device,
const void src_data,
UINT  src_data_size,
UINT  size,
UINT  mip_levels,
DWORD  usage,
D3DFORMAT  format,
D3DPOOL  pool,
DWORD  filter,
DWORD  mip_filter,
D3DCOLOR  color_key,
D3DXIMAGE_INFO src_info,
PALETTEENTRY palette,
IDirect3DCubeTexture9 **  cube_texture 
)

Definition at line 1401 of file texture.c.

1415 {
1416  HRESULT hr;
1417  D3DCAPS9 caps;
1418  UINT loaded_miplevels;
1419  D3DXIMAGE_INFO img_info;
1420  BOOL dynamic_texture;
1421  BOOL file_size = FALSE;
1422  BOOL file_format = FALSE;
1423  BOOL file_mip_levels = FALSE;
1424  IDirect3DCubeTexture9 *tex, *buftex;
1425 
1426  TRACE("(%p, %p, %u, %u, %u, %#x, %#x, %#x, %#x, %#x, %#x, %p, %p, %p)\n", device,
1427  src_data, src_data_size, size, mip_levels, usage, format, pool, filter, mip_filter,
1428  color_key, src_info, palette, cube_texture);
1429 
1430  if (!device || !cube_texture || !src_data || !src_data_size)
1431  return D3DERR_INVALIDCALL;
1432 
1433  hr = D3DXGetImageInfoFromFileInMemory(src_data, src_data_size, &img_info);
1434  if (FAILED(hr))
1435  return hr;
1436 
1437  if (img_info.ImageFileFormat != D3DXIFF_DDS)
1438  return D3DXERR_INVALIDDATA;
1439 
1440  if (img_info.Width != img_info.Height)
1441  return D3DXERR_INVALIDDATA;
1442 
1443  if (size == 0 || size == D3DX_DEFAULT_NONPOW2)
1444  size = img_info.Width;
1445  if (size == D3DX_DEFAULT)
1446  size = make_pow2(img_info.Width);
1447 
1449  format = img_info.Format;
1450 
1451  if (size == D3DX_FROM_FILE)
1452  {
1453  file_size = TRUE;
1454  size = img_info.Width;
1455  }
1456 
1457  if (format == D3DFMT_FROM_FILE)
1458  {
1459  file_format = TRUE;
1460  format = img_info.Format;
1461  }
1462 
1463  if (mip_levels == D3DX_FROM_FILE)
1464  {
1465  file_mip_levels = TRUE;
1466  mip_levels = img_info.MipLevels;
1467  }
1468 
1470  if (FAILED(hr))
1471  return hr;
1472 
1473  if ((file_size && size != img_info.Width)
1474  || (file_format && format != img_info.Format)
1475  || (file_mip_levels && mip_levels != img_info.MipLevels))
1476  return D3DERR_NOTAVAILABLE;
1477 
1479  if (FAILED(hr))
1480  return D3DERR_INVALIDCALL;
1481 
1482  if (mip_levels > img_info.MipLevels && (D3DFMT_DXT1 <= img_info.Format && img_info.Format <= D3DFMT_DXT5))
1483  {
1484  FIXME("Generation of mipmaps for compressed pixel formats is not supported yet.\n");
1485  mip_levels = img_info.MipLevels;
1486  }
1487 
1488  dynamic_texture = (caps.Caps2 & D3DCAPS2_DYNAMICTEXTURES) && (usage & D3DUSAGE_DYNAMIC);
1489  if (pool == D3DPOOL_DEFAULT && !dynamic_texture)
1490  {
1491  hr = D3DXCreateCubeTexture(device, size, mip_levels, usage, format, D3DPOOL_SYSTEMMEM, &buftex);
1492  tex = buftex;
1493  }
1494  else
1495  {
1496  hr = D3DXCreateCubeTexture(device, size, mip_levels, usage, format, pool, &tex);
1497  buftex = NULL;
1498  }
1499  if (FAILED(hr))
1500  return hr;
1501 
1502  hr = load_cube_texture_from_dds(tex, src_data, palette, filter, color_key, &img_info);
1503  if (FAILED(hr))
1504  {
1506  return hr;
1507  }
1508 
1509  loaded_miplevels = min(IDirect3DCubeTexture9_GetLevelCount(tex), img_info.MipLevels);
1510  hr = D3DXFilterTexture((IDirect3DBaseTexture9*) tex, palette, loaded_miplevels - 1, mip_filter);
1511  if (FAILED(hr))
1512  {
1514  return hr;
1515  }
1516 
1517  if (buftex)
1518  {
1519  hr = D3DXCreateCubeTexture(device, size, mip_levels, usage, format, pool, &tex);
1520  if (FAILED(hr))
1521  {
1523  return hr;
1524  }
1525 
1526  IDirect3DDevice9_UpdateTexture(device, (IDirect3DBaseTexture9 *)buftex, (IDirect3DBaseTexture9 *)tex);
1528  }
1529 
1530  if (src_info)
1531  *src_info = img_info;
1532 
1533  *cube_texture = tex;
1534  return D3D_OK;
1535 }
#define D3DUSAGE_DYNAMIC
Definition: d3d8types.h:99
HRESULT WINAPI D3DXCheckCubeTextureRequirements(struct IDirect3DDevice9 *device, UINT *size, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool)
Definition: texture.c:417
HRESULT hr
Definition: shlfolder.c:183
#define IDirect3DCubeTexture9_GetLevelCount(p)
Definition: d3d9.h:932
#define TRUE
Definition: types.h:120
#define D3DFMT_FROM_FILE
Definition: d3dx9.h:28
#define D3DX_FROM_FILE
Definition: d3dx9.h:27
#define D3DERR_INVALIDCALL
#define IDirect3DCubeTexture9_Release(p)
Definition: d3d9.h:919
static UINT make_pow2(UINT num)
Definition: texture.c:36
HRESULT load_cube_texture_from_dds(IDirect3DCubeTexture9 *cube_texture, const void *src_data, const PALETTEENTRY *palette, DWORD filter, D3DCOLOR color_key, const D3DXIMAGE_INFO *src_info) DECLSPEC_HIDDEN
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
UINT MipLevels
Definition: d3dx9tex.h:81
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
Definition: devices.h:37
#define IDirect3DDevice9_UpdateTexture(p, a, b)
Definition: d3d9.h:1538
#define FIXME(fmt,...)
Definition: debug.h:111
#define D3DX_DEFAULT
Definition: d3dx9.h:24
#define D3DERR_NOTAVAILABLE
Definition: d3d8.h:84
smooth NULL
Definition: ftsmooth.c:416
HRESULT WINAPI D3DXFilterTexture(IDirect3DBaseTexture9 *texture, const PALETTEENTRY *palette, UINT srclevel, DWORD filter)
Definition: texture.c:65
DWORD Caps2
Definition: d3d9caps.h:267
D3DXIMAGE_FILEFORMAT ImageFileFormat
Definition: d3dx9tex.h:84
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
D3DFORMAT Format
Definition: d3dx9tex.h:82
LONG HRESULT
Definition: typedefs.h:79
#define D3DX_DEFAULT_NONPOW2
Definition: d3dx9.h:25
HRESULT WINAPI D3DXCreateCubeTexture(struct IDirect3DDevice9 *device, UINT size, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DCubeTexture9 **texture)
Definition: texture.c:913
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
static HPALETTE palette
Definition: clipboard.c:1345
#define D3D_OK
Definition: d3d.h:106
#define IDirect3DDevice9_GetDeviceCaps(p, a)
Definition: d3d9.h:1514
#define min(a, b)
Definition: monoChain.cc:55
unsigned int UINT
Definition: ndis.h:50
HRESULT WINAPI D3DXGetImageInfoFromFileInMemory(const void *data, UINT datasize, D3DXIMAGE_INFO *info)
Definition: surface.c:945
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005
#define file_size(inode)
Definition: reiserfs_fs.h:1869
#define D3DCAPS2_DYNAMICTEXTURES
Definition: d3d8caps.h:25

Referenced by D3DXCreateCubeTextureFromFileA(), D3DXCreateCubeTextureFromFileExA(), D3DXCreateCubeTextureFromFileExW(), D3DXCreateCubeTextureFromFileInMemory(), D3DXCreateCubeTextureFromFileW(), and test_D3DXCreateCubeTextureFromFileInMemoryEx().

◆ D3DXCreateCubeTextureFromFileW()

HRESULT WINAPI D3DXCreateCubeTextureFromFileW ( IDirect3DDevice9 *  device,
const WCHAR src_filename,
IDirect3DCubeTexture9 **  cube_texture 
)

Definition at line 1572 of file texture.c.

1575 {
1576  HRESULT hr;
1577  void *data;
1578  DWORD data_size;
1579 
1580  TRACE("(%p, %s, %p): relay\n", device, wine_dbgstr_w(src_filename), cube_texture);
1581 
1582  hr = map_view_of_file(src_filename, &data, &data_size);
1583  if (FAILED(hr)) return D3DXERR_INVALIDDATA;
1584 
1587 
1589  return hr;
1590 }
HRESULT hr
Definition: shlfolder.c:183
char * wine_dbgstr_w(const wchar_t *wstr)
Definition: atltest.h:87
Definition: devices.h:37
#define D3DX_DEFAULT
Definition: d3dx9.h:24
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
HRESULT map_view_of_file(const WCHAR *filename, void **buffer, DWORD *length) DECLSPEC_HIDDEN
Definition: util.c:118
HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemoryEx(IDirect3DDevice9 *device, const void *src_data, UINT src_data_size, UINT size, UINT mip_levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mip_filter, D3DCOLOR color_key, D3DXIMAGE_INFO *src_info, PALETTEENTRY *palette, IDirect3DCubeTexture9 **cube_texture)
Definition: texture.c:1401
#define UnmapViewOfFile
Definition: compat.h:605

◆ D3DXCreateTexture()

HRESULT WINAPI D3DXCreateTexture ( struct IDirect3DDevice9 *  device,
UINT  width,
UINT  height,
UINT  miplevels,
DWORD  usage,
D3DFORMAT  format,
D3DPOOL  pool,
struct IDirect3DTexture9 **  texture 
)

Definition at line 526 of file texture.c.

528 {
529  HRESULT hr;
530 
531  TRACE("device %p, width %u, height %u, miplevels %u, usage %#x, format %#x, pool %#x, texture %p.\n",
532  device, width, height, miplevels, usage, format, pool, texture);
533 
534  if (!device || !texture)
535  return D3DERR_INVALIDCALL;
536 
538  return hr;
539 
541 }
GLint GLint GLsizei width
Definition: gl.h:1546
HRESULT hr
Definition: shlfolder.c:183
#define D3DERR_INVALIDCALL
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
Definition: devices.h:37
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
GLenum GLuint texture
Definition: glext.h:6295
LONG HRESULT
Definition: typedefs.h:79
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
#define IDirect3DDevice9_CreateTexture(p, a, b, c, d, e, f, g, h)
Definition: d3d9.h:1530
HRESULT WINAPI D3DXCheckTextureRequirements(struct IDirect3DDevice9 *device, UINT *width, UINT *height, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool)
Definition: texture.c:209

Referenced by D3DXCreateTextureFromFileInMemoryEx(), ID3DXFontImpl_DrawTextW(), test_D3DXCreateTexture(), and test_effect_setvalue_object().

◆ D3DXCreateTextureFromFileA()

HRESULT WINAPI D3DXCreateTextureFromFileA ( struct IDirect3DDevice9 *  device,
const char srcfile,
struct IDirect3DTexture9 **  texture 
)

Definition at line 818 of file texture.c.

820 {
821  TRACE("(%p, %s, %p)\n", device, debugstr_a(srcfile), texture);
822 
825 }
Definition: devices.h:37
#define D3DX_DEFAULT
Definition: d3dx9.h:24
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define debugstr_a
Definition: kernel32.h:31
GLenum GLuint texture
Definition: glext.h:6295
HRESULT WINAPI D3DXCreateTextureFromFileExA(struct IDirect3DDevice9 *device, const char *srcfile, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture)
Definition: texture.c:789

◆ D3DXCreateTextureFromFileExA()

HRESULT WINAPI D3DXCreateTextureFromFileExA ( struct IDirect3DDevice9 *  device,
const char srcfile,
UINT  width,
UINT  height,
UINT  miplevels,
DWORD  usage,
D3DFORMAT  format,
D3DPOOL  pool,
DWORD  filter,
DWORD  mipfilter,
D3DCOLOR  colorkey,
D3DXIMAGE_INFO srcinfo,
PALETTEENTRY palette,
struct IDirect3DTexture9 **  texture 
)

Definition at line 789 of file texture.c.

793 {
794  WCHAR *widename;
795  HRESULT hr;
796  DWORD len;
797 
798  TRACE("device %p, srcfile %s, width %u, height %u, miplevels %u, usage %#x, format %#x, "
799  "pool %#x, filter %#x, mipfilter %#x, colorkey 0x%08x, srcinfo %p, palette %p, texture %p.\n",
800  device, debugstr_a(srcfile), width, height, miplevels, usage, format,
801  pool, filter, mipfilter, colorkey, srcinfo, palette, texture);
802 
803  if (!device || !srcfile || !texture)
804  return D3DERR_INVALIDCALL;
805 
806  len = MultiByteToWideChar(CP_ACP, 0, srcfile, -1, NULL, 0);
807  widename = HeapAlloc(GetProcessHeap(), 0, len * sizeof(*widename));
808  MultiByteToWideChar(CP_ACP, 0, srcfile, -1, widename, len);
809 
810  hr = D3DXCreateTextureFromFileExW(device, widename, width, height, miplevels,
811  usage, format, pool, filter, mipfilter,
812  colorkey, srcinfo, palette, texture);
813 
814  HeapFree(GetProcessHeap(), 0, widename);
815  return hr;
816 }
GLint GLint GLsizei width
Definition: gl.h:1546
HRESULT hr
Definition: shlfolder.c:183
#define CP_ACP
Definition: compat.h:109
#define D3DERR_INVALIDCALL
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
Definition: devices.h:37
smooth NULL
Definition: ftsmooth.c:416
HRESULT WINAPI D3DXCreateTextureFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture)
Definition: texture.c:760
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define debugstr_a
Definition: kernel32.h:31
GLenum GLuint texture
Definition: glext.h:6295
LONG HRESULT
Definition: typedefs.h:79
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
GLenum GLsizei len
Definition: glext.h:6722
static HPALETTE palette
Definition: clipboard.c:1345
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
#define MultiByteToWideChar
Definition: compat.h:110
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005
#define HeapFree(x, y, z)
Definition: compat.h:594

Referenced by D3DXCreateTextureFromFileA().

◆ D3DXCreateTextureFromFileExW()

HRESULT WINAPI D3DXCreateTextureFromFileExW ( struct IDirect3DDevice9 *  device,
const WCHAR srcfile,
UINT  width,
UINT  height,
UINT  miplevels,
DWORD  usage,
D3DFORMAT  format,
D3DPOOL  pool,
DWORD  filter,
DWORD  mipfilter,
D3DCOLOR  colorkey,
D3DXIMAGE_INFO srcinfo,
PALETTEENTRY palette,
struct IDirect3DTexture9 **  texture 
)

Definition at line 760 of file texture.c.

764 {
765  void *buffer;
766  HRESULT hr;
767  DWORD size;
768 
769  TRACE("device %p, srcfile %s, width %u, height %u, miplevels %u, usage %#x, format %#x, "
770  "pool %#x, filter %#x, mipfilter %#x, colorkey 0x%08x, srcinfo %p, palette %p, texture %p.\n",
771  device, debugstr_w(srcfile), width, height, miplevels, usage, format,
772  pool, filter, mipfilter, colorkey, srcinfo, palette, texture);
773 
774  if (!srcfile)
775  return D3DERR_INVALIDCALL;
776 
777  hr = map_view_of_file(srcfile, &buffer, &size);
778  if (FAILED(hr))
779  return D3DXERR_INVALIDDATA;
780 
782  filter, mipfilter, colorkey, srcinfo, palette, texture);
783 
785 
786  return hr;
787 }
GLint GLint GLsizei width
Definition: gl.h:1546
HRESULT hr
Definition: shlfolder.c:183
HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatasize, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture)
Definition: texture.c:566
#define D3DERR_INVALIDCALL
GLuint buffer
Definition: glext.h:5915
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
Definition: devices.h:37
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
GLenum GLuint texture
Definition: glext.h:6295
LONG HRESULT
Definition: typedefs.h:79
unsigned long DWORD
Definition: ntddk_ex.h:95
HRESULT map_view_of_file(const WCHAR *filename, void **buffer, DWORD *length) DECLSPEC_HIDDEN
Definition: util.c:118
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
static HPALETTE palette
Definition: clipboard.c:1345
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
#define UnmapViewOfFile
Definition: compat.h:605
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005

Referenced by D3DXCreateTextureFromFileExA(), and D3DXCreateTextureFromFileW().

◆ D3DXCreateTextureFromFileInMemory()

HRESULT WINAPI D3DXCreateTextureFromFileInMemory ( struct IDirect3DDevice9 *  device,
const void srcdata,
UINT  srcdatasize,
struct IDirect3DTexture9 **  texture 
)

Definition at line 751 of file texture.c.

753 {
754  TRACE("(%p, %p, %d, %p)\n", device, srcdata, srcdatasize, texture);
755 
758 }
HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatasize, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture)
Definition: texture.c:566
Definition: devices.h:37
#define D3DX_DEFAULT
Definition: d3dx9.h:24
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
GLenum GLuint texture
Definition: glext.h:6295

Referenced by test_D3DXCreateTextureFromFileInMemory().

◆ D3DXCreateTextureFromFileInMemoryEx()

HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx ( struct IDirect3DDevice9 *  device,
const void srcdata,
UINT  srcdatasize,
UINT  width,
UINT  height,
UINT  miplevels,
DWORD  usage,
D3DFORMAT  format,
D3DPOOL  pool,
DWORD  filter,
DWORD  mipfilter,
D3DCOLOR  colorkey,
D3DXIMAGE_INFO srcinfo,
PALETTEENTRY palette,
struct IDirect3DTexture9 **  texture 
)

Definition at line 566 of file texture.c.

570 {
571  IDirect3DTexture9 **texptr;
572  IDirect3DTexture9 *buftex;
573  IDirect3DSurface9 *surface;
574  BOOL dynamic_texture, format_specified = FALSE;
575  D3DXIMAGE_INFO imginfo;
576  UINT loaded_miplevels, skip_levels;
577  D3DCAPS9 caps;
578  HRESULT hr;
579 
580  TRACE("device %p, srcdata %p, srcdatasize %u, width %u, height %u, miplevels %u,"
581  " usage %#x, format %#x, pool %#x, filter %#x, mipfilter %#x, colorkey %#x,"
582  " srcinfo %p, palette %p, texture %p.\n",
583  device, srcdata, srcdatasize, width, height, miplevels, usage, format, pool,
584  filter, mipfilter, colorkey, srcinfo, palette, texture);
585 
586  /* check for invalid parameters */
587  if (!device || !texture || !srcdata || !srcdatasize)
588  return D3DERR_INVALIDCALL;
589 
590  hr = D3DXGetImageInfoFromFileInMemory(srcdata, srcdatasize, &imginfo);
591  if (FAILED(hr))
592  {
593  FIXME("Unrecognized file format, returning failure.\n");
594  *texture = NULL;
595  return hr;
596  }
597 
598  /* handle default values */
599  if (width == 0 || width == D3DX_DEFAULT_NONPOW2)
600  width = imginfo.Width;
601 
602  if (height == 0 || height == D3DX_DEFAULT_NONPOW2)
603  height = imginfo.Height;
604 
605  if (width == D3DX_DEFAULT)
606  width = make_pow2(imginfo.Width);
607 
608  if (height == D3DX_DEFAULT)
609  height = make_pow2(imginfo.Height);
610 
612  format = imginfo.Format;
613  else
614  format_specified = TRUE;
615 
616  if (width == D3DX_FROM_FILE)
617  {
618  width = imginfo.Width;
619  }
620 
621  if (height == D3DX_FROM_FILE)
622  {
623  height = imginfo.Height;
624  }
625 
626  if (format == D3DFMT_FROM_FILE)
627  {
628  format = imginfo.Format;
629  }
630 
631  if (miplevels == D3DX_FROM_FILE)
632  {
633  miplevels = imginfo.MipLevels;
634  }
635 
636  skip_levels = mipfilter != D3DX_DEFAULT ? mipfilter >> D3DX_SKIP_DDS_MIP_LEVELS_SHIFT : 0;
637  if (skip_levels && imginfo.MipLevels > skip_levels)
638  {
639  TRACE("Skipping the first %u (of %u) levels of a DDS mipmapped texture.\n",
640  skip_levels, imginfo.MipLevels);
641  TRACE("Texture level 0 dimensions are %ux%u.\n", imginfo.Width, imginfo.Height);
642  width >>= skip_levels;
643  height >>= skip_levels;
644  miplevels -= skip_levels;
645  }
646  else
647  {
648  skip_levels = 0;
649  }
650 
651  /* fix texture creation parameters */
653  if (FAILED(hr))
654  {
655  FIXME("Couldn't find suitable texture parameters.\n");
656  *texture = NULL;
657  return hr;
658  }
659 
660  if (colorkey && !format_specified)
662 
663  if (imginfo.MipLevels < miplevels && (D3DFMT_DXT1 <= imginfo.Format && imginfo.Format <= D3DFMT_DXT5))
664  {
665  FIXME("Generation of mipmaps for compressed pixel formats is not implemented yet.\n");
666  miplevels = imginfo.MipLevels;
667  }
668  if (imginfo.ResourceType == D3DRTYPE_VOLUMETEXTURE
669  && D3DFMT_DXT1 <= imginfo.Format && imginfo.Format <= D3DFMT_DXT5 && miplevels > 1)
670  {
671  FIXME("Generation of mipmaps for compressed pixel formats is not implemented yet.\n");
672  miplevels = 1;
673  }
674 
676  return D3DERR_INVALIDCALL;
677 
678  /* Create the to-be-filled texture */
679  dynamic_texture = (caps.Caps2 & D3DCAPS2_DYNAMICTEXTURES) && (usage & D3DUSAGE_DYNAMIC);
680  if (pool == D3DPOOL_DEFAULT && !dynamic_texture)
681  {
682  hr = D3DXCreateTexture(device, width, height, miplevels, 0, format, D3DPOOL_SYSTEMMEM, &buftex);
683  texptr = &buftex;
684  }
685  else
686  {
688  texptr = texture;
689  }
690 
691  if (FAILED(hr))
692  {
693  FIXME("Texture creation failed.\n");
694  *texture = NULL;
695  return hr;
696  }
697 
698  TRACE("Texture created correctly. Now loading the texture data into it.\n");
699  if (imginfo.ImageFileFormat != D3DXIFF_DDS)
700  {
701  IDirect3DTexture9_GetSurfaceLevel(*texptr, 0, &surface);
702  hr = D3DXLoadSurfaceFromFileInMemory(surface, palette, NULL, srcdata, srcdatasize, NULL, filter, colorkey, NULL);
703  IDirect3DSurface9_Release(surface);
704  loaded_miplevels = min(IDirect3DTexture9_GetLevelCount(*texptr), imginfo.MipLevels);
705  }
706  else
707  {
708  hr = load_texture_from_dds(*texptr, srcdata, palette, filter, colorkey, &imginfo, skip_levels,
709  &loaded_miplevels);
710  }
711 
712  if (FAILED(hr))
713  {
714  FIXME("Texture loading failed.\n");
715  IDirect3DTexture9_Release(*texptr);
716  *texture = NULL;
717  return hr;
718  }
719 
720  hr = D3DXFilterTexture((IDirect3DBaseTexture9*) *texptr, palette, loaded_miplevels - 1, mipfilter);
721  if (FAILED(hr))
722  {
723  FIXME("Texture filtering failed.\n");
724  IDirect3DTexture9_Release(*texptr);
725  *texture = NULL;
726  return hr;
727  }
728 
729  /* Move the data to the actual texture if necessary */
730  if (texptr == &buftex)
731  {
733 
734  if (FAILED(hr))
735  {
737  *texture = NULL;
738  return hr;
739  }
740 
741  IDirect3DDevice9_UpdateTexture(device, (IDirect3DBaseTexture9*)buftex, (IDirect3DBaseTexture9*)(*texture));
743  }
744 
745  if (srcinfo)
746  *srcinfo = imginfo;
747 
748  return D3D_OK;
749 }
#define D3DUSAGE_DYNAMIC
Definition: d3d8types.h:99
#define IDirect3DSurface9_Release(p)
Definition: d3d9.h:622
GLint GLint GLsizei width
Definition: gl.h:1546
HRESULT hr
Definition: shlfolder.c:183
#define TRUE
Definition: types.h:120
#define IDirect3DTexture9_GetSurfaceLevel(p, a, b)
Definition: d3d9.h:1033
HRESULT WINAPI D3DXCreateTexture(struct IDirect3DDevice9 *device, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DTexture9 **texture)
Definition: texture.c:526
#define D3DFMT_FROM_FILE
Definition: d3dx9.h:28
#define IDirect3DTexture9_Release(p)
Definition: d3d9.h:1014
#define D3DX_FROM_FILE
Definition: d3dx9.h:27
#define D3DERR_INVALIDCALL
#define IDirect3DTexture9_GetLevelCount(p)
Definition: d3d9.h:1027
static UINT make_pow2(UINT num)
Definition: texture.c:36
static D3DFORMAT get_alpha_replacement_format(D3DFORMAT format)
Definition: texture.c:543
D3DRESOURCETYPE ResourceType
Definition: d3dx9tex.h:83
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
UINT MipLevels
Definition: d3dx9tex.h:81
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
Definition: devices.h:37
#define IDirect3DDevice9_UpdateTexture(p, a, b)
Definition: d3d9.h:1538
#define FIXME(fmt,...)
Definition: debug.h:111
#define D3DX_DEFAULT
Definition: d3dx9.h:24
smooth NULL
Definition: ftsmooth.c:416
HRESULT WINAPI D3DXFilterTexture(IDirect3DBaseTexture9 *texture, const PALETTEENTRY *palette, UINT srclevel, DWORD filter)
Definition: texture.c:65
DWORD Caps2
Definition: d3d9caps.h:267
#define D3DX_SKIP_DDS_MIP_LEVELS_SHIFT
Definition: d3dx9tex.h:43
D3DXIMAGE_FILEFORMAT ImageFileFormat
Definition: d3dx9tex.h:84
#define TRACE(s)
Definition: solgame.cpp:4
D3DFORMAT Format
Definition: d3dx9tex.h:82
GLenum GLuint texture
Definition: glext.h:6295
LONG HRESULT
Definition: typedefs.h:79
#define D3DX_DEFAULT_NONPOW2
Definition: d3dx9.h:25
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
static HPALETTE palette
Definition: clipboard.c:1345
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
#define D3D_OK
Definition: d3d.h:106
#define IDirect3DDevice9_GetDeviceCaps(p, a)
Definition: d3d9.h:1514
#define min(a, b)
Definition: monoChain.cc:55
unsigned int UINT
Definition: ndis.h:50
HRESULT WINAPI D3DXCheckTextureRequirements(struct IDirect3DDevice9 *device, UINT *width, UINT *height, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool)
Definition: texture.c:209
HRESULT WINAPI D3DXGetImageInfoFromFileInMemory(const void *data, UINT datasize, D3DXIMAGE_INFO *info)
Definition: surface.c:945
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005
HRESULT WINAPI D3DXLoadSurfaceFromFileInMemory(IDirect3DSurface9 *pDestSurface, const PALETTEENTRY *pDestPalette, const RECT *pDestRect, const void *pSrcData, UINT SrcDataSize, const RECT *pSrcRect, DWORD dwFilter, D3DCOLOR Colorkey, D3DXIMAGE_INFO *pSrcInfo)
Definition: surface.c:1205
HRESULT load_texture_from_dds(IDirect3DTexture9 *texture, const void *src_data, const PALETTEENTRY *palette, DWORD filter, D3DCOLOR color_key, const D3DXIMAGE_INFO *src_info, unsigned int skip_levels, unsigned int *loaded_miplevels) DECLSPEC_HIDDEN
Definition: surface.c:697
#define D3DCAPS2_DYNAMICTEXTURES
Definition: d3d8caps.h:25

Referenced by D3DXCreateTextureFromFileExW(), D3DXCreateTextureFromFileInMemory(), D3DXCreateTextureFromResourceExA(), D3DXCreateTextureFromResourceExW(), and test_D3DXCreateTextureFromFileInMemoryEx().

◆ D3DXCreateTextureFromFileW()

HRESULT WINAPI D3DXCreateTextureFromFileW ( struct IDirect3DDevice9 *  device,
const WCHAR srcfile,
struct IDirect3DTexture9 **  texture 
)

Definition at line 827 of file texture.c.

829 {
830  TRACE("(%p, %s, %p)\n", device, debugstr_w(srcfile), texture);
831 
834 }
Definition: devices.h:37
#define debugstr_w
Definition: kernel32.h:32
#define D3DX_DEFAULT
Definition: d3dx9.h:24
smooth NULL
Definition: ftsmooth.c:416
HRESULT WINAPI D3DXCreateTextureFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture)
Definition: texture.c:760
#define TRACE(s)
Definition: solgame.cpp:4
GLenum GLuint texture
Definition: glext.h:6295

◆ D3DXCreateTextureFromResourceA()

HRESULT WINAPI D3DXCreateTextureFromResourceA ( struct IDirect3DDevice9 *  device,
HMODULE  srcmodule,
const char resource,
struct IDirect3DTexture9 **  texture 
)

Definition at line 837 of file texture.c.

839 {
840  TRACE("(%p, %s): relay\n", srcmodule, debugstr_a(resource));
841 
844 }
HRESULT WINAPI D3DXCreateTextureFromResourceExA(struct IDirect3DDevice9 *device, HMODULE srcmodule, const char *resource, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture)
Definition: texture.c:855
Definition: devices.h:37
#define D3DX_DEFAULT
Definition: d3dx9.h:24
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define debugstr_a
Definition: kernel32.h:31
GLenum GLuint texture
Definition: glext.h:6295

Referenced by test_D3DXCreateTexture().

◆ D3DXCreateTextureFromResourceExA()

HRESULT WINAPI D3DXCreateTextureFromResourceExA ( struct IDirect3DDevice9 *  device,
HMODULE  srcmodule,
const char resource,
UINT  width,
UINT  height,
UINT  miplevels,
DWORD  usage,
D3DFORMAT  format,
D3DPOOL  pool,
DWORD  filter,
DWORD  mipfilter,
D3DCOLOR  colorkey,
D3DXIMAGE_INFO srcinfo,
PALETTEENTRY palette,
struct IDirect3DTexture9 **  texture 
)

Definition at line 855 of file texture.c.

859 {
860  HRSRC resinfo;
861  void *buffer;
862  DWORD size;
863 
864  TRACE("device %p, srcmodule %p, resource %s, width %u, height %u, miplevels %u, usage %#x, format %#x, "
865  "pool %#x, filter %#x, mipfilter %#x, colorkey 0x%08x, srcinfo %p, palette %p, texture %p.\n",
866  device, srcmodule, debugstr_a(resource), width, height, miplevels, usage, format,
867  pool, filter, mipfilter, colorkey, srcinfo, palette, texture);
868 
869  if (!device || !texture)
870  return D3DERR_INVALIDCALL;
871 
872  if (!(resinfo = FindResourceA(srcmodule, resource, (const char *)RT_RCDATA))
873  /* Try loading the resource as bitmap data (which is in DIB format D3DXIFF_DIB) */
874  && !(resinfo = FindResourceA(srcmodule, resource, (const char *)RT_BITMAP)))
875  return D3DXERR_INVALIDDATA;
876 
877  if (FAILED(load_resource_into_memory(srcmodule, resinfo, &buffer, &size)))
878  return D3DXERR_INVALIDDATA;
879 
881  usage, format, pool, filter, mipfilter, colorkey, srcinfo, palette, texture);
882 }
GLint GLint GLsizei width
Definition: gl.h:1546
HRSRC WINAPI FindResourceA(HMODULE hModule, LPCSTR name, LPCSTR type)
Definition: res.c:155
HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatasize, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture)
Definition: texture.c:566
#define D3DERR_INVALIDCALL
GLuint buffer
Definition: glext.h:5915
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
Definition: devices.h:37
HRESULT load_resource_into_memory(HMODULE module, HRSRC resinfo, void **buffer, DWORD *length) DECLSPEC_HIDDEN
Definition: util.c:166
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define debugstr_a
Definition: kernel32.h:31
GLenum GLuint texture
Definition: glext.h:6295
unsigned long DWORD
Definition: ntddk_ex.h:95
#define RT_RCDATA
Definition: pedump.c:372
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
static HPALETTE palette
Definition: clipboard.c:1345
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
#define RT_BITMAP
Definition: pedump.c:364
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005

Referenced by D3DXCreateTextureFromResourceA(), and test_D3DXCreateTexture().

◆ D3DXCreateTextureFromResourceExW()

HRESULT WINAPI D3DXCreateTextureFromResourceExW ( struct IDirect3DDevice9 *  device,
HMODULE  srcmodule,
const WCHAR resource,
UINT  width,
UINT  height,
UINT  miplevels,
DWORD  usage,
D3DFORMAT  format,
D3DPOOL  pool,
DWORD  filter,
DWORD  mipfilter,
D3DCOLOR  colorkey,
D3DXIMAGE_INFO srcinfo,
PALETTEENTRY palette,
struct IDirect3DTexture9 **  texture 
)

Definition at line 884 of file texture.c.

888 {
889  HRSRC resinfo;
890  void *buffer;
891  DWORD size;
892 
893  TRACE("device %p, srcmodule %p, resource %s, width %u, height %u, miplevels %u, usage %#x, format %#x, "
894  "pool %#x, filter %#x, mipfilter %#x, colorkey 0x%08x, srcinfo %p, palette %p, texture %p.\n",
895  device, srcmodule, debugstr_w(resource), width, height, miplevels, usage, format,
896  pool, filter, mipfilter, colorkey, srcinfo, palette, texture);
897 
898  if (!device || !texture)
899  return D3DERR_INVALIDCALL;
900 
901  if (!(resinfo = FindResourceW(srcmodule, resource, (const WCHAR *)RT_RCDATA))
902  /* Try loading the resource as bitmap data (which is in DIB format D3DXIFF_DIB) */
903  && !(resinfo = FindResourceW(srcmodule, resource, (const WCHAR *)RT_BITMAP)))
904  return D3DXERR_INVALIDDATA;
905 
906  if (FAILED(load_resource_into_memory(srcmodule, resinfo, &buffer, &size)))
907  return D3DXERR_INVALIDDATA;
908 
910  usage, format, pool, filter, mipfilter, colorkey, srcinfo, palette, texture);
911 }
GLint GLint GLsizei width
Definition: gl.h:1546
HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatasize, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture)
Definition: texture.c:566
#define D3DERR_INVALIDCALL
GLuint buffer
Definition: glext.h:5915
HRSRC WINAPI FindResourceW(HINSTANCE hModule, LPCWSTR name, LPCWSTR type)
Definition: res.c:176
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
Definition: devices.h:37
#define debugstr_w
Definition: kernel32.h:32
HRESULT load_resource_into_memory(HMODULE module, HRSRC resinfo, void **buffer, DWORD *length) DECLSPEC_HIDDEN
Definition: util.c:166
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
__wchar_t WCHAR
Definition: xmlstorage.h:180
GLenum GLuint texture
Definition: glext.h:6295
unsigned long DWORD
Definition: ntddk_ex.h:95
#define RT_RCDATA
Definition: pedump.c:372
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
static HPALETTE palette
Definition: clipboard.c:1345
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
#define RT_BITMAP
Definition: pedump.c:364
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005

Referenced by D3DXCreateTextureFromResourceW().

◆ D3DXCreateTextureFromResourceW()

HRESULT WINAPI D3DXCreateTextureFromResourceW ( struct IDirect3DDevice9 *  device,
HMODULE  srcmodule,
const WCHAR resource,
struct IDirect3DTexture9 **  texture 
)

Definition at line 846 of file texture.c.

848 {
849  TRACE("(%p, %s): relay\n", srcmodule, debugstr_w(resource));
850 
853 }
Definition: devices.h:37
#define debugstr_w
Definition: kernel32.h:32
#define D3DX_DEFAULT
Definition: d3dx9.h:24
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
GLenum GLuint texture
Definition: glext.h:6295
HRESULT WINAPI D3DXCreateTextureFromResourceExW(struct IDirect3DDevice9 *device, HMODULE srcmodule, const WCHAR *resource, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo, PALETTEENTRY *palette, struct IDirect3DTexture9 **texture)
Definition: texture.c:884

◆ D3DXCreateVolumeTexture()

HRESULT WINAPI D3DXCreateVolumeTexture ( struct IDirect3DDevice9 *  device,
UINT  width,
UINT  height,
UINT  depth,
UINT  miplevels,
DWORD  usage,
D3DFORMAT  format,
D3DPOOL  pool,
struct IDirect3DVolumeTexture9 **  texture 
)

Definition at line 944 of file texture.c.

946 {
947  HRESULT hr;
948 
949  TRACE("(%p, %u, %u, %u, %u, %#x, %#x, %#x, %p)\n", device, width, height, depth,
950  miplevels, usage, format, pool, texture);
951 
952  if (!device || !texture)
953  return D3DERR_INVALIDCALL;
954 
956  &miplevels, usage, &format, pool);
957 
958  if (FAILED(hr))
959  {
960  TRACE("D3DXCheckVolumeTextureRequirements failed\n");
961  return hr;
962  }
963 
966 }
GLint GLint GLsizei width
Definition: gl.h:1546
#define IDirect3DDevice9_CreateVolumeTexture(p, a, b, c, d, e, f, g, h, i)
Definition: d3d9.h:1531
HRESULT hr
Definition: shlfolder.c:183
#define D3DERR_INVALIDCALL
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
Definition: devices.h:37
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
GLenum GLuint texture
Definition: glext.h:6295
LONG HRESULT
Definition: typedefs.h:79
GLint GLint GLsizei GLsizei GLsizei depth
Definition: gl.h:1546
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
HRESULT WINAPI D3DXCheckVolumeTextureRequirements(struct IDirect3DDevice9 *device, UINT *width, UINT *height, UINT *depth, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool)
Definition: texture.c:453
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546

Referenced by D3DXCreateVolumeTextureFromFileInMemoryEx().

◆ D3DXCreateVolumeTextureFromFileA()

HRESULT WINAPI D3DXCreateVolumeTextureFromFileA ( IDirect3DDevice9 *  device,
const char filename,
IDirect3DVolumeTexture9 **  volume_texture 
)

Definition at line 968 of file texture.c.

971 {
972  int len;
973  HRESULT hr;
974  void *data;
975  DWORD data_size;
976  WCHAR *filenameW;
977 
978  TRACE("(%p, %s, %p): relay\n",
979  device, debugstr_a(filename), volume_texture);
980 
981  if (!filename) return D3DERR_INVALIDCALL;
982 
983  len = MultiByteToWideChar(CP_ACP, 0, filename, -1, NULL, 0);
984  filenameW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
985  if (!filenameW) return E_OUTOFMEMORY;
987 
988  hr = map_view_of_file(filenameW, &data, &data_size);
990  if (FAILED(hr)) return D3DXERR_INVALIDDATA;
991 
994 
996  return hr;
997 }
HRESULT hr
Definition: shlfolder.c:183
#define CP_ACP
Definition: compat.h:109
#define D3DERR_INVALIDCALL
const char * filename
Definition: ioapi.h:135
static const WCHAR filenameW[]
Definition: amstream.c:41
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
Definition: devices.h:37
#define D3DX_DEFAULT
Definition: d3dx9.h:24
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define debugstr_a
Definition: kernel32.h:31
LONG HRESULT
Definition: typedefs.h:79
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
HRESULT map_view_of_file(const WCHAR *filename, void **buffer, DWORD *length) DECLSPEC_HIDDEN
Definition: util.c:118
GLenum GLsizei len
Definition: glext.h:6722
HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemoryEx(IDirect3DDevice9 *device, const void *data, UINT data_size, UINT width, UINT height, UINT depth, UINT mip_levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mip_filter, D3DCOLOR color_key, D3DXIMAGE_INFO *info, PALETTEENTRY *palette, IDirect3DVolumeTexture9 **volume_texture)
Definition: texture.c:1118
#define MultiByteToWideChar
Definition: compat.h:110
#define UnmapViewOfFile
Definition: compat.h:605
#define HeapFree(x, y, z)
Definition: compat.h:594

◆ D3DXCreateVolumeTextureFromFileExA()

HRESULT WINAPI D3DXCreateVolumeTextureFromFileExA ( IDirect3DDevice9 *  device,
const char filename,
UINT  width,
UINT  height,
UINT  depth,
UINT  mip_levels,
DWORD  usage,
D3DFORMAT  format,
D3DPOOL  pool,
DWORD  filter,
DWORD  mip_filter,
D3DCOLOR  color_key,
D3DXIMAGE_INFO src_info,
PALETTEENTRY palette,
IDirect3DVolumeTexture9 **  volume_texture 
)

Definition at line 1022 of file texture.c.

1037 {
1038  int len;
1039  HRESULT hr;
1040  WCHAR *filenameW;
1041  void *data;
1042  DWORD data_size;
1043 
1044  TRACE("(%p, %s, %u, %u, %u, %u, %#x, %#x, %#x, %#x, %#x, %#x, %p, %p, %p): relay\n",
1045  device, debugstr_a(filename), width, height, depth, mip_levels,
1046  usage, format, pool, filter, mip_filter, color_key, src_info,
1047  palette, volume_texture);
1048 
1049  if (!filename) return D3DERR_INVALIDCALL;
1050 
1051  len = MultiByteToWideChar(CP_ACP, 0, filename, -1, NULL, 0);
1052  filenameW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1053  if (!filenameW) return E_OUTOFMEMORY;
1055 
1056  hr = map_view_of_file(filenameW, &data, &data_size);
1058  if (FAILED(hr)) return D3DXERR_INVALIDDATA;
1059 
1061  mip_levels, usage, format, pool, filter, mip_filter, color_key, src_info, palette,
1062  volume_texture);
1063 
1065  return hr;
1066 }
GLint GLint GLsizei width
Definition: gl.h:1546
HRESULT hr
Definition: shlfolder.c:183
#define CP_ACP
Definition: compat.h:109
#define D3DERR_INVALIDCALL
const char * filename
Definition: ioapi.h:135
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
static const WCHAR filenameW[]
Definition: amstream.c:41
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
Definition: devices.h:37
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define debugstr_a
Definition: kernel32.h:31
LONG HRESULT
Definition: typedefs.h:79
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
HRESULT map_view_of_file(const WCHAR *filename, void **buffer, DWORD *length) DECLSPEC_HIDDEN
Definition: util.c:118
GLint GLint GLsizei GLsizei GLsizei depth
Definition: gl.h:1546
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
GLenum GLsizei len
Definition: glext.h:6722
static HPALETTE palette
Definition: clipboard.c:1345
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemoryEx(IDirect3DDevice9 *device, const void *data, UINT data_size, UINT width, UINT height, UINT depth, UINT mip_levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mip_filter, D3DCOLOR color_key, D3DXIMAGE_INFO *info, PALETTEENTRY *palette, IDirect3DVolumeTexture9 **volume_texture)
Definition: texture.c:1118
#define MultiByteToWideChar
Definition: compat.h:110
#define UnmapViewOfFile
Definition: compat.h:605
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005
#define HeapFree(x, y, z)
Definition: compat.h:594

◆ D3DXCreateVolumeTextureFromFileExW()

HRESULT WINAPI D3DXCreateVolumeTextureFromFileExW ( IDirect3DDevice9 *  device,
const WCHAR filename,
UINT  width,
UINT  height,
UINT  depth,
UINT  mip_levels,
DWORD  usage,
D3DFORMAT  format,
D3DPOOL  pool,
DWORD  filter,
DWORD  mip_filter,
D3DCOLOR  color_key,
D3DXIMAGE_INFO src_info,
PALETTEENTRY palette,
IDirect3DVolumeTexture9 **  volume_texture 
)

Definition at line 1068 of file texture.c.

1083 {
1084  HRESULT hr;
1085  void *data;
1086  DWORD data_size;
1087 
1088  TRACE("(%p, %s, %u, %u, %u, %u, %#x, %#x, %#x, %#x, %#x, %#x, %p, %p, %p): relay\n",
1089  device, debugstr_w(filename), width, height, depth, mip_levels,
1090  usage, format, pool, filter, mip_filter, color_key, src_info,
1091  palette, volume_texture);
1092 
1093  if (!filename) return D3DERR_INVALIDCALL;
1094 
1095  hr = map_view_of_file(filename, &data, &data_size);
1096  if (FAILED(hr)) return D3DXERR_INVALIDDATA;
1097 
1099  mip_levels, usage, format, pool, filter, mip_filter, color_key, src_info, palette,
1100  volume_texture);
1101 
1103  return hr;
1104 }
GLint GLint GLsizei width
Definition: gl.h:1546
HRESULT hr
Definition: shlfolder.c:183
#define D3DERR_INVALIDCALL
const char * filename
Definition: ioapi.h:135
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
Definition: devices.h:37
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
HRESULT map_view_of_file(const WCHAR *filename, void **buffer, DWORD *length) DECLSPEC_HIDDEN
Definition: util.c:118
GLint GLint GLsizei GLsizei GLsizei depth
Definition: gl.h:1546
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
static HPALETTE palette
Definition: clipboard.c:1345
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemoryEx(IDirect3DDevice9 *device, const void *data, UINT data_size, UINT width, UINT height, UINT depth, UINT mip_levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mip_filter, D3DCOLOR color_key, D3DXIMAGE_INFO *info, PALETTEENTRY *palette, IDirect3DVolumeTexture9 **volume_texture)
Definition: texture.c:1118
#define UnmapViewOfFile
Definition: compat.h:605
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005

◆ D3DXCreateVolumeTextureFromFileInMemory()

HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemory ( IDirect3DDevice9 *  device,
const void data,
UINT  data_size,
IDirect3DVolumeTexture9 **  volume_texture 
)

Definition at line 1106 of file texture.c.

1110 {
1111  TRACE("(%p, %p, %u, %p): relay\n", device, data, data_size, volume_texture);
1112 
1115  0, NULL, NULL, volume_texture);
1116 }
Definition: devices.h:37
#define D3DX_DEFAULT
Definition: d3dx9.h:24
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemoryEx(IDirect3DDevice9 *device, const void *data, UINT data_size, UINT width, UINT height, UINT depth, UINT mip_levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mip_filter, D3DCOLOR color_key, D3DXIMAGE_INFO *info, PALETTEENTRY *palette, IDirect3DVolumeTexture9 **volume_texture)
Definition: texture.c:1118

Referenced by test_D3DXCreateVolumeTextureFromFileInMemory().

◆ D3DXCreateVolumeTextureFromFileInMemoryEx()

HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemoryEx ( IDirect3DDevice9 *  device,
const void data,
UINT  data_size,
UINT  width,
UINT  height,
UINT  depth,
UINT  mip_levels,
DWORD  usage,
D3DFORMAT  format,
D3DPOOL  pool,
DWORD  filter,
DWORD  mip_filter,
D3DCOLOR  color_key,
D3DXIMAGE_INFO info,
PALETTEENTRY palette,
IDirect3DVolumeTexture9 **  volume_texture 
)

Definition at line 1118 of file texture.c.

1134 {
1135  HRESULT hr;
1136  D3DCAPS9 caps;
1137  D3DXIMAGE_INFO image_info;
1138  BOOL dynamic_texture;
1139  BOOL file_width = FALSE;
1140  BOOL file_height = FALSE;
1141  BOOL file_depth = FALSE;
1142  BOOL file_format = FALSE;
1143  BOOL file_mip_levels = FALSE;
1144  IDirect3DVolumeTexture9 *tex, *buftex;
1145 
1146  TRACE("(%p, %p, %u, %u, %u, %u, %u, %#x, %#x, %#x, %#x, %#x, %#x, %p, %p, %p)\n",
1147  device, data, data_size, width, height, depth, mip_levels, usage, format, pool,
1148  filter, mip_filter, color_key, info, palette, volume_texture);
1149 
1150  if (!device || !data || !data_size || !volume_texture)
1151  return D3DERR_INVALIDCALL;
1152 
1153  hr = D3DXGetImageInfoFromFileInMemory(data, data_size, &image_info);
1154  if (FAILED(hr)) return hr;
1155 
1156  if (image_info.ImageFileFormat != D3DXIFF_DDS)
1157  return D3DXERR_INVALIDDATA;
1158 
1159  if (width == 0 || width == D3DX_DEFAULT_NONPOW2)
1160  width = image_info.Width;
1161  if (width == D3DX_DEFAULT)
1162  width = make_pow2(image_info.Width);
1163 
1164  if (height == 0 || height == D3DX_DEFAULT_NONPOW2)
1165  height = image_info.Height;
1166  if (height == D3DX_DEFAULT)
1167  height = make_pow2(image_info.Height);
1168 
1169  if (depth == 0 || depth == D3DX_DEFAULT_NONPOW2)
1170  depth = image_info.Depth;
1171  if (depth == D3DX_DEFAULT)
1172  depth = make_pow2(image_info.Depth);
1173 
1175  format = image_info.Format;
1176 
1177  if (width == D3DX_FROM_FILE)
1178  {
1179  file_width = TRUE;
1180  width = image_info.Width;
1181  }
1182 
1183  if (height == D3DX_FROM_FILE)
1184  {
1185  file_height = TRUE;
1186  height = image_info.Height;
1187  }
1188 
1189  if (depth == D3DX_FROM_FILE)
1190  {
1191  file_depth = TRUE;
1192  depth = image_info.Depth;
1193  }
1194 
1195  if (format == D3DFMT_FROM_FILE)
1196  {
1197  file_format = TRUE;
1198  format = image_info.Format;
1199  }
1200 
1201  if (mip_levels == D3DX_FROM_FILE)
1202  {
1203  file_mip_levels = TRUE;
1204  mip_levels = image_info.MipLevels;
1205  }
1206 
1208  if (FAILED(hr)) return hr;
1209 
1210  if ((file_width && width != image_info.Width)
1211  || (file_height && height != image_info.Height)
1212  || (file_depth && depth != image_info.Depth)
1213  || (file_format && format != image_info.Format)
1214  || (file_mip_levels && mip_levels != image_info.MipLevels))
1215  return D3DERR_NOTAVAILABLE;
1216 
1218  if (FAILED(hr))
1219  return D3DERR_INVALIDCALL;
1220 
1221  if (mip_levels > image_info.MipLevels)
1222  {
1223  FIXME("Generation of mipmaps for volume textures is not implemented yet.\n");
1224  mip_levels = image_info.MipLevels;
1225  }
1226 
1227  dynamic_texture = (caps.Caps2 & D3DCAPS2_DYNAMICTEXTURES) && (usage & D3DUSAGE_DYNAMIC);
1228  if (pool == D3DPOOL_DEFAULT && !dynamic_texture)
1229  {
1231  tex = buftex;
1232  }
1233  else
1234  {
1235  hr = D3DXCreateVolumeTexture(device, width, height, depth, mip_levels, usage, format, pool, &tex);
1236  buftex = NULL;
1237  }
1238 
1239  if (FAILED(hr)) return hr;
1240 
1241  hr = load_volume_texture_from_dds(tex, data, palette, filter, color_key, &image_info);
1242  if (FAILED(hr))
1243  {
1245  return hr;
1246  }
1247 
1248  if (buftex)
1249  {
1250  hr = D3DXCreateVolumeTexture(device, width, height, depth, mip_levels, usage, format, pool, &tex);
1251  if (FAILED(hr))
1252  {
1254  return hr;
1255  }
1256 
1257  IDirect3DDevice9_UpdateTexture(device, (IDirect3DBaseTexture9 *)buftex, (IDirect3DBaseTexture9 *)tex);
1259  }
1260 
1261  if (info)
1262  *info = image_info;
1263 
1264  *volume_texture = tex;
1265  return D3D_OK;
1266 }
#define D3DUSAGE_DYNAMIC
Definition: d3d8types.h:99
GLint GLint GLsizei width
Definition: gl.h:1546
HRESULT hr
Definition: shlfolder.c:183
#define TRUE
Definition: types.h:120
#define D3DFMT_FROM_FILE
Definition: d3dx9.h:28
#define D3DX_FROM_FILE
Definition: d3dx9.h:27
#define D3DERR_INVALIDCALL
#define IDirect3DVolumeTexture9_Release(p)
Definition: d3d9.h:1109
static UINT make_pow2(UINT num)
Definition: texture.c:36
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
UINT MipLevels
Definition: d3dx9tex.h:81
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
Definition: devices.h:37
#define IDirect3DDevice9_UpdateTexture(p, a, b)
Definition: d3d9.h:1538
#define FIXME(fmt,...)
Definition: debug.h:111
#define D3DX_DEFAULT
Definition: d3dx9.h:24
#define D3DERR_NOTAVAILABLE
Definition: d3d8.h:84
smooth NULL
Definition: ftsmooth.c:416
DWORD Caps2
Definition: d3d9caps.h:267
D3DXIMAGE_FILEFORMAT ImageFileFormat
Definition: d3dx9tex.h:84
#define TRACE(s)
Definition: solgame.cpp:4
D3DFORMAT Format
Definition: d3dx9tex.h:82
LONG HRESULT
Definition: typedefs.h:79
#define D3DX_DEFAULT_NONPOW2
Definition: d3dx9.h:25
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLint GLint GLsizei GLsizei GLsizei depth
Definition: gl.h:1546
HRESULT WINAPI D3DXCreateVolumeTexture(struct IDirect3DDevice9 *device, UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DVolumeTexture9 **texture)
Definition: texture.c:944
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
HRESULT load_volume_texture_from_dds(IDirect3DVolumeTexture9 *volume_texture, const void *src_data, const PALETTEENTRY *palette, DWORD filter, DWORD color_key, const D3DXIMAGE_INFO *src_info) DECLSPEC_HIDDEN
Definition: surface.c:807
HRESULT WINAPI D3DXCheckVolumeTextureRequirements(struct IDirect3DDevice9 *device, UINT *width, UINT *height, UINT *depth, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool)
Definition: texture.c:453
static HPALETTE palette
Definition: clipboard.c:1345
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
#define D3D_OK
Definition: d3d.h:106
#define IDirect3DDevice9_GetDeviceCaps(p, a)
Definition: d3d9.h:1514
HRESULT WINAPI D3DXGetImageInfoFromFileInMemory(const void *data, UINT datasize, D3DXIMAGE_INFO *info)
Definition: surface.c:945
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005
#define D3DCAPS2_DYNAMICTEXTURES
Definition: d3d8caps.h:25

Referenced by D3DXCreateVolumeTextureFromFileA(), D3DXCreateVolumeTextureFromFileExA(), D3DXCreateVolumeTextureFromFileExW(), D3DXCreateVolumeTextureFromFileInMemory(), and D3DXCreateVolumeTextureFromFileW().

◆ D3DXCreateVolumeTextureFromFileW()

HRESULT WINAPI D3DXCreateVolumeTextureFromFileW ( IDirect3DDevice9 *  device,
const WCHAR filename,
IDirect3DVolumeTexture9 **  volume_texture 
)

Definition at line 999 of file texture.c.

1002 {
1003  HRESULT hr;
1004  void *data;
1005  DWORD data_size;
1006 
1007  TRACE("(%p, %s, %p): relay\n",
1008  device, debugstr_w(filename), volume_texture);
1009 
1010  if (!filename) return D3DERR_INVALIDCALL;
1011 
1012  hr = map_view_of_file(filename, &data, &data_size);
1013  if (FAILED(hr)) return D3DXERR_INVALIDDATA;
1014 
1017 
1019  return hr;
1020 }
HRESULT hr
Definition: shlfolder.c:183
#define D3DERR_INVALIDCALL
const char * filename
Definition: ioapi.h:135
Definition: devices.h:37
#define debugstr_w
Definition: kernel32.h:32
#define D3DX_DEFAULT
Definition: d3dx9.h:24
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
HRESULT map_view_of_file(const WCHAR *filename, void **buffer, DWORD *length) DECLSPEC_HIDDEN
Definition: util.c:118
HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemoryEx(IDirect3DDevice9 *device, const void *data, UINT data_size, UINT width, UINT height, UINT depth, UINT mip_levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, DWORD filter, DWORD mip_filter, D3DCOLOR color_key, D3DXIMAGE_INFO *info, PALETTEENTRY *palette, IDirect3DVolumeTexture9 **volume_texture)
Definition: texture.c:1118
#define UnmapViewOfFile
Definition: compat.h:605

◆ D3DXFillCubeTexture()

HRESULT WINAPI D3DXFillCubeTexture ( struct IDirect3DCubeTexture9 *  texture,
LPD3DXFILL3D  function,
void funcdata 
)

Definition at line 1702 of file texture.c.

1703 {
1704  DWORD miplevels;
1705  DWORD m, x, y, f;
1707  D3DLOCKED_RECT lock_rect;
1710  const struct pixel_format_desc *format;
1711  BYTE *data;
1712  static const enum cube_coord coordmap[6][3] =
1713  {
1714  {ONE, YCOORDINV, XCOORDINV},
1715  {ZERO, YCOORDINV, XCOORD},
1716  {XCOORD, ONE, YCOORD},
1717  {XCOORD, ZERO, YCOORDINV},
1718  {XCOORD, YCOORDINV, ONE},
1720  };
1721 
1722  if (texture == NULL || function == NULL)
1723  return D3DERR_INVALIDCALL;
1724 
1726 
1727  for (m = 0; m < miplevels; m++)
1728  {
1730  return D3DERR_INVALIDCALL;
1731 
1732  format = get_format_info(desc.Format);
1733  if (format->type != FORMAT_ARGB && format->type != FORMAT_ARGBF16 && format->type != FORMAT_ARGBF)
1734  {
1735  FIXME("Unsupported texture format %#x\n", desc.Format);
1736  return D3DERR_INVALIDCALL;
1737  }
1738 
1739  for (f = 0; f < 6; f++)
1740  {
1742  return D3DERR_INVALIDCALL;
1743 
1744  size.x = (f == 0) || (f == 1) ? 0.0f : 2.0f / desc.Width;
1745  size.y = (f == 2) || (f == 3) ? 0.0f : 2.0f / desc.Width;
1746  size.z = (f == 4) || (f == 5) ? 0.0f : 2.0f / desc.Width;
1747 
1748  data = lock_rect.pBits;
1749 
1750  for (y = 0; y < desc.Height; y++)
1751  {
1752  for (x = 0; x < desc.Width; x++)
1753  {
1754  coord.x = get_cube_coord(coordmap[f][0], x, y, desc.Width) / desc.Width * 2.0f - 1.0f;
1755  coord.y = get_cube_coord(coordmap[f][1], x, y, desc.Width) / desc.Width * 2.0f - 1.0f;
1756  coord.z = get_cube_coord(coordmap[f][2], x, y, desc.Width) / desc.Width * 2.0f - 1.0f;
1757 
1758  function(&value, &coord, &size, funcdata);
1759 
1760  fill_texture(format, data + y * lock_rect.Pitch + x * format->bytes_per_pixel, &value);
1761  }
1762  }
1764  }
1765  }
1766 
1767  return D3D_OK;
1768 }
#define IDirect3DCubeTexture9_GetLevelDesc(p, a, b)
Definition: d3d9.h:937
Definition: texture.c:1677
static float get_cube_coord(enum cube_coord coord, unsigned int x, unsigned int y, unsigned int size)
Definition: texture.c:1680
#define D3DLOCK_DISCARD
Definition: d3d8types.h:72
#define D3DERR_INVALIDCALL
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
Definition: texture.c:1676
const GLfloat * m
Definition: glext.h:10848
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
GLuint coord
Definition: glext.h:9511
#define IDirect3DCubeTexture9_LockRect(p, a, b, c, d, e)
Definition: d3d9.h:939
static const WCHAR desc[]
Definition: protectdata.c:36
#define FIXME(fmt,...)
Definition: debug.h:111
smooth NULL
Definition: ftsmooth.c:416
cube_coord
Definition: texture.c:1670
GLfloat f
Definition: glext.h:7540
GLsizeiptr size
Definition: glext.h:5919
GLenum GLuint texture
Definition: glext.h:6295
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLsizei const GLfloat * value
Definition: glext.h:6069
unsigned char BYTE
Definition: xxhash.c:193
#define D3D_OK
Definition: d3d.h:106
#define f
Definition: ke_i.h:83
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
#define IDirect3DCubeTexture9_UnlockRect(p, a, b)
Definition: d3d9.h:940
static void fill_texture(const struct pixel_format_desc *format, BYTE *pos, const D3DXVECTOR4 *value)
Definition: texture.c:1268
const struct pixel_format_desc * get_format_info(D3DFORMAT format) DECLSPEC_HIDDEN
Definition: util.c:213
#define IDirect3DBaseTexture9_GetLevelCount(p)
Definition: d3d9.h:848

Referenced by test_D3DXFillCubeTexture(), and test_D3DXSaveTextureToFileInMemory().

◆ D3DXFillCubeTextureTX()

HRESULT WINAPI D3DXFillCubeTextureTX ( struct IDirect3DCubeTexture9 *  texture,
ID3DXTextureShader *  texture_shader 
)

Definition at line 1770 of file texture.c.

1771 {
1772  FIXME("texture %p, texture_shader %p stub.\n", texture, texture_shader);
1773  return E_NOTIMPL;
1774 }
#define FIXME(fmt,...)
Definition: debug.h:111
GLenum GLuint texture
Definition: glext.h:6295
#define E_NOTIMPL
Definition: ddrawi.h:99

Referenced by test_texture_shader().

◆ D3DXFillTexture()

HRESULT WINAPI D3DXFillTexture ( struct IDirect3DTexture9 *  texture,
LPD3DXFILL2D  function,
void funcdata 
)

Definition at line 1324 of file texture.c.

1325 {
1326  IDirect3DSurface9 *surface, *temp_surface;
1327  DWORD miplevels;
1328  DWORD m, x, y;
1330  D3DLOCKED_RECT lock_rect;
1333  const struct pixel_format_desc *format;
1334  BYTE *data;
1335  HRESULT hr;
1336 
1337  TRACE("texture %p, function %p, funcdata %p.\n", texture, function, funcdata);
1338 
1339  if (!texture || !function)
1340  return D3DERR_INVALIDCALL;
1341 
1343 
1344  for (m = 0; m < miplevels; m++)
1345  {
1347  return hr;
1348 
1349  format = get_format_info(desc.Format);
1350  if (format->type != FORMAT_ARGB && format->type != FORMAT_ARGBF16 && format->type != FORMAT_ARGBF)
1351  {
1352  FIXME("Unsupported texture format %#x.\n", desc.Format);
1353  return D3DERR_INVALIDCALL;
1354  }
1355 
1357  return hr;
1358  if (FAILED(hr = lock_surface(surface, &lock_rect, &temp_surface, TRUE)))
1359  {
1360  IDirect3DSurface9_Release(surface);
1361  return hr;
1362  }
1363 
1364  size.x = 1.0f / desc.Width;
1365  size.y = 1.0f / desc.Height;
1366 
1367  data = lock_rect.pBits;
1368 
1369  for (y = 0; y < desc.Height; y++)
1370  {
1371  /* The callback function expects the coordinates of the center
1372  of the texel */
1373  coord.y = (y + 0.5f) / desc.Height;
1374 
1375  for (x = 0; x < desc.Width; x++)
1376  {
1377  coord.x = (x + 0.5f) / desc.Width;
1378 
1379  function(&value, &coord, &size, funcdata);
1380 
1381  fill_texture(format, data + y * lock_rect.Pitch + x * format->bytes_per_pixel, &value);
1382  }
1383  }
1384  if (FAILED(hr = unlock_surface(surface, &lock_rect, temp_surface, TRUE)))
1385  {
1386  IDirect3DSurface9_Release(surface);
1387  return hr;
1388  }
1389  IDirect3DSurface9_Release(surface);
1390  }
1391 
1392  return D3D_OK;
1393 }
#define IDirect3DSurface9_Release(p)
Definition: d3d9.h:622
HRESULT hr
Definition: shlfolder.c:183
#define TRUE
Definition: types.h:120
#define IDirect3DTexture9_GetSurfaceLevel(p, a, b)
Definition: d3d9.h:1033
#define D3DERR_INVALIDCALL
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
const GLfloat * m
Definition: glext.h:10848
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
#define IDirect3DTexture9_GetLevelDesc(p, a, b)
Definition: d3d9.h:1032
GLuint coord
Definition: glext.h:9511
static const WCHAR desc[]
Definition: protectdata.c:36
#define FIXME(fmt,...)
Definition: debug.h:111
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
GLenum GLuint texture
Definition: glext.h:6295
LONG HRESULT
Definition: typedefs.h:79
#define for
Definition: utility.h:88
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
HRESULT unlock_surface(IDirect3DSurface9 *surface, D3DLOCKED_RECT *lock, IDirect3DSurface9 *temp_surface, BOOL update) DECLSPEC_HIDDEN
Definition: surface.c:252
GLsizei const GLfloat * value
Definition: glext.h:6069
unsigned char BYTE
Definition: xxhash.c:193
#define D3D_OK
Definition: d3d.h:106
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
static void fill_texture(const struct pixel_format_desc *format, BYTE *pos, const D3DXVECTOR4 *value)
Definition: texture.c:1268
const struct pixel_format_desc * get_format_info(D3DFORMAT format) DECLSPEC_HIDDEN
Definition: util.c:213
HRESULT lock_surface(IDirect3DSurface9 *surface, D3DLOCKED_RECT *lock, IDirect3DSurface9 **temp_surface, BOOL write) DECLSPEC_HIDDEN
Definition: surface.c:206
#define IDirect3DBaseTexture9_GetLevelCount(p)
Definition: d3d9.h:848

Referenced by test_D3DXFillTexture().

◆ D3DXFillTextureTX()

HRESULT WINAPI D3DXFillTextureTX ( struct IDirect3DTexture9 *  texture,
ID3DXTextureShader *  texture_shader 
)

Definition at line 1395 of file texture.c.

1396 {
1397  FIXME("texture %p, texture_shader %p stub.\n", texture, texture_shader);
1398  return E_NOTIMPL;
1399 }
#define FIXME(fmt,...)
Definition: debug.h:111
GLenum GLuint texture
Definition: glext.h:6295
#define E_NOTIMPL
Definition: ddrawi.h:99

Referenced by test_texture_shader().

◆ D3DXFillVolumeTexture()

HRESULT WINAPI D3DXFillVolumeTexture ( struct IDirect3DVolumeTexture9 *  texture,
LPD3DXFILL3D  function,
void funcdata 
)

Definition at line 1776 of file texture.c.

1777 {
1778  DWORD miplevels;
1779  DWORD m, x, y, z;
1781  D3DLOCKED_BOX lock_box;
1784  const struct pixel_format_desc *format;
1785  BYTE *data;
1786 
1787  if (texture == NULL || function == NULL)
1788  return D3DERR_INVALIDCALL;
1789 
1791 
1792  for (m = 0; m < miplevels; m++)
1793  {
1795  return D3DERR_INVALIDCALL;
1796 
1797  format = get_format_info(desc.Format);
1798  if (format->type != FORMAT_ARGB && format->type != FORMAT_ARGBF16 && format->type != FORMAT_ARGBF)
1799  {
1800  FIXME("Unsupported texture format %#x\n", desc.Format);
1801  return D3DERR_INVALIDCALL;
1802  }
1803 
1805  return D3DERR_INVALIDCALL;
1806 
1807  size.x = 1.0f / desc.Width;
1808  size.y = 1.0f / desc.Height;
1809  size.z = 1.0f / desc.Depth;
1810 
1811  data = lock_box.pBits;
1812 
1813  for (z = 0; z < desc.Depth; z++)
1814  {
1815  /* The callback function expects the coordinates of the center
1816  of the texel */
1817  coord.z = (z + 0.5f) / desc.Depth;
1818 
1819  for (y = 0; y < desc.Height; y++)
1820  {
1821  coord.y = (y + 0.5f) / desc.Height;
1822 
1823  for (x = 0; x < desc.Width; x++)
1824  {
1825  coord.x = (x + 0.5f) / desc.Width;
1826 
1827  function(&value, &coord, &size, funcdata);
1828 
1829  fill_texture(format, data + z * lock_box.SlicePitch + y * lock_box.RowPitch
1830  + x * format->bytes_per_pixel, &value);
1831  }
1832  }
1833  }
1835  }
1836 
1837  return D3D_OK;
1838 }
#define IDirect3DVolumeTexture9_GetLevelDesc(p, a, b)
Definition: d3d9.h:1127
#define D3DLOCK_DISCARD
Definition: d3d8types.h:72
#define D3DERR_INVALIDCALL
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
const GLfloat * m
Definition: glext.h:10848
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
#define IDirect3DVolumeTexture9_UnlockBox(p, a)
Definition: d3d9.h:1130
GLuint coord
Definition: glext.h:9511
static const WCHAR desc[]
Definition: protectdata.c:36
#define FIXME(fmt,...)
Definition: debug.h:111
GLdouble GLdouble z
Definition: glext.h:5874
smooth NULL
Definition: ftsmooth.c:416
GLsizeiptr size
Definition: glext.h:5919
GLenum GLuint texture
Definition: glext.h:6295
#define for
Definition: utility.h:88
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLsizei const GLfloat * value
Definition: glext.h:6069
unsigned char BYTE
Definition: xxhash.c:193
#define IDirect3DVolumeTexture9_LockBox(p, a, b, c, d)
Definition: d3d9.h:1129
#define D3D_OK
Definition: d3d.h:106
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
static void fill_texture(const struct pixel_format_desc *format, BYTE *pos, const D3DXVECTOR4 *value)
Definition: texture.c:1268
const struct pixel_format_desc * get_format_info(D3DFORMAT format) DECLSPEC_HIDDEN
Definition: util.c:213
#define IDirect3DBaseTexture9_GetLevelCount(p)
Definition: d3d9.h:848

Referenced by test_D3DXFillVolumeTexture().

◆ D3DXFillVolumeTextureTX()

HRESULT WINAPI D3DXFillVolumeTextureTX ( struct IDirect3DVolumeTexture9 *  texture,
ID3DXTextureShader *  texture_shader 
)

Definition at line 1840 of file texture.c.

1841 {
1842  FIXME("texture %p, texture_shader %p stub.\n", texture, texture_shader);
1843  return E_NOTIMPL;
1844 }
#define FIXME(fmt,...)
Definition: debug.h:111
GLenum GLuint texture
Definition: glext.h:6295
#define E_NOTIMPL
Definition: ddrawi.h:99

Referenced by test_texture_shader().

◆ D3DXFilterTexture()

HRESULT WINAPI D3DXFilterTexture ( IDirect3DBaseTexture9 *  texture,
const PALETTEENTRY palette,
UINT  srclevel,
DWORD  filter 
)

Definition at line 65 of file texture.c.

69 {
70  UINT level;
71  HRESULT hr;
73 
74  TRACE("(%p, %p, %u, %#x)\n", texture, palette, srclevel, filter);
75 
76  if (!texture)
77  return D3DERR_INVALIDCALL;
78 
79  if ((filter & 0xFFFF) > D3DX_FILTER_BOX && filter != D3DX_DEFAULT)
80  return D3DERR_INVALIDCALL;
81 
82  if (srclevel == D3DX_DEFAULT)
83  srclevel = 0;
84  else if (srclevel >= IDirect3DBaseTexture9_GetLevelCount(texture))
85  return D3DERR_INVALIDCALL;
86 
88  {
89  case D3DRTYPE_TEXTURE:
91  {
92  IDirect3DSurface9 *topsurf, *mipsurf;
94  int i, numfaces;
95 
96  if (type == D3DRTYPE_TEXTURE)
97  {
98  numfaces = 1;
99  IDirect3DTexture9_GetLevelDesc((IDirect3DTexture9*) texture, srclevel, &desc);
100  }
101  else
102  {
103  numfaces = 6;
104  IDirect3DCubeTexture9_GetLevelDesc((IDirect3DTexture9*) texture, srclevel, &desc);
105  }
106 
107  if (filter == D3DX_DEFAULT)
108  {
109  if (is_pow2(desc.Width) && is_pow2(desc.Height))
111  else
113  }
114 
115  for (i = 0; i < numfaces; i++)
116  {
117  level = srclevel + 1;
118  hr = get_surface(type, texture, i, srclevel, &topsurf);
119 
120  if (FAILED(hr))
121  return D3DERR_INVALIDCALL;
122 
123  while (get_surface(type, texture, i, level, &mipsurf) == D3D_OK)
124  {
125  hr = D3DXLoadSurfaceFromSurface(mipsurf, palette, NULL, topsurf, palette, NULL, filter, 0);
126  IDirect3DSurface9_Release(topsurf);
127  topsurf = mipsurf;
128 
129  if (FAILED(hr))
130  break;
131 
132  level++;
133  }
134 
135  IDirect3DSurface9_Release(topsurf);
136  if (FAILED(hr))
137  return hr;
138  }
139 
140  return D3D_OK;
141  }
142 
144  {
146  int level, level_count;
147  IDirect3DVolume9 *top_volume, *mip_volume;
148  IDirect3DVolumeTexture9 *volume_texture = (IDirect3DVolumeTexture9*) texture;
149 
150  IDirect3DVolumeTexture9_GetLevelDesc(volume_texture, srclevel, &desc);
151 
152  if (filter == D3DX_DEFAULT)
153  {
154  if (is_pow2(desc.Width) && is_pow2(desc.Height) && is_pow2(desc.Depth))
156  else
158  }
159 
160  hr = IDirect3DVolumeTexture9_GetVolumeLevel(volume_texture, srclevel, &top_volume);
161  if (FAILED(hr))
162  return hr;
163 
164  level_count = IDirect3DVolumeTexture9_GetLevelCount(volume_texture);
165  for (level = srclevel + 1; level < level_count; level++)
166  {
167  IDirect3DVolumeTexture9_GetVolumeLevel(volume_texture, level, &mip_volume);
168  hr = D3DXLoadVolumeFromVolume(mip_volume, palette, NULL, top_volume, palette, NULL, filter, 0);
169  IDirect3DVolume9_Release(top_volume);
170  top_volume = mip_volume;
171 
172  if (FAILED(hr))
173  break;
174  }
175 
176  IDirect3DVolume9_Release(top_volume);
177  if (FAILED(hr))
178  return hr;
179 
180  return D3D_OK;
181  }
182 
183  default:
184  return D3DERR_INVALIDCALL;
185  }
186 }
#define IDirect3DSurface9_Release(p)
Definition: d3d9.h:622
GLint level
Definition: gl.h:1546
#define IDirect3DVolumeTexture9_GetLevelDesc(p, a, b)
Definition: d3d9.h:1127
#define IDirect3DCubeTexture9_GetLevelDesc(p, a, b)
Definition: d3d9.h:937
HRESULT hr
Definition: shlfolder.c:183
HRESULT WINAPI D3DXLoadSurfaceFromSurface(IDirect3DSurface9 *dst_surface, const PALETTEENTRY *dst_palette, const RECT *dst_rect, IDirect3DSurface9 *src_surface, const PALETTEENTRY *src_palette, const RECT *src_rect, DWORD filter, D3DCOLOR color_key)
Definition: surface.c:2138
#define IDirect3DVolumeTexture9_GetLevelCount(p)
Definition: d3d9.h:1122
#define D3DERR_INVALIDCALL
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define IDirect3DTexture9_GetLevelDesc(p, a, b)
Definition: d3d9.h:1032
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static const WCHAR desc[]
Definition: protectdata.c:36
HRESULT WINAPI D3DXLoadVolumeFromVolume(IDirect3DVolume9 *dst_volume, const PALETTEENTRY *dst_palette, const D3DBOX *dst_box, IDirect3DVolume9 *src_volume, const PALETTEENTRY *src_palette, const D3DBOX *src_box, DWORD filter, D3DCOLOR color_key)
Definition: volume.c:290
#define D3DX_DEFAULT
Definition: d3dx9.h:24
#define D3DX_FILTER_BOX
Definition: d3dx9tex.h:31
smooth NULL
Definition: ftsmooth.c:416
#define IDirect3DBaseTexture9_GetType(p)
Definition: d3d9.h:844
#define TRACE(s)
Definition: solgame.cpp:4
GLenum GLuint texture
Definition: glext.h:6295
LONG HRESULT
Definition: typedefs.h:79
#define IDirect3DVolume9_Release(p)
Definition: d3d9.h:383
static HRESULT get_surface(D3DRESOURCETYPE type, struct IDirect3DBaseTexture9 *tex, int face, UINT level, struct IDirect3DSurface9 **surf)
Definition: texture.c:50
static HPALETTE palette
Definition: clipboard.c:1345
#define D3D_OK
Definition: d3d.h:106
#define D3DX_FILTER_DITHER
Definition: d3dx9tex.h:36
unsigned int UINT
Definition: ndis.h:50
#define IDirect3DVolumeTexture9_GetVolumeLevel(p, a, b)
Definition: d3d9.h:1128
static BOOL is_pow2(UINT num)
Definition: texture.c:30
#define IDirect3DBaseTexture9_GetLevelCount(p)
Definition: d3d9.h:848
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005
enum _D3DRESOURCETYPE D3DRESOURCETYPE

Referenced by D3DXCreateCubeTextureFromFileInMemoryEx(), D3DXCreateTextureFromFileInMemoryEx(), D3DXRenderToEnvMap_End(), and test_D3DXFilterTexture().

◆ D3DXSaveTextureToFileA()

HRESULT WINAPI D3DXSaveTextureToFileA ( const char dst_filename,
D3DXIMAGE_FILEFORMAT  file_format,
IDirect3DBaseTexture9 *  src_texture,
const PALETTEENTRY src_palette 
)

Definition at line 1846 of file texture.c.

1848 {
1849  int len;
1850  WCHAR *filename;
1851  HRESULT hr;
1853 
1854  TRACE("(%s, %#x, %p, %p): relay\n",
1855  wine_dbgstr_a(dst_filename), file_format, src_texture, src_palette);
1856 
1857  if (!dst_filename) return D3DERR_INVALIDCALL;
1858 
1859  len = MultiByteToWideChar(CP_ACP, 0, dst_filename, -1, NULL, 0);
1860  filename = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1861  if (!filename) return E_OUTOFMEMORY;
1862  MultiByteToWideChar(CP_ACP, 0, dst_filename, -1, filename, len);
1863 
1864  hr = D3DXSaveTextureToFileInMemory(&buffer, file_format, src_texture, src_palette);
1865  if (SUCCEEDED(hr))
1866  {
1869  }
1870 
1872  return hr;
1873 }
const char int int int static __inline const char * wine_dbgstr_a(const char *s)
Definition: debug.h:186
HRESULT hr
Definition: shlfolder.c:183
#define CP_ACP
Definition: compat.h:109
#define D3DERR_INVALIDCALL
GLuint buffer
Definition: glext.h:5915
const char * filename
Definition: ioapi.h:135
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
smooth NULL
Definition: ftsmooth.c:416
HRESULT write_buffer_to_file(const WCHAR *filename, ID3DXBuffer *buffer) DECLSPEC_HIDDEN
Definition: util.c:182
struct ID3DXBuffer ID3DXBuffer
Definition: d3dx8core.h:51
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:79
GLenum GLsizei len
Definition: glext.h:6722
#define ID3DXBuffer_Release(p)
Definition: d3dx9core.h:83
#define MultiByteToWideChar
Definition: compat.h:110
#define HeapFree(x, y, z)
Definition: compat.h:594
#define SUCCEEDED(hr)
Definition: intsafe.h:49
HRESULT WINAPI D3DXSaveTextureToFileInMemory(ID3DXBuffer **dst_buffer, D3DXIMAGE_FILEFORMAT file_format, IDirect3DBaseTexture9 *src_texture, const PALETTEENTRY *src_palette)
Definition: texture.c:1896

◆ D3DXSaveTextureToFileInMemory()

HRESULT WINAPI D3DXSaveTextureToFileInMemory ( ID3DXBuffer **  dst_buffer,
D3DXIMAGE_FILEFORMAT  file_format,
IDirect3DBaseTexture9 *  src_texture,
const PALETTEENTRY src_palette 
)

Definition at line 1896 of file texture.c.

1898 {
1899  HRESULT hr;
1901  IDirect3DSurface9 *surface;
1902 
1903  TRACE("(%p, %#x, %p, %p)\n",
1904  dst_buffer, file_format, src_texture, src_palette);
1905 
1906  if (!dst_buffer || !src_texture) return D3DERR_INVALIDCALL;
1907 
1908  if (file_format == D3DXIFF_DDS)
1909  return save_dds_texture_to_memory(dst_buffer, src_texture, src_palette);
1910 
1911  type = IDirect3DBaseTexture9_GetType(src_texture);
1912  switch (type)
1913  {
1914  case D3DRTYPE_TEXTURE:
1915  case D3DRTYPE_CUBETEXTURE:
1916  hr = get_surface(type, src_texture, D3DCUBEMAP_FACE_POSITIVE_X, 0, &surface);
1917  break;
1919  FIXME("Volume textures aren't supported yet\n");
1920  return E_NOTIMPL;
1921  default:
1922  return D3DERR_INVALIDCALL;
1923  }
1924 
1925  if (SUCCEEDED(hr))
1926  {
1927  hr = D3DXSaveSurfaceToFileInMemory(dst_buffer, file_format, surface, src_palette, NULL);
1928  IDirect3DSurface9_Release(surface);
1929  }
1930 
1931  return hr;
1932 }
#define IDirect3DSurface9_Release(p)
Definition: d3d9.h:622
HRESULT hr
Definition: shlfolder.c:183
#define D3DERR_INVALIDCALL
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define FIXME(fmt,...)
Definition: debug.h:111
smooth NULL
Definition: ftsmooth.c:416
#define IDirect3DBaseTexture9_GetType(p)
Definition: d3d9.h:844
HRESULT save_dds_texture_to_memory(ID3DXBuffer **dst_buffer, IDirect3DBaseTexture9 *src_texture, const PALETTEENTRY *src_palette) DECLSPEC_HIDDEN
Definition: surface.c:632
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
HRESULT WINAPI D3DXSaveSurfaceToFileInMemory(ID3DXBuffer **dst_buffer, D3DXIMAGE_FILEFORMAT file_format, IDirect3DSurface9 *src_surface, const PALETTEENTRY *src_palette, const RECT *src_rect)
Definition: surface.c:2260
static HRESULT get_surface(D3DRESOURCETYPE type, struct IDirect3DBaseTexture9 *tex, int face, UINT level, struct IDirect3DSurface9 **surf)
Definition: texture.c:50
#define E_NOTIMPL
Definition: ddrawi.h:99
enum _D3DRESOURCETYPE D3DRESOURCETYPE
#define SUCCEEDED(hr)
Definition: intsafe.h:49

Referenced by D3DXSaveTextureToFileA(), D3DXSaveTextureToFileW(), and test_D3DXSaveTextureToFileInMemory().

◆ D3DXSaveTextureToFileW()

HRESULT WINAPI D3DXSaveTextureToFileW ( const WCHAR dst_filename,
D3DXIMAGE_FILEFORMAT  file_format,
IDirect3DBaseTexture9 *  src_texture,
const PALETTEENTRY src_palette 
)

Definition at line 1875 of file texture.c.

1877 {
1878  HRESULT hr;
1880 
1881  TRACE("(%s, %#x, %p, %p): relay\n",
1882  wine_dbgstr_w(dst_filename), file_format, src_texture, src_palette);
1883 
1884  if (!dst_filename) return D3DERR_INVALIDCALL;
1885 
1886  hr = D3DXSaveTextureToFileInMemory(&buffer, file_format, src_texture, src_palette);
1887  if (SUCCEEDED(hr))
1888  {
1889  hr = write_buffer_to_file(dst_filename, buffer);
1891  }
1892 
1893  return hr;
1894 }
HRESULT hr
Definition: shlfolder.c:183
char * wine_dbgstr_w(const wchar_t *wstr)
Definition: atltest.h:87
#define D3DERR_INVALIDCALL
GLuint buffer
Definition: glext.h:5915
HRESULT write_buffer_to_file(const WCHAR *filename, ID3DXBuffer *buffer) DECLSPEC_HIDDEN
Definition: util.c:182
struct ID3DXBuffer ID3DXBuffer
Definition: d3dx8core.h:51
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
#define ID3DXBuffer_Release(p)
Definition: d3dx9core.h:83
#define SUCCEEDED(hr)
Definition: intsafe.h:49
HRESULT WINAPI D3DXSaveTextureToFileInMemory(ID3DXBuffer **dst_buffer, D3DXIMAGE_FILEFORMAT file_format, IDirect3DBaseTexture9 *src_texture, const PALETTEENTRY *src_palette)
Definition: texture.c:1896

◆ fill_texture()

static void fill_texture ( const struct pixel_format_desc format,
BYTE pos,
const D3DXVECTOR4 value 
)
inlinestatic

Definition at line 1268 of file texture.c.

1269 {
1270  DWORD c;
1271 
1272  for (c = 0; c < format->bytes_per_pixel; c++)
1273  pos[c] = 0;
1274 
1275  for (c = 0; c < 4; c++)
1276  {
1277  float comp_value;
1278  DWORD i, v = 0, mask32 = format->bits[c] == 32 ? ~0U : ((1 << format->bits[c]) - 1);
1279 
1280  switch (c)
1281  {
1282  case 0: /* Alpha */
1283  comp_value = value->w;
1284  break;
1285  case 1: /* Red */
1286  comp_value = value->x;
1287  break;
1288  case 2: /* Green */
1289  comp_value = value->y;
1290  break;
1291  case 3: /* Blue */
1292  comp_value = value->z;
1293  break;
1294  }
1295 
1296  if (format->type == FORMAT_ARGBF16)
1298  else if (format->type == FORMAT_ARGBF)
1299  v = *(DWORD *)&comp_value;
1300  else if (format->type == FORMAT_ARGB)
1301  v = comp_value * ((1 << format->bits[c]) - 1) + 0.5f;
1302  else
1303  FIXME("Unhandled format type %#x\n", format->type);
1304 
1305  for (i = 0; i < format->bits[c] + format->shift[c]; i += 8)
1306  {
1307  BYTE byte, mask;
1308 
1309  if (format->shift[c] > i)
1310  {
1311  mask = mask32 << (format->shift[c] - i);
1312  byte = (v << (format->shift[c] - i)) & mask;
1313  }
1314  else
1315  {
1316  mask = mask32 >> (i - format->shift[c]);
1317  byte = (v >> (i - format->shift[c])) & mask;
1318  }
1319  pos[i / 8] |= byte;
1320  }
1321  }
1322 }
#define U(x)
Definition: wordpad.c:45
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLenum GLint GLuint mask
Definition: glext.h:6028
#define FIXME(fmt,...)
Definition: debug.h:111
const GLubyte * c
Definition: glext.h:8905
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned char BYTE
Definition: xxhash.c:193
const GLdouble * v
Definition: gl.h:2040
#define byte(x, n)
Definition: tomcrypt.h:118
#define c
Definition: ke_i.h:80
unsigned short float_32_to_16(const float in) DECLSPEC_HIDDEN
Definition: math.c:2098
static int comp_value(const WCHAR *ptr, int dpc)
Definition: htmlbody.c:68

Referenced by D3DXFillCubeTexture(), D3DXFillTexture(), and D3DXFillVolumeTexture().

◆ get_alpha_replacement_format()

static D3DFORMAT get_alpha_replacement_format ( D3DFORMAT  format)
static

Definition at line 543 of file texture.c.

544 {
545  static const struct
546  {
547  D3DFORMAT orig_format;
548  D3DFORMAT replacement_format;
549  }
550  replacement_formats[] =
551  {
557  };
558  unsigned int i;
559 
560  for (i = 0; i < ARRAY_SIZE(replacement_formats); ++i)
561  if (replacement_formats[i].orig_format == format)
562  return replacement_formats[i].replacement_format;
563  return format;
564 }
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
enum _D3DFORMAT D3DFORMAT
#define ARRAY_SIZE(a)
Definition: main.h:24

Referenced by D3DXCreateTextureFromFileInMemoryEx().

◆ get_cube_coord()

static float get_cube_coord ( enum cube_coord  coord,
unsigned int  x,
unsigned int  y,
unsigned int  size 
)
static

Definition at line 1680 of file texture.c.

1681 {
1682  switch (coord)
1683  {
1684  case XCOORD:
1685  return x + 0.5f;
1686  case XCOORDINV:
1687  return size - x - 0.5f;
1688  case YCOORD:
1689  return y + 0.5f;
1690  case YCOORDINV:
1691  return size - y - 0.5f;
1692  case ZERO:
1693  return 0.0f;
1694  case ONE:
1695  return size;
1696  default:
1697  ERR("Unexpected coordinate value\n");
1698  return 0.0f;
1699  }
1700 }
Definition: texture.c:1677
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
Definition: texture.c:1676
GLuint coord
Definition: glext.h:9511
GLsizeiptr size
Definition: glext.h:5919
#define ERR(fmt,...)
Definition: debug.h:110
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548

Referenced by D3DXFillCubeTexture().

◆ get_luminance_replacement_format()

static D3DFORMAT get_luminance_replacement_format ( D3DFORMAT  format)
static

Definition at line 188 of file texture.c.

189 {
190  static const struct
191  {
192  D3DFORMAT luminance_format;
193  D3DFORMAT replacement_format;
194  } luminance_replacements[] =
195  {
200  };
201  unsigned int i;
202 
203  for (i = 0; i < ARRAY_SIZE(luminance_replacements); ++i)
204  if (format == luminance_replacements[i].luminance_format)
205  return luminance_replacements[i].replacement_format;
206  return format;
207 }
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
enum _D3DFORMAT D3DFORMAT
#define ARRAY_SIZE(a)
Definition: main.h:24

Referenced by D3DXCheckTextureRequirements().

◆ get_surface()

static HRESULT get_surface ( D3DRESOURCETYPE  type,
struct IDirect3DBaseTexture9 *  tex,
int  face,
UINT  level,
struct IDirect3DSurface9 **  surf 
)
static

Definition at line 50 of file texture.c.

52 {
53  switch (type)
54  {
55  case D3DRTYPE_TEXTURE:
56  return IDirect3DTexture9_GetSurfaceLevel((IDirect3DTexture9*) tex, level, surf);
58  return IDirect3DCubeTexture9_GetCubeMapSurface((IDirect3DCubeTexture9*) tex, face, level, surf);
59  default:
60  ERR("Unexpected texture type\n");
61  return E_NOTIMPL;