Насколько сложно было бы портировать приложение directx 7 для запуска в Windows 7?

StackOverflow https://stackoverflow.com/questions/1522039

  •  19-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top