- FRAMEWORK -

기본적으로 엔진 프레임웍 구조는 콜백함수 형식을 취하고 있습니다.

INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, int )
{

   
xFrmWork_SetUserMsgProcCB(UserWndProc);               외부 윈도우 메세지 콜백 함수 등록
   
xFrmWork_SetCameraInitCB(GameMgr_CameraInit);         카메라 초기화 콜백 함수 등록
   
xFrmWork_SetGameInitCB(GameMgr_GameInit);             GameInit 콜백 함수 등록

   
xFrmWork_SetRunCB(GameMgr_Run);                       메인 게임 Run
   
xFrmWork_SetRunNoFilterCB(GameMgr_RunNoFilter);       xFrmWork_SetRunCB과 비슷하지만 화면 Filter 처리를 하지 않습니다.
   
xFrmWork_SetRunOffScreenCB(GameMgr_RunOffScreen);     EndScene 이후라서 메인 렌더링과 별개의 렌더링 코드 호출합니다.

   
xFrmWork_SetLostDeviceCB(GameMgr_LostDevice);         Device 변경시
   
xFrmWork_SetRestoreDeviceCB(GameMgr_RestoreDevice);   Device 회복시

   
xFrmWork_SetDestroyCB(GameMgr_Destroy);               엔진 종료시

    xFrmWork_Init();                                 엔진 초기화

    CFrmWorkInfo FRMINFO;                            엔진 초기화 정보

    FRMINFO.m_iSW = 800;                             윈도우 크기
    FRMINFO.m_iSH = 600;
    FRMINFO.m_hInst = hInst;
    FRMINFO.m_bInnerMenu = true;                     
윈도우 시스템 메뉴를 쓰지 않고 엔진 내부의 메뉴를 씁니다.

    xFrmWork_Create(FRMINFO,"Sprite ANITEX");

    xFrmWork_Run();
    xFrmWork_Destroy();    

    return 1;
}


CFrmWorkInfo 정보

int m_iSX,m_iSY; 최초 윈도우 생성 위치.
int m_iSW,m_iSH; 해상도 크기

bool m_bFullWindow; FullMode 여부
HINSTANCE m_hInst; 윈도우 인스턴스

bool m_bLockableBackBuffer; 현재 화면에 DC를 이용한 문자를 찍고자 할때 또는 xDraw_PutFont 함수를 쓰고자 할때
속도가 느려지므로 왠만하면 쓰는 경우가 없어야 합니다.

DWORD m_dwMyWindowStyle; 좋습니다.CreateWindow 함수에 인자를 직접 지정해서 넘길수 있습니다
HWND m_hWnd; 좋습니다.윈도우 핸들을 담고 있습니다.Create시에 미리 지정되어 있으면 내부에서 윈도우 생성 안합니다.
bool m_bShowFPS; 좋습니다.화면위 상단에 간단한 정보를 출력합니다.
bool m_bSyncHz;
좋습니다.수직 동기화 여부.
좋습니다.waiting for a vertical sync interval. used for fixed fps. use only test program!.

bool m_bKillFocus; 좋습니다.마우스가 포커스를 다른 윈도우에 옮기면 렌더링을 중지할것인가 여부.
bool m_bInnerMenu; 좋습니다.윈도우 시스템 메뉴를 쓰지 않고 엔진 내부의 메뉴를 씁니다  
bool m_bUseCashingTexture; 좋습니다.텍스춰 메모리관리를 캐슁 상태로 관리합니다. D3D 의 MANAGED resource 와 동일. 초기치로 true
bool m_bStretchBLT;
좋습니다.윈도우 사이즈 변경시 백버퍼 해상도가 원래 해상도를 유지할것인가 여부
좋습니다.true 이면 원본 백버퍼 해상도가 유지 되고 윈도우 사이즈에 맞게 축소 또는 확대 되어서 렌더링 됩니다.
좋습니다.초기치로 false 윈도우 사이즈가 변하면 백버퍼 사이즈도 변하게 되어 있습니다.

bool m_bShowCursor; 좋습니다.윈도우 커서를 보여줄것인가.

