#define D3DFONT_BOLD 0x0001 #define D3DFONT_ITALIC 0x0002 #define D3DFONT_SHADOW_LEVEL1 0x0004 #define D3DFONT_SHADOW_LEVEL2 0x0008 #define D3DFONT_SHADOW_LEVEL3 0x0010 #define D3DFONT_ANTIALIAS 0x0020 #define TEXTURE_WIDTH 1024 #define TEXTURE_HEIGHT 1024 enum COLORFORMAT { CF_NOTDEFINED = 0, CF_YUY2, CF_BGRX,//rgb32 CF_BGR,//rgb24 CF_BGR565, CF_BGR555, CF_YV12, CF_IYUV }; enum SurfaceType{ SURFACETYPE_INVALID=0, SURFACETYPE_AGPTEXTURE=1, SURFACETYPE_VIDMEMTEXTURE=2, SURFACETYPE_3DCANVAS=3, SURFACETYPE_PRIMARY=4, SURFACETYPE_MANAGEDTEXTURE=5, }; LPDIRECTDRAWSURFACE7 CreateCustomSurface( LPDIRECTDRAW7 pDD,SurfaceType surfaceType,void *lpParam, DWORD dwWidth,DWORD dwHeight); LPVOID GetSurfacePointer(LPDIRECTDRAWSURFACE7 psurf); BOOL GetSurfacePointer(LPDIRECTDRAWSURFACE7 pDDSurface,BYTE **ppSurf, DWORD* pitch,LPRECT prect); BOOL ReleaseSurfacePointer(LPDIRECTDRAWSURFACE7 pDDSurface); class CD3DRenderer; class CD3DFont { public: CD3DFont(); ~CD3DFont(){Endup();} BOOL Setup(CD3DRenderer* renderer,const char* strFontName, DWORD dwHeight, DWORD dwFlags=0L); BOOL Endup(); HRESULT GetTextExtent(const char* strText, SIZE* pSize ); HRESULT DrawText( float x, float y,RECT rc, DWORD dwColor,const char* strText, int Space=0 ); CD3DRenderer * GetRenderer(){return m_renderer;} protected: LPDIRECT3DDEVICE7 m_pd3dDevice; LPDIRECTDRAWSURFACE7 m_pTexture; D3DTLVERTEX * m_pVB; DWORD m_dwTexWidth; DWORD m_dwTexHeight; float m_fTexCoords[128-32][4]; DWORD m_dwSavedStateBlock; DWORD m_dwDrawTextStateBlock; int m_def_hint; BOOL m_bIsInited; CD3DRenderer* m_renderer; int m_State; }; enum DrawRecordType{ DRT_POINTLIST = D3DPT_POINTLIST, DRT_LINELIST = D3DPT_LINELIST, DRT_LINESTRIP = D3DPT_LINESTRIP, DRT_IMAGE = 7, DRT_TEXT = 8, DRT_RECTLIST = 9 }; struct DrawRecord{ DrawRecordType drawType; //image.. DWORD colorValue; SIZE srcSize; //source size or source dimension... union{ struct { COLORFORMAT colorFormat; BYTE* pSrc; RECT roi; DWORD flag; }img; //text struct{ CD3DFont* pFont; LPCSTR pText; POINT pt; }text; //RECTs struct{ ULONG nRect; RECT * rects; }rects; //LINE /POINT ¹°¸®ÀûÀÎ pointÀÇ ¼ö¸¦ ³ªÅ¸³½´Ù... struct{ ULONG nPt; POINT * pts; }pts; }; }; class CD3DRenderer{ public: CD3DRenderer(); ~CD3DRenderer(); BOOL Setup(COLORFORMAT renderer_color_format=CF_BGR565); BOOL Endup(); RECT GetMonitorRect(){return m_rcMonitor;} BOOL Draw(RECT target_rect,SIZE source,COLORFORMAT src_img_format,BYTE* psrc,CD3DFont* pFont=NULL,char * text=NULL,DWORD color=0xFFFFFFFF); BOOL DrawRecords(RECT target_rect,D3DVALUE zValue,ULONG nRecords,DrawRecord* pRecords); BOOL DrawImageTexture(RECT t,RECT s,DWORD color,D3DVALUE zValue); static BOOL WINAPI AdapterEnumCallbackWrapper( GUID* pGUID, LPSTR strDesc,LPSTR strName, VOID* lpContext, HMONITOR hmonitor); BOOL SetHWnd(HWND hwnd); protected: BOOL AdapterEnumCallback( GUID* pGUID, LPSTR strDesc,LPSTR strName, HMONITOR hmonitor); BOOL GetSurfacePointer(RECT* prcdst,BYTE **ppSurf,DWORD * pitch); ReleaseSurfacePointer(); void SetVertexColorValue(int indexFrom,int indexTo,DWORD colorValue); void SetVertexZValue(int indexFrom,int indexTo,D3DVALUE zValue); void EnableAlpha(); public: LPDIRECTDRAW7 m_pDD; LPDIRECT3DDEVICE7 m_pd3dDevice; public: LPDIRECTDRAWSURFACE7 m_pddsTexture; LPDIRECTDRAWSURFACE7 m_pddsPrimary; LPDIRECT3D7 m_pD3D; LPDIRECTDRAWSURFACE7 m_pddsBackbuffer; LPDIRECTDRAWCLIPPER m_pcClipper;//·»´õ·¯ ¸¶´Ù º°µµ·Î °¡Áö°í ÀÖÀ»°ÍÀÎÁö °áÁ¤ÇÒ°Í.. COLORFORMAT m_colorformat; DWORD m_pixelbyte; SIZE m_MonitorSize; //==> pixel size; HMONITOR m_hMonitor; RECT m_rcMonitor; BOOL m_bIsInited; D3DTLVERTEX *m_nf; DWORD m_dwSavedStateBlock; DWORD m_dwDrawTextStateBlock; DWORD m_Th; DWORD m_Tw; LPDIRECTDRAWSURFACE7 m_pddsTextures[8]; BOOL m_bAgpSupported; public: void MakeStateBlock(); BOOL Commit(RECT tr); CRITICAL_SECTION m_crit; BOOL m_bSetup; BOOL MoveBackBuffer(RECT & rcNew,RECT& rcOld); BOOL Clear(RECT tr); }; extern DDPIXELFORMAT DDPF_RGBA16; extern DDPIXELFORMAT DDPF_RGB32; extern DDPIXELFORMAT DDPF_RGB24; extern DDPIXELFORMAT DDPF_RGB565; extern DDPIXELFORMAT DDPF_RGB555; extern DDPIXELFORMAT DDPF_YUY2;