301 lines
10 KiB
C
301 lines
10 KiB
C
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// File: d3dx9tex.h
|
|
// Content: D3DX texturing APIs
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
//#include "d3dx9.h"
|
|
|
|
#ifndef __D3DX9TEX_H__
|
|
#define __D3DX9TEX_H__
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DX_FILTER flags:
|
|
// ------------------
|
|
//
|
|
// A valid filter must contain one of these values:
|
|
//
|
|
// D3DX_FILTER_NONE
|
|
// No scaling or filtering will take place. Pixels outside the bounds
|
|
// of the source image are assumed to be transparent black.
|
|
// D3DX_FILTER_POINT
|
|
// Each destination pixel is computed by sampling the nearest pixel
|
|
// from the source image.
|
|
// D3DX_FILTER_LINEAR
|
|
// Each destination pixel is computed by linearly interpolating between
|
|
// the nearest pixels in the source image. This filter works best
|
|
// when the scale on each axis is less than 2.
|
|
// D3DX_FILTER_TRIANGLE
|
|
// Every pixel in the source image contributes equally to the
|
|
// destination image. This is the slowest of all the filters.
|
|
// D3DX_FILTER_BOX
|
|
// Each pixel is computed by averaging a 2x2(x2) box pixels from
|
|
// the source image. Only works when the dimensions of the
|
|
// destination are half those of the source. (as with mip maps)
|
|
//
|
|
// And can be OR'd with any of these optional flags:
|
|
//
|
|
// D3DX_FILTER_MIRROR_U
|
|
// Indicates that pixels off the edge of the texture on the U-axis
|
|
// should be mirrored, not wraped.
|
|
// D3DX_FILTER_MIRROR_V
|
|
// Indicates that pixels off the edge of the texture on the V-axis
|
|
// should be mirrored, not wraped.
|
|
// D3DX_FILTER_MIRROR_W
|
|
// Indicates that pixels off the edge of the texture on the W-axis
|
|
// should be mirrored, not wraped.
|
|
// D3DX_FILTER_MIRROR
|
|
// Same as specifying D3DX_FILTER_MIRROR_U | D3DX_FILTER_MIRROR_V |
|
|
// D3DX_FILTER_MIRROR_V
|
|
// D3DX_FILTER_DITHER
|
|
// Dithers the resulting image using a 4x4 order dither pattern.
|
|
// D3DX_FILTER_SRGB_IN
|
|
// Denotes that the input data is in sRGB (gamma 2.2) colorspace.
|
|
// D3DX_FILTER_SRGB_OUT
|
|
// Denotes that the output data is in sRGB (gamma 2.2) colorspace.
|
|
// D3DX_FILTER_SRGB
|
|
// Same as specifying D3DX_FILTER_SRGB_IN | D3DX_FILTER_SRGB_OUT
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#define D3DX_FILTER_NONE (1 << 0)
|
|
#define D3DX_FILTER_POINT (2 << 0)
|
|
#define D3DX_FILTER_LINEAR (3 << 0)
|
|
#define D3DX_FILTER_TRIANGLE (4 << 0)
|
|
#define D3DX_FILTER_BOX (5 << 0)
|
|
|
|
#define D3DX_FILTER_MIRROR_U (1 << 16)
|
|
#define D3DX_FILTER_MIRROR_V (2 << 16)
|
|
#define D3DX_FILTER_MIRROR_W (4 << 16)
|
|
#define D3DX_FILTER_MIRROR (7 << 16)
|
|
|
|
#define D3DX_FILTER_DITHER (1 << 19)
|
|
#define D3DX_FILTER_DITHER_DIFFUSION (2 << 19)
|
|
|
|
#define D3DX_FILTER_SRGB_IN (1 << 21)
|
|
#define D3DX_FILTER_SRGB_OUT (2 << 21)
|
|
#define D3DX_FILTER_SRGB (3 << 21)
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// D3DX_SKIP_DDS_MIP_LEVELS is used to skip mip levels when loading a DDS file:
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#define D3DX_SKIP_DDS_MIP_LEVELS_MASK 0x1F
|
|
#define D3DX_SKIP_DDS_MIP_LEVELS_SHIFT 26
|
|
#define D3DX_SKIP_DDS_MIP_LEVELS(levels, filter) ((((levels) & D3DX_SKIP_DDS_MIP_LEVELS_MASK) << D3DX_SKIP_DDS_MIP_LEVELS_SHIFT) | ((filter) == D3DX_DEFAULT ? D3DX_FILTER_BOX : (filter)))
|
|
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DX_NORMALMAP flags:
|
|
// ---------------------
|
|
// These flags are used to control how D3DXComputeNormalMap generates normal
|
|
// maps. Any number of these flags may be OR'd together in any combination.
|
|
//
|
|
// D3DX_NORMALMAP_MIRROR_U
|
|
// Indicates that pixels off the edge of the texture on the U-axis
|
|
// should be mirrored, not wraped.
|
|
// D3DX_NORMALMAP_MIRROR_V
|
|
// Indicates that pixels off the edge of the texture on the V-axis
|
|
// should be mirrored, not wraped.
|
|
// D3DX_NORMALMAP_MIRROR
|
|
// Same as specifying D3DX_NORMALMAP_MIRROR_U | D3DX_NORMALMAP_MIRROR_V
|
|
// D3DX_NORMALMAP_INVERTSIGN
|
|
// Inverts the direction of each normal
|
|
// D3DX_NORMALMAP_COMPUTE_OCCLUSION
|
|
// Compute the per pixel Occlusion term and encodes it into the alpha.
|
|
// An Alpha of 1 means that the pixel is not obscured in anyway, and
|
|
// an alpha of 0 would mean that the pixel is completly obscured.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
#define D3DX_NORMALMAP_MIRROR_U (1 << 16)
|
|
#define D3DX_NORMALMAP_MIRROR_V (2 << 16)
|
|
#define D3DX_NORMALMAP_MIRROR (3 << 16)
|
|
#define D3DX_NORMALMAP_INVERTSIGN (8 << 16)
|
|
#define D3DX_NORMALMAP_COMPUTE_OCCLUSION (16 << 16)
|
|
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DX_CHANNEL flags:
|
|
// -------------------
|
|
// These flags are used by functions which operate on or more channels
|
|
// in a texture.
|
|
//
|
|
// D3DX_CHANNEL_RED
|
|
// Indicates the red channel should be used
|
|
// D3DX_CHANNEL_BLUE
|
|
// Indicates the blue channel should be used
|
|
// D3DX_CHANNEL_GREEN
|
|
// Indicates the green channel should be used
|
|
// D3DX_CHANNEL_ALPHA
|
|
// Indicates the alpha channel should be used
|
|
// D3DX_CHANNEL_LUMINANCE
|
|
// Indicates the luminaces of the red green and blue channels should be
|
|
// used.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#define D3DX_CHANNEL_RED (1 << 0)
|
|
#define D3DX_CHANNEL_BLUE (1 << 1)
|
|
#define D3DX_CHANNEL_GREEN (1 << 2)
|
|
#define D3DX_CHANNEL_ALPHA (1 << 3)
|
|
#define D3DX_CHANNEL_LUMINANCE (1 << 4)
|
|
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXIMAGE_FILEFORMAT:
|
|
// ---------------------
|
|
// This enum is used to describe supported image file formats.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
typedef enum _D3DXIMAGE_FILEFORMAT
|
|
{
|
|
D3DXIFF_BMP = 0,
|
|
D3DXIFF_JPG = 1,
|
|
D3DXIFF_TGA = 2,
|
|
D3DXIFF_PNG = 3,
|
|
D3DXIFF_DDS = 4,
|
|
D3DXIFF_PPM = 5,
|
|
D3DXIFF_DIB = 6,
|
|
D3DXIFF_HDR = 7, //high dynamic range formats
|
|
D3DXIFF_PFM = 8, //
|
|
D3DXIFF_FORCE_DWORD = 0x7fffffff
|
|
|
|
} D3DXIMAGE_FILEFORMAT;
|
|
|
|
|
|
#if 0
|
|
//----------------------------------------------------------------------------
|
|
// LPD3DXFILL2D and LPD3DXFILL3D:
|
|
// ------------------------------
|
|
// Function types used by the texture fill functions.
|
|
//
|
|
// Parameters:
|
|
// pOut
|
|
// Pointer to a vector which the function uses to return its result.
|
|
// X,Y,Z,W will be mapped to R,G,B,A respectivly.
|
|
// pTexCoord
|
|
// Pointer to a vector containing the coordinates of the texel currently
|
|
// being evaluated. Textures and VolumeTexture texcoord components
|
|
// range from 0 to 1. CubeTexture texcoord component range from -1 to 1.
|
|
// pTexelSize
|
|
// Pointer to a vector containing the dimensions of the current texel.
|
|
// pData
|
|
// Pointer to user data.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
typedef VOID (WINAPI *LPD3DXFILL2D)(D3DXVECTOR4 *pOut,
|
|
CONST D3DXVECTOR2 *pTexCoord, CONST D3DXVECTOR2 *pTexelSize, LPVOID pData);
|
|
|
|
typedef VOID (WINAPI *LPD3DXFILL3D)(D3DXVECTOR4 *pOut,
|
|
CONST D3DXVECTOR3 *pTexCoord, CONST D3DXVECTOR3 *pTexelSize, LPVOID pData);
|
|
#endif
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXIMAGE_INFO:
|
|
// ---------------
|
|
// This structure is used to return a rough description of what the
|
|
// the original contents of an image file looked like.
|
|
//
|
|
// Width
|
|
// Width of original image in pixels
|
|
// Height
|
|
// Height of original image in pixels
|
|
// Depth
|
|
// Depth of original image in pixels
|
|
// MipLevels
|
|
// Number of mip levels in original image
|
|
// Format
|
|
// D3D format which most closely describes the data in original image
|
|
// ResourceType
|
|
// D3DRESOURCETYPE representing the type of texture stored in the file.
|
|
// D3DRTYPE_TEXTURE, D3DRTYPE_VOLUMETEXTURE, or D3DRTYPE_CUBETEXTURE.
|
|
// ImageFileFormat
|
|
// D3DXIMAGE_FILEFORMAT representing the format of the image file.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
typedef struct _D3DXIMAGE_INFO
|
|
{
|
|
UINT Width;
|
|
UINT Height;
|
|
UINT Depth;
|
|
UINT MipLevels;
|
|
D3DFORMAT Format;
|
|
D3DRESOURCETYPE ResourceType;
|
|
D3DXIMAGE_FILEFORMAT ImageFileFormat;
|
|
|
|
} D3DXIMAGE_INFO;
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif //__cplusplus
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// D3DXSaveSurfaceToFile:
|
|
// ----------------------
|
|
// Save a surface to a image file.
|
|
//
|
|
// Parameters:
|
|
// pDestFile
|
|
// File name of the destination file
|
|
// DestFormat
|
|
// D3DXIMAGE_FILEFORMAT specifying file format to use when saving.
|
|
// pSrcSurface
|
|
// Source surface, containing the image to be saved
|
|
// pSrcPalette
|
|
// Source palette of 256 colors, or NULL
|
|
// pSrcRect
|
|
// Source rectangle, or NULL for the entire image
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
HRESULT WINAPI
|
|
D3DXSaveSurfaceToFileA(
|
|
LPCSTR pDestFile,
|
|
D3DXIMAGE_FILEFORMAT DestFormat,
|
|
LPDIRECT3DSURFACE9 pSrcSurface,
|
|
CONST PALETTEENTRY* pSrcPalette,
|
|
CONST RECT* pSrcRect);
|
|
|
|
HRESULT WINAPI
|
|
D3DXSaveSurfaceToFileW(
|
|
LPCWSTR pDestFile,
|
|
D3DXIMAGE_FILEFORMAT DestFormat,
|
|
LPDIRECT3DSURFACE9 pSrcSurface,
|
|
CONST PALETTEENTRY* pSrcPalette,
|
|
CONST RECT* pSrcRect);
|
|
|
|
#ifdef UNICODE
|
|
#define D3DXSaveSurfaceToFile D3DXSaveSurfaceToFileW
|
|
#else
|
|
#define D3DXSaveSurfaceToFile D3DXSaveSurfaceToFileA
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif //__cplusplus
|
|
|
|
|
|
#endif //__D3DX9TEX_H__
|