bool m_bUseThread; 좋습니다.쓰레드를 지원할것인가. 초기치 false. 멀티 쓰레드로 데이타 로드시 true로 셋팅하면 됩니다.


void         xFrmWork_Init();
엔진 스타트

void         xFrmWork_Create(const CFrmWorkInfo& FRM,PCSTR sTitle = NULL,const XCRGBA* pRGBA = NULL );
엔진 가동 시작.

void         xFrmWork_Run();
메시지 처리를 포함한 렌더링 함수. Win32 프로그램 방식에서 사용. MFC 사용 불가.
내부에 xFrmWork_Render() 함수를 포함하고 있습니다.

void         xFrmWork_Render();
렌더링 함수. MFC에서 사용.

 

void        xFrmWork_SetUserMsgProcCB(X_MsgProc_cb CB);         
외부 윈도우 메세지 콜백 함수 등록

void        xFrmWork_SetCameraInitCB(X_INTRetNormal_cb pCB);    
카메라 초기화 콜백 함수 등록

void        xFrmWork_SetGameInitCB(X_INTRetNormal_cb pCB);      
GameInit 콜백 함수 등록

void        xFrmWork_SetRunCB(X_INTRetNormal_cb pCB);           
메인 게임 Run

void        xFrmWork_SetRunNoFilterCB(X_INTRetNormal_cb pCB);   
xFrmWork_SetRunCB과 비슷하지만 화면 Filter 처리를 하지 않습니다.

   
GetDC 에 찍는 폰트는 필터 처리를 회피 하기 위해 장면 렌더링 후(EndSence 이후)에 나중에 찍어줘야 합니다!
   
xFrmWork_SetRunNoFilterCB 에 등록하면 장면 렌더링이 끝난후 다시 BeginScene 한후에 찍어줍니다.
    ex)
    int XC
ALLBACK GameMgr_RunNoFilter()
    {
        if( g_SKIP.GetIsSkip() == FALSE )
            xDraw_PutFont("XEngine....",&XCFontType(250,683/2 - 50,X_RGBA_YELLOW,g_iFontIndex,74,TEXT_OUTLINE));
        return 1;
    }

    xFrmWork_SetRunCB,xFrmWork_SetRunNoFilterCB,xFrmWork_SetRunOffScreenCB 의 차이!
   
    xFrmWork_SetRunCB 에서는 뽀샤시 효과 같은 필터가 먹습니다. 하지만 xFrmWork_SetRunNoFilterCB 는 필터처리가
    되지 않습니다. 보통 게임 프로그래밍시 일반 Run은 xFrmWork_SetRunCB 에 기술하고 GUI나 폰트 출력 같은 루틴은
    xFrmWork_SetRunNoFilterCB
기술하면 됩니다. xFrmWork_SetRunOffScreenCB 은 메인타겟에 렌더링이 끝난이후
    일반 텍스춰 서페이스에 렌더링할 경우 기술하면 됩니다. EndScene 이후에 호출됩니다.

    호출 순서 xFrmWork_SetRunCB -> xFrmWork_SetRunNoFilterCB -> xFrmWork_SetRunOffScreenCB


void        xFrmWork_SetRunOffScreenCB(X_INTRetNormal_cb pCB);  
EndScene 이루라서 메인 렌더링과 별개의 렌더링 코드 호출합니다.

void        xFrmWork_SetLostDeviceCB(X_INTRetNormal_cb pCB);    
윈도우모드,풀모드 전환시, 윈도우 사이즈 변경시 비디오램이 초기화 되면
현재 로드된 디바이스 종속 개체들의 OnLost 함수를 전부 불러줘서 클리어 처리를 합니다.


void        xFrmWork_SetRestoreDeviceCB(X_INTRetNormal_cb pCB); 

윈도우모드,풀모드 전환시, 윈도우 사이즈 변경시 비디오램이 초기화 되면
현재 로드된 디바이스 종속 개체들의 OnRestore 함수를 전부 불러줘서 다시 비디오램에 적재 합니다.

