2015-08-28 5 views
0

Вопрос не был сформулирован правильно, потому что это немного сложно сделать в 1 предложении, поэтому реальный вопрос: Функция, которая создает объект, представляющий устройство в Direct3D9, выглядит следующим образом.В чем разница между REF и HAL?

HRESULT IDirect3D9::CreateDevice(
    UINT Adapter, 
    D3DDEVTYPE DeviceType, 
    HWND hFocusWindow, 
    DWORD BehaviorFlags, 
    D3DPRESENT_PARAMETERS *pPresentationParameters, 
    IDirect3DDevice9** ppReturnedDeviceInterface 
    ); 

Adapter UINT аргумент относится к конкретной видеокарты, используемой на целевом компьютере, но DeviceType аргумент относится либо HAL или REF. Итак, в чем смысл указывать определенную видеокарту (например, 0) и REF тип устройства? Не является ли REF абстрактным экземпляром, который эмулируется процессором и не имеет никакого отношения к видеокарте?

ответ

0

В принципе, вы правы. Справочные устройства реализуют большинство функций DirectX в программном обеспечении и не полагаются на графический драйвер. В свою очередь, они довольно медленные и должны использоваться только для тестирования. Существует две причины, по которым вам понадобится эталонное устройство:

Если ваша видеокарта не поддерживает функции DirectX, которые вы хотите использовать, вы можете использовать эталонное устройство, потому что оно будет поддерживать каждую функцию. Тем не менее, это имеет смысл только во время разработки (если вы временно находитесь на машине низкого класса).

Если вы получаете странные результаты, это может быть проблема с драйвером. Чтобы это исключить, вы можете проверить с помощью эталонного устройства. Если это дает вам те же результаты, проблема находится где-то в вашем коде. Если он дает вам правильные результаты, графический драйвер неисправен.

+0

Обратите внимание, что на современных платформах Windows использование [WARP] (https://msdn.microsoft.com/en-us/library/windows/desktop/gg615082.aspx), а не REF намного быстрее для отладки драйверов. –