본문 바로가기
Game Engine/Gamebryo

렌더러 생성

by 작은별하나 2011. 9. 19.
반응형

게임브리오에서는 여러가지 렌더러(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
  );

 

 

'Game Engine > Gamebryo' 카테고리의 다른 글

트리구조  (0) 2011.09.24
트리구조  (0) 2011.09.23
스마트포인터  (0) 2011.09.19
게임브리오 시작하기  (0) 2011.09.17
Gamebryo 엔진  (1) 2011.09.16

댓글