Насколько сложно было бы портировать приложение DirectX 7 для запуска на Windows 7? - PullRequest
0 голосов
/ 05 октября 2009

У нас была игра-аркада / выкуп, работающая на Win98, но оборудование, которое может ее запустить, наконец-то устарело. В игре использовалось несколько масштабирующих эффектов, некоторые из которых проходили через 3D-путь, и играли в некоторые трюки, перемещая объекты в видеопамять и из нее. Если бы я попытался перенести его на Windows 7, сколько бы это могло быть проблем? Будет ли это в основном перекомпиляцией или API подвергнутся такому преобразованию, что я мог бы также переписать интерфейсы устройства?

Ответы [ 3 ]

0 голосов
/ 06 октября 2009

Вы когда-либо перемещали вещи в видеопамять и из нее? Дрожь

Тем не менее ... сейчас это сделать быстрее, чем когда появился DX7. Что именно ты делал? По твоему описанию невозможно сказать, насколько легко это будет. Приложение DX7 должно по-прежнему работать в Windows 7, я не могу вспомнить, какие странные функции вы могли использовать, что могло бы его сломать.

Также преобразование приложения в DX9 из 7 не так уж сложно (преобразование в DX10 + было бы кошмаром). Они все еще относительно похожи ... главное, что изменилось с тех пор, это сокращение таких вещей, как D3DTRANSFORMSTAGESTATE_ * или D3DRENDERSTATE_ * до D3DTSS_ * или D3DRS _ *.

Edit: Самое большое изменение, которое я могу вспомнить, произошло с DX7, это то, что производители видеокарт прекратили поддержку палитрированных текстур, которые "могли" сломать некоторые старые приложения на современных машинах. Это действительно очень простое решение, хотя ...

Edit2: распаковка данных с диска в текстуру может быть немного болезненной. Ваша главная проблема заключается в том, что вы теряете производительность при создании текстуры. Однако, если у вас уже есть загруженные и открытые текстуры, вы можете загрузить соответствующую текстуру в любое время. Вы страдаете только от удара блокировки / разблокировки. Это можно уменьшить, загрузив ресурс за несколько кадров заранее. Однако, если вы сделаете это, это, без сомнения, потребует многопоточности и вызова D3D из нескольких потоков. Если вы сделаете это, установите многопоточный флаг на устройстве.

0 голосов
/ 06 октября 2009

Не думайте, что это портирование на Win7. Просто подключитесь к DX9 и позвольте DX работать с частями Win7. Фактически, вы, вероятно, могли бы просто оставить все как есть, и он будет запущен - но вы упомянули, что вы делаете сумасшедшие вещи с видеопамятью, которая, я полагаю, не имеет ничего общего с DX. (т.е. либо через GDI или какой-то другой взлом?). В любом случае, API-интерфейсы DX7, 8 и 9 имеют довольно существенные различия. Но хорошо, что все они обратно совместимы. Если у вас чистый код dx7, попробуйте скомпилировать его с последним SDK и посмотрите, работает ли он на win7.

0 голосов
/ 06 октября 2009

Прошло много времени с тех пор, как я написал какой-либо код DirectX7 (или вообще код Direct X), но если я вспомню, что между 7 и 8 произошли некоторые значительные изменения API - пусть и 9 или 10 - это сделало бы такое изменить немного сложнее. В частности, я думаю, что главное изменение заключалось в том, что после 7-го они реорганизовали систему, чтобы объединить DirectDraw с Direct3D, чтобы две системы больше не были полностью разделены между 7 и 8. С тех пор я не смотрел на это, но подозреваю, что с учетом количество новых методов кодирования и тому подобное, API претерпел значительные изменения, так что, вероятно, это будет небольшая часть проекта для внесения этих изменений, а не в основном перекомпиляция, как вы, возможно, надеялись.

...