Function Prototypes

static void ReportError(HWND hwnd, int nMessage,

HRESULT hRes);

static void FatalError(HWND hwnd, int nMessage, HRESULT hRes);

static DWORD BitDepthToFlags(DWORD dwBitDepth);

static DWORD FlagsToBitDepth(DWORD dwFlags);

static void SetPerspectiveProjection(LPD3DMATRIX lpd3dMatrix,

double dHalfHeight,

double dFrontClipping,

double dBackClipping);

static void SetRotationAboutY(LPD3DMATRIX lpd3dMatrix,

double dAngleOfRotation);

static HRESULT CreateDirect3D(HWND hwnd);

static HRESULT ReleaseDirect3D(void);

static HRESULT CreatePrimary(HWND hwnd);

static HRESULT RestorePrimary(void);

static HRESULT ReleasePrimary(void);

static HRESULT WINAPI EnumDeviceCallback(LPGUID lpGUID,

LPSTR lpszDeviceDesc,

LPSTR lpszDeviceName,

LPD3DDEVICEDESC lpd3dHWDeviceDesc,

LPD3DDEVICEDESC lpd3dSWDeviceDesc,

LPVOID lpUserArg);

static HRESULT ChooseDevice(void);

static HRESULT CreateDevice(DWORD dwWidth, DWORD dwHeight);

static HRESULT RestoreDevice(void);

static HRESULT ReleaseDevice(void);

static LRESULT RestoreSurfaces(void);

static HRESULT FillExecuteBuffer(void);

static HRESULT CreateScene(void);

static HRESULT ReleaseScene(void);

static HRESULT AnimateScene(void);

static HRESULT UpdateViewport(void);

static HRESULT RenderScene(void);

static HRESULT DoFrame(void);

static void PaintSuspended(HWND hwnd, HDC hdc);

static LRESULT OnMove(HWND hwnd, int x, int y);

static LRESULT OnSize(HWND hwnd, int w, int h);

static LRESULT OnPaint(HWND hwnd, HDC hdc, LPPAINTSTRUCT lpps);

static LRESULT OnIdle(HWND hwnd);

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,

WPARAM wParam, LPARAM lParam);

int PASCAL WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpszCommandLine, int cmdShow);