text: // Magic Software, Inc.
  // http://www.magic-software.com
  // http://www.wild-magic.com
  // Copyright (c) 2003.  All Rights Reserved
  //
  // The Wild Magic Library (WML) source code is supplied under the terms of
  // the license agreement http://www.magic-software.com/License/WildMagic.pdf
  // and may not be copied or disclosed except in accordance with the terms of
  // that agreement.
  
  #ifndef WMLBEZIERPATCH_H
  #define WMLBEZIERPATCH_H
  
  // This class exists solely to support BezierMesh.
  
  #include "WmlTriMesh.h"
  
  namespace Wml
  {
  
  class WML_ITEM BezierPatch : public Object
  {
      WmlDeclareRTTI;
      WmlDeclareStream;
  
  public:
      // abstract base class for specific type and degree patches
      virtual ~BezierPatch ();
  
      enum PatchType
      {
          PT_TRIANGLE,
          PT_RECTANGLE,
          PT_CYLINDER
      };
  
      virtual PatchType GetType () const = 0;
  
      // member access
      int GetDegree () const;
      int GetIndexQuantity () const;
      const int* Indices () const;
  
      // tessellation
      virtual void Tessellate (int iLevel, const Vector3f* akCtrlPoint,
          const ColorRGB* akCtrlColor, const Vector2f* akCtrlTexture,
          TriMesh* pkMesh, int& riVertexStart, int& riTriangleStart) = 0;
  
      // number of vertices/triangles generated by tessellation at given level
      virtual int GetVerticesPerPatch (int iLevel) const = 0;
      virtual int GetTrianglesPerPatch (int iLevel) const = 0;
  
  protected:
      // Construction and destruction.  BezierPatch accepts responsibility
      // for deleting the input array.
      BezierPatch (int iDegree, int iIndexQuantity, int* aiIndex);
  
      BezierPatch ();
  
      int m_iDegree;
      int m_iIndexQuantity;
      int* m_aiIndex;
  };
  
  WmlSmartPointer(BezierPatch);
  WmlRegisterStream(BezierPatch);
  #include "WmlBezierPatch.inl"
  
  }
  
  #endif
  