У меня есть приложение DX11, к которому я хотел бы добавить поддержку для рендеринга программного обеспечения. Это связано с тем, что в некоторых случаях он будет работать на машинах без графических процессоров. Из исследования, которое я сделал, кажется, что мой лучший выбор - WARP.Программно определить, нужно ли мне использовать аппаратный растеризатор
Это было удивительно просто изменить приложение, чтобы использовать WARP:
hr = D3D11CreateDevice(
NULL,
D3D_DRIVER_TYPE_WARP, // was D3D_DRIVER_TYPE_HARDWARE
NULL,
creationFlag,
featureLevels,
ARRAYSIZE(featureLevels),
D3D11_SDK_VERSION,
&mDevice,
&mFeatureLevel,
&mDeviceContext
);
Он работает хорошо. Где я боюсь, определяется, когда устанавливать DriverType в WARP вместо аппаратного обеспечения. Есть ли функция, которую я могу вызвать, которая скажет мне, есть ли в системе аппаратная поддержка?
Я использую функциональный уровень DX 11 9_1.
Могу ли я спросить, почему я должен проверять контекст и hresult? –
Я не знаю, есть ли какая-либо возможность, когда только один или только два из 'HRESULT',' device' и 'context' терпят неудачу, но я считаю, что всегда рекомендуется проверять * Все * постусловий в конец. Кроме того, он не указывается в документах, если не удалось «устройство» всегда равно null или нет. Кроме того, проверьте все три каждой итерации, просто проще написать ([принцип KISS] (http://en.wikipedia.org/wiki/KISS_principle)). При инициализации дополнительные операции сравнения не будут выполнять потери производительности (по сравнению с производительностью самого D3D11CreateDevice()), поэтому «лучше безопасно, чем извините». – Drop