2012-07-02 2 views
1

парень, который спрашивает странные вещи, здесь, опять-такиВключите Directx 9 и 10 в том же файле код

Я вижу, что они используют различные исполняемые файлы для игры, которая была создана как для DirectX 9 и 10. Это можно включить «d3d9.h» и «d3d10.h» в файл кода, затем выбрать direct3d 9 functions или direct3d 10 функций, в зависимости, например, от аргумента, который действует как флаг? Я не говорю о том, чтобы рисовать что-то, используя функцию direct3d 10, используя контекст и объект direct3d 9.

Что я хочу сделать, так это создать функцию под названием init3D(UINT version); В зависимости от version, она создаст объект и устройство directx 9 или directx 10. Я не знаю, возможно ли это, или я должен создать два разных исполняемых файла (или 3, если я также решит использовать d3d8)

Спасибо за вашу помощь и прошу простить мое непонимание с некоторыми методами C++.

ответ

1

Да, это вполне возможно.

Единственная проблема в том, что библиотеки для обоих должны существовать на целевой машине. Поскольку вы связались с d3d10, он должен быть установлен на компьютере для вашего .exe для равномерной загрузки, даже если вы хотите работать в режиме d3d9, и это не будет иметь место на машинах xp.

Чтобы избежать этого, вам понадобится динамическая компоновка для вызова любых функций, чтобы библиотеки загружались только во время выполнения. Посмотрите LoadLibrary и GetProcAddress. К счастью, с direct3d единственными глобальными функциями, которые вы, вероятно, будете вызывать, являются «создавать» функции. D3DX вызовет те же проблемы, но

+0

времени выполнения связывания не немного медленнее? – ali

+0

Не совсем, некоторые крошечные служебные вызовы вместо указателя функции вместо прямого. Альтернатива заключается в том, чтобы поместить ваш код d3d9 и d3d10 в отдельные DLL, а затем загружать только один из них во время выполнения. – jcoder

1

Вы понимаете, что DirectX 8 не поддерживается правильно? DirectX 10 включает DirectX 9, поэтому нет необходимости требовать и то, и другое.

Вы должны иметь возможность условно включать файлы заголовков на основе какой версии DirectX установлен.

Вот пример того, как сделать именно это, хотя его написано в C#:

How to code to get direct X version on my machine in C#?

Традиционный способ установить версию DirectX приложение использует при установке приложения. Любой другой способ следует считать взломом и неподдерживаемым в долгосрочной перспективе.

+0

Я создам две версии исполняемого файла, одну для тех систем, которые не поддерживают directx 10, а другую для тех, кто поддерживает DirectX 9 и 10. – ali

+0

Включает ли DirectX 10 DirectX 9? Итак, если я создам приложение с d3d10.lib/d3d10.h, я смогу запустить его на Windows 7, например, с помощью DirectX9.0c? – ali

1

Еще один комментарий. На какой платформе вы хотите запустить эту программу?

Windows Vista и новее будут работать directx11 и directx11 будет работать на аппаратном уровне DirectX9 (очевидно, без новых функций, таких как tessalation shaders).

Если вам не нужно поддерживать XP (и это действительно становится очень стар ...), то забудет и DX9 и DX10 и просто использовать DirectX11

Смежные вопросы