ID3DXFont 인터페이스

ID3DXFont 인터페이스


ID3DXFont 인터페이스는,
지정한 장치상으로 지정한 폰트를 렌더링 하기 위해서 필요한 텍스처와 리소스를 캡슐화하기 위해서 사용한다. 


ID3DXFont 멤버

Begin

텍스트를 드로잉(Drawing) 할 수 있도록(듯이) 장치를 준비한다.

DrawText

정형된 텍스트를 드로잉(Drawing) 한다. 이 메서드는, ANSI 및 Unicode 캐릭터 라인을 지원 한다.

End

ID3DXFont::Begin 가 불려 간 시점의 장치 상태를 복원한다.

GetDevice

폰트 개체에 관련지을 수 있는 Microsoft® Direct3D® 장치를 얻어온다.

GetLogFont

폰트의 속성을 얻어온다.

OnLostDevice

비디오 메모리 리소스에의 참조를 모두 릴리즈 해, 모든 스테이트 블록을 삭제한다.

OnResetDevice

장치가 리셋 된 후에 호출할 필요가 있다.

주의

ID3DXFont 인터페이스는,D3DXCreateFont 또는 D3DXCreateFontIndirect 함수를 호출해 얻어온다.

모든 구성 요소 개체 모델 (COM) 인터페이스와 같이,ID3DXFont 인터페이스는 IUnknown 인터페이스의 메서드를 계승한다.

LPD3DXFONT 형은,ID3DXFont 인터페이스의 포인터로서 정의되고 있다.

typedef interface ID3DXFont *LPD3DXFONT;


# 간단하게 사용법을 익혀 보자.
 

DWORD    _dwSize = 200;

LPD3DXFONT g_pFont = NULL;            // LPD3DXFONT 인터페이스를 선언한다.

D3DXFONT_DESC desc;                     // 폰트를 설정한다.
desc.CharSet              = HANGUL_CHARSET;
strcpy(desc.FaceName,"");                   // FaceName을 비워놓으면 Windows Default Font를 사용한다.
desc.Height                = static_case<INT>(_dwSize*2.083f);    // 주의
desc.Width                 = _dwSize ;
desc.Weight               = FW_NORMAL;
desc.Quality               = DEFAULT_QUALITY;
desc.MipLevels          = 1;
desc.Italic                   = 0;
desc.OutputPrecision  = OUT_DEFAULT_PRECIS;
desc.PitchAndFamily   = FF_DONTCARE;

    DC(Device Context) 폰트를 사용해봤다면 눈에 익은 몇가지 파라메터들이 보일것이다. 
    다른 점이라면 폰트정보 뿐 만 아니라 밉맵 레벨도 설정해주는 부분등도 존재한다는 것이다. 
    (LPD3DXFONT의 속도가 느린 이유중의 하나가 텍스쳐를 생성해서 출력하기 때문이다.)

D3DXCreateFontIndirect( g_pd3dDevice, &desc, &g_pFont );        // Font 생성

RECT rect;
char str[MAX_PATH];
SetRect( &rect, 0, 0, 800, 600);
ZeroMemory( str, sizeof(char) * MAX_PATH );
sprintf( str, "FPS = %5d \n", g_fps );
g_pFont->DrawTextA(NULL, str, -1, &rect, DT_LEFT,D3DCOLOR_ARGB(0xff,0xff,0xff,0xff) );



# DrawText 함수에 대해 알아보자.
 

// DrawText(
//   LPCSTR              pString     -> 화면내 보여질 문자열
//   INT                    Count       -> 문자열 내에 포함된 문자열의 수
//   LPRECT              pRect       -> 그려질 화면상의 영역
//   DWORD             Format    -> 텍스트 포맷을 지정하는 플래그
//   D3DCOLOR        Color       -> 텍스트 컬러                                  )

- Format Flags(조합해서 사용한다.)
#define DT_TOP                      0x00000000
#define DT_LEFT                     0x00000000
#define DT_CENTER                 0x00000001
#define DT_RIGHT                   0x00000002
#define DT_VCENTER               0x00000004
#define DT_BOTTOM               0x00000008
#define DT_WORDBREAK          0x00000010
#define DT_SINGLELINE            0x00000020
#define DT_EXPANDTABS         0x00000040
#define DT_TABSTOP              0x00000080
#define DT_NOCLIP                  0x00000100
#define DT_EXTERNALLEADING    0x00000200
#define DT_CALCRECT                 0x00000400
#define DT_NOPREFIX                 0x00000800
#define DT_INTERNAL                 0x00001000

+ 자세한 정보는 도움말에서 확인 하자
다운로드 가능한 도움말 파일 ->
 http://studior.egloos.com/278986
SDK를 Web환경에서 지원하는 Site ->  http://telnet.or.kr/sec_directx/

1. 좌우 정렬 가능
2. 출력할 영역 RECT 정보 설정
3. 32비트값 사용
4. '\n'는 개행문자로 간주하여 y 출력위치를 폰트 사이즈만큼 계산하여 개행처리 해준다.
5. 해제는 Release

6. DeviceLost시에 OnLostDevice 호출후에 Device를 리셋 하고 OnResetDevice를 호출한다.
(단 DeviceLost정도의 경미한 증상경우에만 가능하다. 그 이상이라면 Release후에 재생성하자.)

7. 마지막으로 주의할점은 Begin 과 End가 없는 버전의 DX9도 있다는 것이다.



출저:
http://studior.egloos.com/274749

이 글을 공유하기

댓글

Designed by JB FACTORY