반응형
연구실에서 이것저것 논문을 뒤적거리다보면
셰이더 모델 4.0을 쓰는 DX10 을 주로 쓰는 연구들이 많다.

반면 MS가 밀고있는 XNA라는 플랫폼을 보면 뭐 게임개발이 상당히 쉬울꺼같다.

본인께서는 이 두가지를 놓고 상당히 많이 고민을 했었는데
DirectX 10에 손을 들어주고 말았다.

XNA를 실제로 좀 써본결과 코딩이 상당히 손쉬웠다.
DirectX에서 보던 지저분한 의미도 모르고 썼던 내용들이 간단하게 압축이 되었고
C#의 특성상 . 만 찍으면 주르르르륵 모든게 다 나오는 아주 편한 인터페이스덕에
매우 흡족한 코딩을 할 수 있었다.

DirectX10은 쉐이더 4.0을 쓰는만큼 기능도 더 강력하고 XNA에서 꿈도꾸지못할
퍼포먼스를 보여주기도 한다. geometry shader라는 것도 생기고 했기때문에
좋은 알고리즘만 있다면 같은 프레임에서 더 좋은 퍼포먼스를 보여줄 수 있다.

본인도 열심히 고민을 했다.
C#에서 directX 9.0을 썼을때 XNA와 비슷한 느낌을 받긴했었다.
하지만 XNA의 편리함과 단순함에는 박수를 쳐주고 싶었다.

더 나은 퍼포먼스를 위해 또 연구를 위해 DX10을 택하긴 했지만...

사실 게임이라는것이 요즘들어 그래픽만을 너무 강조하기 시작하였다.
알고보면 게임에서 중요한건 창의성. 그리고 재미라는 요소지 그래픽이 전부가 아닌데..

취미로 게임제작만을 목적으로 하는사람들에게 나는 과감히 XNA를 해보라고 권하겠다.
DirectX기반으로 게임들이 많이 개발되고.. 오픈소스들도 많이 돌아다니고..
오우거엔진등 엔진들도 많지만..

결국 자신이 직접 게임을 만들고싶다면 코딩하는 시간을 절약하고
좀더 재밌고 다양한 시도를 하길 바란다...

XNA의 보급으로 인한 동인게임팀들의 부활을 기대해본다...

어느새 좀 불씨가 죽은거 같아서 약간 실망스러운 어느 오후....
반응형
반응형

SwapChain에대해서 아직 좀 궁금한게 많아서 이리저리 뒤적거리다
우연히 발견한 내용...


---주의점 (퍼옴)---


1. 기본 device는 첫번째 체인이다.

ex)   pd3dDevice->GetSwapChain(0, &l_pSwpChain1);

2. 추가 창에 swapchain을 적용시킬 경우 체인을 추가시켜준다.

ex)
 ZeroMemory(&l_d3dpp, sizeof(D3DPRESENT_PARAMETERS) );
 D3DDISPLAYMODE mode;
 DXUTGetD3DObject()->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &mode);

 l_d3dpp.BackBufferWidth = 0;
 l_d3dpp.BackBufferHeight = 0;
 l_d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
 l_d3dpp.Windowed = TRUE;
 l_d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
 l_d3dpp.BackBufferFormat = mode.Format;
 l_d3dpp.hDeviceWindow = l_cDlgPicView.m_hWnd;
 l_d3dpp.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;

 pd3dDevice->CreateAdditionalSwapChain( &l_d3dpp, &l_pSwpChain2 );


3. 체인을 쓸 경우 기본 체인에도 꼭 백버퍼 설정을 해줘야 한다.

ex)
 LPDIRECT3DSURFACE9 pSurface = NULL;

 pd3dDevice->GetSwapChain(0, &l_pSwpChain1);
 l_pSwpChain1->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &pSurface);
 pd3dDevice->SetRenderTarget(0, pSurface);


4. 체인 렌더 시 BeginScene() 과 EndScene() 안에서 실행한다.
   그리고 한 체인의 렌더가 끝났으면 백버퍼를 릴리즈 시킨다.

ex)
    if( SUCCEEDED( pd3dDevice->BeginScene() ) )
    {
          ...
          pd3dDevice 를 이용하여 render
          ...

          pSurface->Release();
          pd3dDevice->EndScene();
    }


5. 뷰포트를 얻을 때, 마지막 설정된 디바이스 체인의 뷰포트를 가져온다.

