【问题标题】:Direct3D 9Ex - Creating a Full Screen DeviceDirect3D 9Ex - 创建全屏设备
【发布时间】:2015-12-18 01:25:40
【问题描述】:

我在整个互联网上都找了这个,但一无所获。

我知道 Direct3D 9Ex 在 Alt-Tabbing 退出程序后可以工作,取消 Direct3D 9(它只是崩溃)。出于这个原因,我正在尝试使用 Direct3D 9Ex。我想让程序全屏显示。但是,每当我对设备 (IDirect3DDevice9Ex*) 执行任何操作时,都会遇到读取内存位置 0x00000000 的访问冲突。这是我的代码:

Direct3DCreate9Ex(D3D_SDK_VERSION, &pD3D);
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.BackBufferCount = 1;
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
d3dpp.BackBufferHeight = iHeight;
d3dpp.BackBufferWidth = iWidth;
d3dpp.hDeviceWindow = hWnd;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.Windowed = false;
D3DDISPLAYMODEEX dm;
dm.Format = D3DFMT_X8R8G8B8;
dm.Height = iHeight;
dm.Size = sizeof(dm);
dm.RefreshRate = 60;
dm.ScanLineOrdering = D3DSCANLINEORDERING_PROGRESSIVE;
dm.Width = iWidth;
pD3D->CreateDeviceEx(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &dm, &pD3DDevice);

任何帮助将不胜感激。

【问题讨论】:

  • 你没有检查 pD3D 不为空。第一行的调用可能会失败。
  • 考虑到对 CreateDeviceEx 的调用不会引发访问冲突,它不能为空。
  • 另外,我检查了一下,没有失败。
  • @bojoradarial:作为旁注和 AFAIK,D3D9 不仅仅在 Alt+Tabbing 后崩溃。您只需要正确处理“设备丢失”事件和您的资源。
  • 您说您遇到了访问冲突。不清楚这是否不在 CreateDeviceEx Line 上。 :)

标签: c++ fullscreen directx-9


【解决方案1】:

d3dpp.FullScreen_RefreshRateInHz (0)dm.RefreshRate (60) 不同。 它们都应该设置为相同的速率,请尝试D3DPRESENT_RATE_DEFAULT

应使用SUCCEEDEDFAILED 宏检查从CreateDeviceEx 调用返回的HRESULT

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    相关资源
    最近更新 更多