///////////////////////////////////////////////////////////////////////////

//

//  Copyright (C) Microsoft Corporation.  All Rights Reserved.

//

//  File:       d3dx9shapes.h

//  Content:    D3DX simple shapes

//

///////////////////////////////////////////////////////////////////////////



#include "d3dx9.h"



#ifndef __D3DX9SHAPES_H__

#define __D3DX9SHAPES_H__



///////////////////////////////////////////////////////////////////////////

// Functions:

///////////////////////////////////////////////////////////////////////////



#ifdef __cplusplus

extern "C" {

#endif //__cplusplus





//-------------------------------------------------------------------------

// D3DXCreatePolygon: 

// ------------------

// Creates a mesh containing an n-sided polygon.  The polygon is centered

// at the origin.

//

// Parameters:

//

//  pDevice     The D3D device with which the mesh is going to be used.

//  Length      Length of each side.

//  Sides       Number of sides the polygon has.  (Must be >= 3)

//  ppMesh      The mesh object which will be created

//  ppAdjacency Returns a buffer containing adjacency info.  Can be NULL.

//-------------------------------------------------------------------------

HRESULT WINAPI 

    D3DXCreatePolygon(

        LPDIRECT3DDEVICE9   pDevice,

        FLOAT               Length, 

        UINT                Sides, 

        LPD3DXMESH*         ppMesh,

        LPD3DXBUFFER*       ppAdjacency);





//-------------------------------------------------------------------------

// D3DXCreateBox: 

// --------------

// Creates a mesh containing an axis-aligned box.  The box is centered at

// the origin.

//

// Parameters:

//

//  pDevice     The D3D device with which the mesh is going to be used.

//  Width       Width of box (along X-axis)

//  Height      Height of box (along Y-axis)

//  Depth       Depth of box (along Z-axis)

//  ppMesh      The mesh object which will be created

//  ppAdjacency Returns a buffer containing adjacency info.  Can be NULL.

//-------------------------------------------------------------------------

HRESULT WINAPI 

    D3DXCreateBox(

        LPDIRECT3DDEVICE9   pDevice, 

        FLOAT               Width,

        FLOAT               Height,

        FLOAT               Depth,

        LPD3DXMESH*         ppMesh,

        LPD3DXBUFFER*       ppAdjacency);





//-------------------------------------------------------------------------

// D3DXCreateCylinder:

// -------------------

// Creates a mesh containing a cylinder.  The generated cylinder is

// centered at the origin, and its axis is aligned with the Z-axis.

//

// Parameters:

//

//  pDevice     The D3D device with which the mesh is going to be used.

//  Radius1     Radius at -Z end (should be >= 0.0f)

//  Radius2     Radius at +Z end (should be >= 0.0f)

//  Length      Length of cylinder (along Z-axis)

//  Slices      Number of slices about the main axis

//  Stacks      Number of stacks along the main axis

//  ppMesh      The mesh object which will be created

//  ppAdjacency Returns a buffer containing adjacency info.  Can be NULL.

//-------------------------------------------------------------------------

HRESULT WINAPI 

    D3DXCreateCylinder(

        LPDIRECT3DDEVICE9   pDevice,

        FLOAT               Radius1, 

        FLOAT               Radius2, 

        FLOAT               Length, 

        UINT                Slices, 

        UINT                Stacks,   

        LPD3DXMESH*         ppMesh,

        LPD3DXBUFFER*       ppAdjacency);





//-------------------------------------------------------------------------

// D3DXCreateSphere:

// -----------------

// Creates a mesh containing a sphere.  The sphere is centered at the

// origin.

//

// Parameters:

//

//  pDevice     The D3D device with which the mesh is going to be used.

//  Radius      Radius of the sphere (should be >= 0.0f)

//  Slices      Number of slices about the main axis

//  Stacks      Number of stacks along the main axis

//  ppMesh      The mesh object which will be created

//  ppAdjacency Returns a buffer containing adjacency info.  Can be NULL.

//-------------------------------------------------------------------------

HRESULT WINAPI

    D3DXCreateSphere(

        LPDIRECT3DDEVICE9  pDevice, 

        FLOAT              Radius, 

        UINT               Slices, 

        UINT               Stacks,

        LPD3DXMESH*        ppMesh,

        LPD3DXBUFFER*      ppAdjacency);





//-------------------------------------------------------------------------

// D3DXCreateTorus:

// ----------------

// Creates a mesh containing a torus.  The generated torus is centered at

// the origin, and its axis is aligned with the Z-axis.

//

// Parameters: 

//

//  pDevice     The D3D device with which the mesh is going to be used.

//  InnerRadius Inner radius of the torus (should be >= 0.0f)

//  OuterRadius Outer radius of the torue (should be >= 0.0f)

//  Sides       Number of sides in a cross-section (must be >= 3)

//  Rings       Number of rings making up the torus (must be >= 3)

//  ppMesh      The mesh object which will be created

//  ppAdjacency Returns a buffer containing adjacency info.  Can be NULL.

//-------------------------------------------------------------------------

HRESULT WINAPI

    D3DXCreateTorus(

        LPDIRECT3DDEVICE9   pDevice,

        FLOAT               InnerRadius,

        FLOAT               OuterRadius, 

        UINT                Sides,

        UINT                Rings, 

        LPD3DXMESH*         ppMesh,

        LPD3DXBUFFER*       ppAdjacency);





//-------------------------------------------------------------------------

// D3DXCreateTeapot: 

// -----------------

// Creates a mesh containing a teapot.

//

// Parameters: 

//

//  pDevice     The D3D device with which the mesh is going to be used.

//  ppMesh      The mesh object which will be created

//  ppAdjacency Returns a buffer containing adjacency info.  Can be NULL.

//-------------------------------------------------------------------------

HRESULT WINAPI

    D3DXCreateTeapot(

        LPDIRECT3DDEVICE9   pDevice,

        LPD3DXMESH*         ppMesh,

        LPD3DXBUFFER*       ppAdjacency);





//-------------------------------------------------------------------------

// D3DXCreateText: 

// --------------- 

// Creates a mesh containing the specified text using the font associated

// with the device context.

//

// Parameters:

//

//  pDevice       The D3D device with which the mesh is going to be used.

//  hDC           Device context, with desired font selected

//  pText         Text to generate

//  Deviation     Maximum chordal deviation from true font outlines

//  Extrusion     Amount to extrude text in -Z direction

//  ppMesh        The mesh object which will be created

//  pGlyphMetrics Address of buffer to receive glyph metric data (or NULL)

//-------------------------------------------------------------------------

HRESULT WINAPI

    D3DXCreateTextA(

        LPDIRECT3DDEVICE9   pDevice,

        HDC                 hDC,

        LPCSTR              pText,

        FLOAT               Deviation,

        FLOAT               Extrusion,

        LPD3DXMESH*         ppMesh,

        LPD3DXBUFFER*       ppAdjacency,

        LPGLYPHMETRICSFLOAT pGlyphMetrics);



HRESULT WINAPI

    D3DXCreateTextW(

        LPDIRECT3DDEVICE9   pDevice,

        HDC                 hDC,

        LPCWSTR             pText,

        FLOAT               Deviation,

        FLOAT               Extrusion,

        LPD3DXMESH*         ppMesh,

        LPD3DXBUFFER*       ppAdjacency,

        LPGLYPHMETRICSFLOAT pGlyphMetrics);



#ifdef UNICODE

#define D3DXCreateText D3DXCreateTextW

#else

#define D3DXCreateText D3DXCreateTextA

#endif





#ifdef __cplusplus

}

#endif //__cplusplus    



#endif //__D3DX9SHAPES_H__



