Windows 8 все еще поддерживает DirectX 9?

9

Windows 8 поддерживает DirectX 9? Потому что я просматривал некоторые примеры, написанные на C ++ и DirectX 9, сделанные для Windows 8. Это было не так, как я знаю (смотрите здесь http://directxtutorial.com/Lesson.aspx?lessonid=111-4-2 ). Например, инициализация DirectX с помощью COM:

ComPtr<ID3D11Device1> dev;
ComPtr<ID3D11DeviceContext1> devcon;

Это просто странно, потому что я знаю это по-старому:

ID3D11Device *dev;                  
ID3D11DeviceContext *devcon;  

(Надеюсь, вы понимаете, что я хочу сказать)

Я надеюсь, что это не изменилось полностью из-за выпущенной новой ОС.

LaVolpe
источник
1
Мне было бы очень трудно представить, что Microsoft внезапно откажется от поддержки более 90% всех игр на платформе Windows. Я также нахожу, что еще труднее поверить, что люди не будут в ярости от такого шага к настоящему времени.
Яри ​​Комппа
Тем не менее, возможно, что последние SDK не включают заголовочные файлы / библиотеки dx9; Я не проверял. Это не значит, что вы не могли просто использовать dx9 SDK, как раньше. Если, конечно, последняя визуальная студия как-то запрещает вам это делать, но это было бы глупо.
Яри ​​Комппа
Что ж, я тоже не могу в это поверить, но я думаю, что это возможно, потому что, чтобы получить «Windows 8», у ПК есть сенсорный экран, и вы когда-нибудь видели игру, написанную на DirectX, которая поддерживает игры с сенсорным экраном?
LaVolpe
Я уверен, что вы не сможете создавать приложения с современным интерфейсом с помощью dx9.
Яри ​​Комппа
1
Объекты D3D всегда были объектами COM - не используя необработанные указатели, но вместо этого всегда было возможно поместить их в интеллектуальный указатель COM.

Ответы:

12

Да , Windows 8 поддерживает DirectX 9.

Для разработки старый DirectX SDK теперь устарел , но у вас будут все необходимые библиотеки и заголовки в новом Windows 8 SDK, который входит в состав Visual Studio 2012. Вы можете пойти по «старому пути» без проблем , Если вам нужна PIX для некоторой отладки или высокоуровневая библиотека D3DX, вам придется снова установить старый DXSDK, поскольку этого нет в Windows 8 SDK.

Однако это действительно только для простых старых настольных приложений. Что касается приложений в стиле Metro, я позволю Чаку Уолбурну из Microsoft сказать :

Direct3D9 и Direct3D9Ex не поддерживаются для приложений в стиле Metro. Использование DirectX SDK с приложениями в стиле Metro не рекомендуется и не поддерживается. См. Http://msdn.microsoft.com/en-us/library/ee663275.aspx .

Существует ряд ресурсов, которые помогут вам перенести кодовую базу Direct3D 9 на Direct3D 11. Большая часть материала по переносу с Direct3D 9 на Direct3D 10.x полностью применима здесь, поскольку API Direct3D 11 очень похож на Direct3D 10.

См. Http://blogs.msdn.com/b/chuckw/archive/2011/07/11/getting-started-with-direct3d-11.aspx . Обязательно ознакомьтесь с презентацией Windows to Reality: получение максимальной отдачи от графики Direct3D 10 в ваших играх, поскольку она охватывает многочисленные подводные камни и проблемы с производительностью, с которыми сталкивались разработчики в прошлом, и обновлением технологии DirectX 11 для краткого изложения различий между Direct3D 10 .x и Direct3D 11.

В MSDN также есть руководство по портированию http://msdn.microsoft.com/en-us/library/ff476190.aspx, которое указывает на http://msdn.microsoft.com/en-us/library/bb205073.aspx для перейти непосредственно от Direct3D 9 до Direct3D 11.

К сожалению, вы не можете использовать D3D9 напрямую для приложений в стиле Metro. Но вы можете использовать D3D11 и ограничить себя некоторым уровнем функций (например D3D_FEATURE_LEVEL_9_3), если вы хотите поддерживать устаревшее оборудование.

Лоран Кувиду
источник
Вау, спасибо за ваш ответ. Как я вижу, вы провели большое исследование
LaVolpe
Ну, не совсем, я просто работаю над этим прямо сейчас;)
Лоран Кувиду
1
AFAIK win8 SDK, поставляемый с VS 2012, больше не поставляет заголовки D3D11X * - только D3D11 *. Это оставляет вас без ряда служебных функций, таких как загрузка шейдеров из файла и компиляция их за один вызов функции.
Верно. Что Microsoft говорит по этому поводу: «Имейте в виду, что технологии замены для текущего использования D3DX11 включают DirectXTex и DirectXTK. D3DXMath заменяется DirectXMath». Пока не проверено.
Лоран Кувиду
3

Windows 8 имеет ту же базовую поддержку приложений Direct3D 9, что и в Windows 7 и Windows Vista. Direct3D 9 является устаревшим и, безусловно, существуют некоторые проблемы с совместимостью, которые могут повлиять на игры на основе Direct3D 9, но они более или менее функционируют так же, как и в Windows 7.

Разработка с Direct3D 9 в Windows 8 немного сложнее, чем в Windows 7. Стандартные заголовки Direct3D 9 являются частью Windows 8.0 SDK (входит в состав VS 2012), но не включают D3DX9. Среда отладки Direct3D 9 не поддерживается в Windows 8. Вы можете использовать устаревший DirectX SDK в Windows 8, но его установка и ограничения сопряжены с рядом проблем.

Для написания новых приложений в Windows 7 и Windows 8 рекомендуется использовать API-интерфейс Direct3D 11. Он работает как для настольных приложений Win32, так и для приложений Магазина Windows. Кроме того, рекомендуется использовать Windows 8.x SDK и не использовать DirectX SDK.

Посмотрите Игры для Windows и DirectX SDK для множества постов на эту тему.

Чак Уолборн
источник
Обратите внимание, что вы не «устанавливаете DirectX» на любую версию Windows, более новую, чем Windows XP с пакетом обновления 1. Пакет «DirectX End-User Runtime» будет установлен на Windows XP SP2, Windows Vista, Windows 7 и Windows 8.x, но он никогда не устанавливает "DirectX". Он просто развертывает некоторые вспомогательные библиотеки DLL, которые являются необязательными битами из уже унаследованного пакета DirectX SDK: XINPUT 1.3, XAudio 2.7, D3DX и т. Д. Direct3D, DirectInput, DirectSound и т. Д. Обновляются только как часть официальных пакетов обновления или выпусков Центра обновления Windows. ссылка
Чак Уолборн
2

DirectX будет установлен в Windows 8, Windows 7, Windows Vista или Windows XP.

Миколай Марциш
источник