text: ///////////////////////////////////////////////////////////////////////////
  //
  //  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  //
  //  File:       d3dx8shapes.h
  //  Content:    D3DX simple shapes
  //
  ///////////////////////////////////////////////////////////////////////////
  
  #include "d3dx8.h"
  
  #ifndef __D3DX8SHAPES_H__
  #define __D3DX8SHAPES_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(
          LPDIRECT3DDEVICE8   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(
          LPDIRECT3DDEVICE8   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(
          LPDIRECT3DDEVICE8   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(
          LPDIRECT3DDEVICE8  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(
          LPDIRECT3DDEVICE8   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(
          LPDIRECT3DDEVICE8   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(
          LPDIRECT3DDEVICE8   pDevice,
          HDC                 hDC,
          LPCSTR              pText,
          FLOAT               Deviation,
          FLOAT               Extrusion,
          LPD3DXMESH*         ppMesh,
          LPD3DXBUFFER*       ppAdjacency,
          LPGLYPHMETRICSFLOAT pGlyphMetrics);
  
  HRESULT WINAPI
      D3DXCreateTextW(
          LPDIRECT3DDEVICE8   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 //__D3DX8SHAPES_H__
  