我想做个游戏。我使用directx 9这样做,我有一些问题,试图进入全屏模式。我做了一个函数,使现在的所有参数无效。一切都很好,除非我把加窗=假(我把全屏设置为真)。
下面是我现在的参数变量:D3DPRESENT_PARAMETERS d3dpp;
下面是d3dpp变量的代码。大部分(如果不是全部)代码来自查尔斯凯利( charles )的一本名为“编程2d游戏”(Programing2dGames)的书。
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不适合我。如果你需要更多的上下文,请问我。
发布于 2017-03-26 03:18:33
从评论中可以看出,您正在使用600x480。这是否是您系统上支持的解决方案,这是非常值得怀疑的,更有可能的是,您打算使用640x480。据我所知,基本上每个D3D9驱动程序都支持这个决议。
但是,硬编码分辨率并不是一个健壮的解决方案,更实际的做法是遵循文档 for D3DPRESENT_PARAMETERS中的建议,并使用EnumAdapterModes函数来获得设备的有效分辨率和显示格式的列表。
https://stackoverflow.com/questions/42964103
复制相似问题