这不是为了稳定的发布代码,我只需要从我的开发PC上的HWND中获得窗口的D3D9设备来测试某些内容...它可以默认选择选项的负载。

我试图从旧的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-Buffers或Scencer或AA的后退,任何旧的普通设备都可以。

我是否复制了一些不兼容的标志?

有帮助吗?

解决方案

1个问题是您需要设置一些行为标志。

从文档上 创建evice。:

行为表[In
dword
的组合 或者更多 控制设备创建的选项。有关更多信息,请参见D3DCreate。

并从 d3dcreate 文档:

d3dcreate_hardware_vertexprocessing,d3dcreate_mixed_vertexprocessing和d3dcreate_software_vertexprocessing是相互排斥的标志。 最后一个 在调用CreateVice时,必须指定这些顶点处理标志。

尝试:

HRESULT hr = mpD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,mHWnd,D3DCREATE_MIXED_VERTEXPROCESSING,&md3dpp,&mpD3DDevice);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top