DirectX 呈现参数窗口=假不起作用

DirectX Present Parameters Windowed=false not working

本文关键字:不起作用 窗口 参数 DirectX      更新时间:2023-10-16

我正在尝试制作一个游戏。 我正在使用 directx 9 来执行此操作,并且在尝试进入全屏模式时遇到一些问题。 我做了一个函数来启动所有当前参数。 一切都很好,除了当我使窗口=假(即我将全屏设置为true(时。

这是我目前的参数变量:D3DPRESENT_PARAMETERS d3dpp;

下面是 d3dpp 变量的代码。 大多数(如果不是全部(这些代码来自查尔斯·凯利(Charles Kelley(的一本名为《Programming 2d Games》的书。

void Graphics::initD3Dpp()
{
try {
    ZeroMemory(&d3dpp, sizeof(d3dpp));              
    d3dpp.BackBufferWidth = width;
    d3dpp.BackBufferHeight = height;
    if (fullscreen)                                  
        d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;  
    else
        d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;   
    d3dpp.BackBufferCount = 1;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.hDeviceWindow = mainhwnd;
    d3dpp.Windowed = (!fullscreen); //THIS LINE RIGHT HERE IS THE ISSUE
    d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
}
catch (...)
{
    throw(GameError(gameErrorNS::FATAL_ERROR,
        "Error initializing D3D presentation parameters"));
}
} 

我不明白为什么 .windowed 对我不起作用。 请问我是否需要更多背景信息。

从评论中,您建议使用的是 600x480。这是否是您系统上支持的分辨率是非常值得怀疑的,更有可能的是,您打算使用 640x480。据我所知,基本上每个D3D9驱动程序都支持此分辨率。

但是,对分辨率进行硬编码不是一个可靠的解决方案,遵循D3DPRESENT_PARAMETERS文档中所述的建议并使用EnumAdapterModes函数获取设备的有效分辨率和显示格式的列表更为实用。