Microsoft DxDiag может определить, имеет ли система «ускорение Direct3D».
Если система не поддерживает эту функцию, DxDiag напишет «Ускорение Direct3D недоступно» и напишет в консоли «Функциональность Direct3D недоступна. Убедитесь, что драйвер является окончательной версией от производителя оборудования».
Я хотел бы того же с функцией C ++.
Я сделал несколько тестов, и следующая функция, похоже, справилась с этой задачей.
Есть еще идеи получше?
Спасибо.
Alessandro
#include <ddraw.h>
#include <atlbase.h>
bool has3D()
{
CComPtr< IDirectDraw > dd;
HRESULT hr = ::DirectDrawCreate( 0, &dd, 0 );
if ( hr != DD_OK ) return false;
DDCAPS hel_caps, hw_caps;
::ZeroMemory( &hel_caps, sizeof( DDCAPS ) );
::ZeroMemory( &hw_caps, sizeof( DDCAPS ) );
hw_caps.dwSize = sizeof( DDCAPS );
hel_caps.dwSize = sizeof( DDCAPS );
hr = dd->GetCaps( &hw_caps, &hel_caps );
if ( hr != DD_OK ) return false;
return (hw_caps.dwCaps & DDCAPS_3D) && (hel_caps.dwCaps & DDCAPS_3D);
}