반응형
게임브리오에서는 여러가지 렌더러(Open GL, DirectX 8, DirectX 9, PS2)를 지원하고 있다.
그렇기 때문에 렌더러를 생성할 때 일반화된 프로그램을 작성할 수 없다.
게임브리오에서는 렌더러별로 Create 함수를 이용하여 렌더러를 생성하도록 하고 있다. 모든 렌더러는 NxRenderer 클래스를 상속받고 있으며, 모든 렌더러 함수들은 가상함수로 제공됨으로써 게임브리오 응용 프로그램에서 생성한 렌더러가 실행될 수 있도록 되어있다.
Create 함수를 이용한 가상 클래스 생성에 대한 설명은 http://cafe.naver.com/dxgameprogramming/36 을 참조하길 바란다.
렌더러 생성은 다음과 같은 형태로 진행된다.
1) 렌더러 파라미터 검사
- 렌더러 파라미터는 현재 설치되어 있는 어댑터의 갯수 정보, 어댑터에 대한 정보, 지원 가능한 디스플레이 모드 등을 알아낸다.
// NiDX9SystemDesc 포인터 형태의 시스템 정보를 얻어온다.
const NiDX9SystemDesc *pkInfo = NiDX9Renderer::GetSystemDesc();
// 현재 시스템에 설치되어 있는 어댑터(그래픽 카드)의 갯수를 얻어온다.
unsigned int nAdapters = pkInfo->GetAdapterCount();
// 첫번째 어댑터에 대한 NiDX9AdaperDesc 포인터 형태의 정보를 얻어온다.
const NiDX9AdapterDesc *pkAdapter = pkInfo->GetAdapter(0);
// HAL 타입의 디바이스 정보를 얻어온다.
const NiDX9DeviceDesc *pkDevice = pkAdapter->GetDevice(D3DDEVTYPE_HAL);
// 디바이스의 기능을 얻어온다.
const D3DCAPS9& kD3dCaps9 = pkDevice->GetCaps();
// 가장 가까운 프레임 버퍼 포맷을 얻어온다. 여기서는 윈도우 모드에 32비트 컬러뎁스로 설정하였다.
nFrameBufferFormat = pkDevice->GetNearestFrameBufferFormat( true, 32 );
// 가장 가까운 뎁스-스텐실 버퍼 포맷을 얻어온다. 여기서는 24비트 뎁스버퍼에 8비트 스텐실 버퍼를 설정하였다.
nDepthBufferFormat = pkDevice->GetNearestDepthStencilFormat(nFrameBufferFormat, nFrameBufferFormat, 24, 8);
2) 렌더러 생성
- 렌더러 생성 방법은 간단한 방법부터 복잡한 방법까지 존재하지만, 가능한 많은 옵션을 설정해주는 것이 좋다. 그렇지 않으면 게임브리오가 알아서 설정해주는데, 원치 않는 옵션이 설정될 수 있다. 여기서는 640x480 해상도로 설정하였다.일반적으로 게임은 풀스크린 모드로 동작하므로 그에 맞게 설정해주어야 하는 것이 있는데, 그것은 디스플레이 리프레쉬 레이트 설정을 해주어야 한다.
spRenderer = NiDX9Renderer::Create( 640, 480,
(NiDX9Renderer::FlagType)0, // Flag Types
hWnd, // Window Device
hWnd, // Window Focus
D3DADAPTER_DEFAULT, // Default adapter use
NiDX9Renderer::DEVDESC_PURE, // Use Hardware only
nFrameBufferFormat, // frame buffer
nDepthBufferFormat, // Depth-Stencil buffer
NiDX9Renderer::PRESENT_INTERVAL_ONE, // Swap Rate
NiDX9Renderer::SWAPEFFECT_DISCARD, // fastest method
NiDX9Renderer::FBMODE_DEFAULT, // frame buffer mode
1, // back buffer count
0 // monitor reflesh rate
);
728x90
'Game Engine > Gamebryo' 카테고리의 다른 글
트리구조 (0) | 2011.09.24 |
---|---|
트리구조 (0) | 2011.09.23 |
스마트포인터 (0) | 2011.09.19 |
게임브리오 시작하기 (0) | 2011.09.17 |
Gamebryo 엔진 (1) | 2011.09.16 |
댓글