/*==========================================================================; * * Copyright (c) Microsoft Corporation. All rights reserved. * * File: d3drm.h * Content: Direct3DRM include file * ***************************************************************************/ #ifndef __D3DRMDEFS_H__ #define __D3DRMDEFS_H__ #include #include "d3dtypes.h" #ifdef WIN32 #define D3DRMAPI __stdcall #else #define D3DRMAPI #endif #if defined(__cplusplus) extern "C" { #endif #ifndef TRUE #define FALSE 0 #define TRUE 1 #endif typedef struct _D3DRMVECTOR4D { D3DVALUE x, y, z, w; } D3DRMVECTOR4D, *LPD3DRMVECTOR4D; typedef D3DVALUE D3DRMMATRIX4D[4][4]; typedef struct _D3DRMQUATERNION { D3DVALUE s; D3DVECTOR v; } D3DRMQUATERNION, *LPD3DRMQUATERNION; typedef struct _D3DRMRAY { D3DVECTOR dvDir; D3DVECTOR dvPos; } D3DRMRAY, *LPD3DRMRAY; typedef struct _D3DRMBOX { D3DVECTOR min, max; } D3DRMBOX, *LPD3DRMBOX; typedef void (*D3DRMWRAPCALLBACK) (LPD3DVECTOR, int* u, int* v, LPD3DVECTOR a, LPD3DVECTOR b, LPVOID); typedef enum _D3DRMLIGHTTYPE { D3DRMLIGHT_AMBIENT, D3DRMLIGHT_POINT, D3DRMLIGHT_SPOT, D3DRMLIGHT_DIRECTIONAL, D3DRMLIGHT_PARALLELPOINT } D3DRMLIGHTTYPE, *LPD3DRMLIGHTTYPE; typedef enum _D3DRMSHADEMODE { D3DRMSHADE_FLAT = 0, D3DRMSHADE_GOURAUD = 1, D3DRMSHADE_PHONG = 2, D3DRMSHADE_MASK = 7, D3DRMSHADE_MAX = 8 } D3DRMSHADEMODE, *LPD3DRMSHADEMODE; typedef enum _D3DRMLIGHTMODE { D3DRMLIGHT_OFF = 0 * D3DRMSHADE_MAX, D3DRMLIGHT_ON = 1 * D3DRMSHADE_MAX, D3DRMLIGHT_MASK = 7 * D3DRMSHADE_MAX, D3DRMLIGHT_MAX = 8 * D3DRMSHADE_MAX } D3DRMLIGHTMODE, *LPD3DRMLIGHTMODE; typedef enum _D3DRMFILLMODE { D3DRMFILL_POINTS = 0 * D3DRMLIGHT_MAX, D3DRMFILL_WIREFRAME = 1 * D3DRMLIGHT_MAX, D3DRMFILL_SOLID = 2 * D3DRMLIGHT_MAX, D3DRMFILL_MASK = 7 * D3DRMLIGHT_MAX, D3DRMFILL_MAX = 8 * D3DRMLIGHT_MAX } D3DRMFILLMODE, *LPD3DRMFILLMODE; typedef DWORD D3DRMRENDERQUALITY, *LPD3DRMRENDERQUALITY; #define D3DRMRENDER_WIREFRAME (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_WIREFRAME) #define D3DRMRENDER_UNLITFLAT (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_SOLID) #define D3DRMRENDER_FLAT (D3DRMSHADE_FLAT+D3DRMLIGHT_ON+D3DRMFILL_SOLID) #define D3DRMRENDER_GOURAUD (D3DRMSHADE_GOURAUD+D3DRMLIGHT_ON+D3DRMFILL_SOLID) #define D3DRMRENDER_PHONG (D3DRMSHADE_PHONG+D3DRMLIGHT_ON+D3DRMFILL_SOLID) #define D3DRMRENDERMODE_BLENDEDTRANSPARENCY 1 #define D3DRMRENDERMODE_SORTEDTRANSPARENCY 2 #define D3DRMRENDERMODE_LIGHTINMODELSPACE 8 #define D3DRMRENDERMODE_VIEWDEPENDENTSPECULAR 16 #define D3DRMRENDERMODE_DISABLESORTEDALPHAZWRITE 32 typedef enum _D3DRMTEXTUREQUALITY { D3DRMTEXTURE_NEAREST, /* choose nearest texel */ D3DRMTEXTURE_LINEAR, /* interpolate 4 texels */ D3DRMTEXTURE_MIPNEAREST, /* nearest texel in nearest mipmap */ D3DRMTEXTURE_MIPLINEAR, /* interpolate 2 texels from 2 mipmaps */ D3DRMTEXTURE_LINEARMIPNEAREST, /* interpolate 4 texels in nearest mipmap */ D3DRMTEXTURE_LINEARMIPLINEAR /* interpolate 8 texels from 2 mipmaps */ } D3DRMTEXTUREQUALITY, *LPD3DRMTEXTUREQUALITY; /* * Texture flags */ #define D3DRMTEXTURE_FORCERESIDENT 0x00000001 /* texture should be kept in video memory */ #define D3DRMTEXTURE_STATIC 0x00000002 /* texture will not change */ #define D3DRMTEXTURE_DOWNSAMPLEPOINT 0x00000004 /* point filtering should be used when downsampling */ #define D3DRMTEXTURE_DOWNSAMPLEBILINEAR 0x00000008 /* bilinear filtering should be used when downsampling */ #define D3DRMTEXTURE_DOWNSAMPLEREDUCEDEPTH 0x00000010 /* reduce bit depth when downsampling */ #define D3DRMTEXTURE_DOWNSAMPLENONE 0x00000020 /* texture should never be downsampled */ #define D3DRMTEXTURE_CHANGEDPIXELS 0x00000040 /* pixels have changed */ #define D3DRMTEXTURE_CHANGEDPALETTE 0x00000080 /* palette has changed */ #define D3DRMTEXTURE_INVALIDATEONLY 0x00000100 /* dirty regions are invalid */ /* * Shadow flags */ #define D3DRMSHADOW_TRUEALPHA 0x00000001 /* shadow should render without artifacts when true alpha is on */ typedef enum _D3DRMCOMBINETYPE { D3DRMCOMBINE_REPLACE, D3DRMCOMBINE_BEFORE, D3DRMCOMBINE_AFTER } D3DRMCOMBINETYPE, *LPD3DRMCOMBINETYPE; typedef D3DCOLORMODEL D3DRMCOLORMODEL, *LPD3DRMCOLORMODEL; typedef enum _D3DRMPALETTEFLAGS { D3DRMPALETTE_FREE, /* renderer may use this entry freely */ D3DRMPALETTE_READONLY, /* fixed but may be used by renderer */ D3DRMPALETTE_RESERVED /* may not be used by renderer */ } D3DRMPALETTEFLAGS, *LPD3DRMPALETTEFLAGS; typedef struct _D3DRMPALETTEENTRY { unsigned char red; /* 0 .. 255 */ unsigned char green; /* 0 .. 255 */ unsigned char blue; /* 0 .. 255 */ unsigned char flags; /* one of D3DRMPALETTEFLAGS */ } D3DRMPALETTEENTRY, *LPD3DRMPALETTEENTRY; typedef struct _D3DRMIMAGE { int width, height; /* width and height in pixels */ int aspectx, aspecty; /* aspect ratio for non-square pixels */ int depth; /* bits per pixel */ int rgb; /* if false, pixels are indices into a palette otherwise, pixels encode RGB values. */ int bytes_per_line; /* number of bytes of memory for a scanline. This must be a multiple of 4. */ void* buffer1; /* memory to render into (first buffer). */ void* buffer2; /* second rendering buffer for double buffering, set to NULL for single buffering. */ unsigned long red_mask; unsigned long green_mask; unsigned long blue_mask; unsigned long alpha_mask; /* if rgb is true, these are masks for the red, green and blue parts of a pixel. Otherwise, these are masks for the significant bits of the red, green and blue elements in the palette. For instance, most SVGA displays use 64 intensities of red, green and blue, so the masks should all be set to 0xfc. */ int palette_size; /* number of entries in palette */ D3DRMPALETTEENTRY* palette; /* description of the palette (only if rgb is false). Must be (1<