00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 #ifndef D3DFONT_H
00009 #define D3DFONT_H
00010 #include <tchar.h>
00011 #include <d3d8.h>
00012 
00013 
00014 #define D3DFONT_BOLD        0x0001
00015 #define D3DFONT_ITALIC      0x0002
00016 #define D3DFONT_ZENABLE     0x0004
00017 
00018 
00019 #define D3DFONT_CENTERED    0x0001
00020 #define D3DFONT_TWOSIDED    0x0002
00021 #define D3DFONT_FILTERED    0x0004
00022 
00023 
00024 
00025 
00026 
00027 class CD3DFont
00028 {
00029     enum 
00030     { 
00031         D3DFVF_FONT2DVERTEX = (D3DFVF_XYZRHW|D3DFVF_DIFFUSE|D3DFVF_TEX1) , 
00032         D3DFVF_FONT3DVERTEX = (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1) , 
00033         TextBufferLength = 1024 , 
00034         MAX_NUM_VERTICES = TextBufferLength * 6 , 
00035         MaxCalls = 30 
00036     } ; 
00037 
00038     TCHAR   m_strFontName[80];            
00039     DWORD   m_dwFontHeight;
00040     DWORD   m_dwFontFlags;
00041 
00042     LPDIRECT3DDEVICE8       m_pd3dDevice; 
00043     LPDIRECT3DTEXTURE8      m_pTexture;   
00044     LPDIRECT3DVERTEXBUFFER8 m_pVB;        
00045     DWORD   m_dwTexWidth;                 
00046     DWORD   m_dwTexHeight;
00047     FLOAT   m_fTextScale;
00048     FLOAT   m_fTexCoords[128-32][4];
00049 
00050     
00051     DWORD   m_dwSavedStateBlock;
00052     DWORD   m_dwDrawTextStateBlock;
00053 
00054     struct DrawTextArgs 
00055     {
00056         bool  m_bScaled ; 
00057         FLOAT m_x ;  FLOAT m_y ;  FLOAT m_z ; 
00058         FLOAT m_fXScale ; FLOAT m_fYScale ; 
00059         DWORD m_dwColor ;  
00060         TCHAR *m_strText ; 
00061         DWORD m_dwFlags ; 
00062     } ; 
00063 
00064     DrawTextArgs m_DTArgs [ MaxCalls ] ; 
00065     char    m_TextBuffer  [ TextBufferLength ] ; 
00066     char   *m_pTextBuffer ; 
00067     UINT    m_nDeferedCalls ;
00068     bool    m_bBeginText ; 
00069     inline  HRESULT DeferedDrawText( FLOAT x, FLOAT y, DWORD dwColor, 
00070                       TCHAR* strText, DWORD dwFlags=0L );
00071     inline  HRESULT DeferedDrawTextScaled ( FLOAT x, FLOAT y, FLOAT z, 
00072                             FLOAT fXScale, FLOAT fYScale, DWORD dwColor, 
00073                             TCHAR* strText, DWORD dwFlags=0L ) ; 
00074     inline  HRESULT DeferedDraw
00075             ( bool bScaled , 
00076               FLOAT x, FLOAT y, FLOAT z, 
00077               FLOAT fXScale, FLOAT fYScale, DWORD dwColor, 
00078               TCHAR* strText, DWORD dwFlags ) ; 
00079 
00080     inline  void ClearBeginEndData (void ) ; 
00081 
00082 
00083 public:
00084     
00085     HRESULT BeginText ( void ) ;
00086     HRESULT EndText ( void ) ;
00087 
00088     HRESULT DrawText( FLOAT x, FLOAT y, DWORD dwColor, 
00089                       TCHAR* strText, DWORD dwFlags=0L );
00090     HRESULT DrawTextScaled ( FLOAT x, FLOAT y, FLOAT z, 
00091                             FLOAT fXScale, FLOAT fYScale, DWORD dwColor, 
00092                             TCHAR* strText, DWORD dwFlags=0L ) ; 
00093 
00094    
00095     
00096     
00097     HRESULT GetTextExtent( TCHAR* strText, SIZE* pSize );
00098 
00099     
00100     HRESULT InitDeviceObjects(LPDIRECT3DDEVICE8 pd3dDevice);
00101     HRESULT RestoreDeviceObjects(void);
00102     HRESULT InvalidateDeviceObjects(void);
00103     HRESULT DeleteDeviceObjects(void);
00104 
00105     
00106     CD3DFont( TCHAR* strFontName, DWORD dwHeight, DWORD dwFlags=0L );
00107     ~CD3DFont();
00108 };
00109 
00110 #endif
00111 
00112