디바이스가 변경되면 반드시 디바이스 종속 개체들을 일일이 체크해줘야 합니다. 나중에 수고를 덜기 위해선 작업 과정 도중에
틈틈히 윈도우 사이즈를 변경해서 놓친 개체가 있는지 체크해보는게 좋습니다.
체크 클래스 -> CWorld,CSpakleCOL,CModelCOL,CCar,CBasicChar,XCShadowSystem... 클래스들의 OnRestoreDevice,OnLostDevice 함수를 불러주면 됩니다.
 

void        xFrmWork_SetDestroyCB(X_INTRetNormal_cb pCB);       
엔진 종료시

void        xFrmWork_Destroy();
엔진 파괴

void        xFrmWork_Close();
엔진 종료를 설정. xFrmWork_Run() 에서 빠져 나갑니다.

HWND        xFrmWork_GethWnd();
엔진이 보유한 윈도우 핸들을 돌려줍니다.

HDC         xFrmWork_GetDC();
현재 렌더링 되고 있는 DC 를 얻습니다.

void        xFrmWork_ReleaseDC(HDC hDC);
얻은 DC를 해제합니다.

HINSTANCE   xFrmWork_GethInstance();
현재 엔진이 보유하고 있는 인스턴스를 돌려줍니다.

void        xFrmWork_GetRenderRegionRect(XCRECT* pRC);
렌더링 되고 있는 윈도우 클라이언트 영역의 크기를 구합니다.

BOOL        xFrmWork_GetActive();
현재 엔진이 렌더링 되고 있는지 여부를 얻습니다.

void        xFrmWork_SetActive(BOOL dwFLAG);
엔진의 활성화 여부를 셋팅합니다. Active == false 엔진 가동이 중단됩니다.

void        xFrmWork_SetForcehWnd(HWND hWnd);
엔진의 윈도우 핸들을 외부 핸들로 대체합니다.

LRESULT     xFrmWork_MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam,BOOL bCallDefProc  );
윈도우 메세지 처리 함수.

int         xFrmWork_ChkReference();

LPDIRECT3DDEVICE9   xFrmWork_GetDevice();
엔진이 보유하고 있는 D3D 디바이스를 구합니다.

DWORD       xFrmWork_GetCurPixelMode();
현재 렌더링 되고 있는 백버퍼의 픽셀 포맷을 구합니다. _D3DFORMAT 포맷으로 캐스팅 해서 쓰면됩니다.

void        xFrmWork_ShowEnableFPS(BOOL bFLAG);
현재 윈도우 창에 FPS 상태 보유주기를 셋팅합니다.

float       xFrmWork_GetFPS();
렌더링 되고 있는 FPS 를 구합니다.

float       xFrmWork_Wait();

void        xFrmWork_GetWindowPos(int* piX,int* piY);
렌더링 되고 있는 윈도우의 위치를 구합니다.

 

void        xFrmWork_GetWindowSize(int* piW,int* piH);

- SIZE -

void        xFrmWork_SetWindowPos(int iX,int iY);

윈도우 모드 일때 윈도우의 위치를 게임 플레이 중에 지정할 수 있습니다. 다음프레임에 반영이 됩니다.
초기 생성시 위치는 FRMWORK 의
 m_iSX,m_iSY 를 셋팅하면 됩니다.
 

void        xFrmWork_SetWindowSize(int iW,int iH);
윈도우 모드일때 윈도우의 사이즈를 변경 시킬수 있습니다. 다음프레임에 반영이 됩니다.
백버퍼가 윈도우 사이즈에 맞게 변할것인가는 FRMWORK 의
m_bStretchBLT 셋팅 여부에 달려 있습니다.
초기 생성시 윈도우 사이즈는
m_iSW,m_iSH 를 셋팅하면 됩니다.

void        xFrmWork_ToggleFullWindowScreen();
풀스크린과 윈도우 모드를 번갈아서 전환합니다.
xFrmWork_SetLostDeviceCB,xFrmWork_SetRestoreDeviceCB 에 콜백을 등록해서 현재 사용중인 모델의 Restore,Lost를 반드시 해야 합니다.

void        xFrmWork_SaveCapture(PCSTR sFILE);
현재 렌더링 장면을 주어진 jpg 파일로 저장합니다.