2011-01-23 2 views
1

이것은 안정적인 릴리스 코드가 아니므로 테스트 용으로 내 dev PC의 HWND에서 C++ 응용 프로그램으로 만든 창 D3D9 장치를 가져와야합니다. 옵션을로드합니다.Direct3D9 장치를 만드는 데 필요한 최소 코드

이전 D3D8 클래스에서 해킹하려고했지만 D3DERR_INVALIDCALL이 표시됩니다. 기본적으로

지금이 있습니다

HWND mHWnd = ...; 
    LPDIRECT3D9 mpD3D = Direct3DCreate9(D3D_SDK_VERSION); 

    D3DPRESENT_PARAMETERS md3dpp; 
    ZeroMemory(&md3dpp, sizeof(D3DPRESENT_PARAMETERS)); 
    md3dpp.Windowed     = true; 
    md3dpp.SwapEffect    = D3DSWAPEFFECT_DISCARD; 
    md3dpp.BackBufferCount   = 1; 
    md3dpp.EnableAutoDepthStencil = 0; 
    md3dpp.hDeviceWindow   = mHWnd; 
    md3dpp.BackBufferWidth   = 0; 
    md3dpp.BackBufferHeight   = 0; 
    md3dpp.FullScreen_RefreshRateInHz = 0; 
    md3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; 
    md3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; 
    md3dpp.MultiSampleType = D3DMULTISAMPLE_NONE; 
    md3dpp.MultiSampleQuality = 0; 

    LPDIRECT3DDEVICE9 mpD3DDevice=0; 
    HRESULT hr = mpD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,mHWnd,0,&md3dpp,&mpD3DDevice); 

D3DPRESENT_PARAMETERS 옵션을 비난 할 수 있습니다 그림 - 내가 Z-버퍼 또는 스텐실 또는 AA의 약 백 버퍼를 걱정하지 않는다, 오래된 일반 장치입니다 벌금.

일부 호환되지 않는 플래그를 복사하여 붙여 넣었습니까?

답변

1

1 문제는 일부 동작 플래그를 설정해야한다는 점입니다. 워드 프로세서

CreateDevice.에 :

BehaviorFlags
DWORD [IN] 생성 장치를 제어 하나 이상의 옵션
조합. 자세한 내용은 D3DCREATE를 참조하십시오.

그리고 D3DCREATE 문서에서

:

D3DCREATE_HARDWARE_VERTEXPROCESSING, D3DCREATE_MIXED_VERTEXPROCESSING 및 D3DCREATE_SOFTWARE_VERTEXPROCESSING는 상호 배타적 인 플래그입니다. CreateDevice를 호출 할 때 적어도 하나의의 버텍스 처리 플래그를 지정해야합니다.

시도 :

HRESULT hr = mpD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,mHWnd,D3DCREATE_MIXED_VERTEXPROCESSING,&md3dpp,&mpD3DDevice); 
+0

도현! 그게 뇌가없는 코드 붙여 넣기에서 오는 것입니다. 그것은 예상대로 작동합니다. –

+0

@ 존 : Hehehe, 쉽게 놓칠 수 :) – Goz