gpt4 book ai didi

c++ - 如何选择 DirectX 像素格式?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:30 28 4
gpt4 key购买 nike

我对后台缓冲区的像素格式的概念略有了解。但是,使用未知格式和指定格式有什么区别:

(在 DirectX 11 中)DXGI_FORMAT_UNKNOWN对比DXGI_FORMAT_R8G8B8A8_UNORM

(在 DirectX 9 中)D3DFMT_未知对比D3DFMT_X8R8G8B8

未知格式是否允许图形适配器选择最合适的格式之类的?

谢谢!

编辑:

我已经在 DirectX 9 中尝试了未知格式并且它有效:

D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof( d3dpp ) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.BackBufferCount = 1;
d3dpp.BackBufferHeight = 480;
d3dpp.BackBufferWidth = 640;
d3dpp.hDeviceWindow = mHWnd;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
d3dpp.EnableAutoDepthStencil = TRUE;

我在 DirectX 11 中尝试了未知格式,但它不起作用:

DXGI_SWAP_CHAIN_DESC sd;
sd.BufferDesc.Width = 640;
sd.BufferDesc.Height = 480;
sd.BufferDesc.RefreshRate.Numerator = 60;
sd.BufferDesc.RefreshRate.Denominator = 1;
sd.BufferDesc.Format = DXGI_FORMAT_UNKNOWN;
sd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
sd.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
sd.SampleDesc.Count = 1;
sd.SampleDesc.Quality = 0;
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
sd.BufferCount = 1;
sd.OutputWindow = mhMainWnd;
sd.Windowed = true;
sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
sd.Flags = 0;

最佳答案

您正在窗口模式下运行。来自 DirectX9 文档:

In fact, D3DFMT_UNKNOWN can be specified for the BackBufferFormat while in windowed mode. This tells the runtime to use the current display-mode format and eliminates the need to call GetDisplayMode.

因此,D3DFMT_UNKNOWN 仅表示“使用当前显示设置”。 DirectX 11 似乎不支持这一点,而且关于那里的模式(以及你应该如何创建交换链)的文档有点复杂。我认为您可以在 DirectX11 中选择您的 BackBufferFormat,而不管实际显示格式如何,并且转换会自动发生。我想现在大概 99% 的显示器都设置为 X8R8G8B8 格式。

关于c++ - 如何选择 DirectX 像素格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21373875/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com