6. SwapChain생성 시 D3DPRESENT_PARAMETERS::SwapEffect 항목으로
   그나마 최적화를 할 수 있다.

ex) D3DSWAPEFFECT_DISCARD, D3DSWAPEFFECT_COPY, D3DSWAPEFFECT_FLIP


7. 서로 전혀 상관되지 않는 무언가를 보여줄 시엔 device를 새로 생성하는 편이 낫다.

ex) 맥스의 분할화면 ( SwapChain ), 텍스쳐 미리보기 창 ( Device 새로 생성 )


8. 이 많은 주의사항을 알려주는 곳이 전무했다.  젠장!
   이라고 원본 글쓴분께서 말하셨다....

반응형
반응형
DX SDK 튜토리얼을 대충 보면.. 이상한 것이 생겼다.
(Tutorial 01: Direct3D 10 Basics  중...)

DXGI_SWAP_CHAIN_DESC sd;
    ZeroMemory( &sd, sizeof(sd) );
    sd.BufferCount = 1;
    sd.BufferDesc.Width = 640;
    sd.BufferDesc.Height = 480;
    sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    sd.BufferDesc.RefreshRate.Numerator = 60;
    sd.BufferDesc.RefreshRate.Denominator = 1;
    sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    sd.OutputWindow = g_hWnd;
    sd.SampleDesc.Count = 1;
    sd.SampleDesc.Quality = 0;
    sd.Windowed = TRUE;

    if( FAILED( D3D10CreateDeviceAndSwapChain( NULL, D3D10_DRIVER_TYPE_REFERENCE, NULL,
                     0, D3D10_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice ) ) )
    {
        return FALSE;
    }

음.. 스왑체인.. XNA에서도 비슷한걸 본 기억이 있어서 MDSN을 뒤져보니


D3D10CreateDeviceAndSwapChain(
    IDXGIAdapter *pAdapter,
    D3D10_DRIVER_TYPE DriverType,
    HMODULE Software,
    UINT Flags,
    UINT SDKVersion,
    DXGI_SWAP_CHAIN_DESC *pSwapChainDesc,
    IDXGISwapChain **ppSwapChain,
    ID3D10Device **pDevice
);

이렇게 되어있다... 음.. DX9때도 뭔가 복잡해서 그만뒀는데...
뭔가 이것도 복잡하지만 쉽게쉽게 파헤쳐보자..

뭐 그래픽어댑터는 NULL이 Default 값으로 쓰인다.
그래픽어댑터가 뜻하는건 그래픽카드를 말하는듯 싶다.

DriverType은 D3D10_DRIVER_TYPE_REFERENCE로 되어있는데 이것은
그래픽카드가 10을 지원하니 하드웨어를 사용하라.. 정도인거 같다.
다른값을 쓸 경우엔 소프트웨어로 돌릴수 있는듯한데 DX10이 쉐이더 4이상을 쓰려고
공부하는거니까.. 그냥 하드웨어로 하고 넘어가도록하자...
(사실 뒤지기가 귀찮다)

HMODULE Software는 코드의 핸들인데 뭐 그냥 그런게 있다고 알아두고 넘어가고

Flag는 디바이를 어떻게 사용할것인지에 대한것인데 그냥 디폴트인 0으로 놓고 쓰자
(자세한건 알아보기 귀찮아서...)

SDK버전은 이미 10으로 설치했으므로 D3D10_SDK_VERSION으로 하면된다.
이미 10.1을 라데온 그래픽카드에서 지원해 준다.
(그러나 10.1은 뭐 아직 10도 제대로 못하는데..-_-)

pSwapChainDesc은 그냥 새로 추가된 스왑체인에 관한 속성인듯하다.
ppSwapChain은 생성된 스왑체인의 속성을 받고
pDevice에선 디바이스의 속성을 받는듯 하다...


음.. 열심히 내용을 뒤지다보니...
어느 좋은 홈피를 찾았는데...


.....

연구실형의 홈페이지인듯하다...
이런..-_-

DX10에 관련된 좋은 내용들이 많으니...
(사실 위에꺼도 이리저리 뒤져보긴 했는데 거의 여기에 다 있어서...그냥 배꼈다)

젠장...

문제의 그 홈페이지 : http://duckii.egloos.com/
반응형

+ Recent posts