Получение программного заглавия устройства для DirectX 6.1 (DDraw4) - PullRequest
0 голосов
/ 25 декабря 2009

Я пишу перехватчики Windows32 вокруг библиотеки DirectX 6.1 в DirectX 9.0c; Идея состоит в том, чтобы заменить все вызовы на 3D-устройство DX 6.1 вызовами Direct 9.0c и внедрить некоторый пользовательский код, поэтому старая игра, которую я патчу (99-летний), сможет использовать шейдеры, пост-эффекты и т. Д. *

Старое 3D-устройство DX 6.1 было создано путем создания модуля DDraw. Игра тогда перечисляет заглавные буквы устройства. В моем модуле весь модуль DDraw пропущен, и трехмерный вид инициализирован. Так что у меня есть проблема, так как я не могу дать игрокам заглавные буквы Ddraw4, которые ему требуются, поскольку у меня вообще нет устройства DDraw!

Поэтому мой вопрос заключается в том, как получить заглавные буквы устройства DDraw4 без инициализации устройства DDraw4. Возможно, этого будет достаточно, чтобы создать фиксированный список и передать его в игру, но я понятия не имею, что должно быть в этом списке (я дал то, что, как я думал, должно быть, и игра вышла - регистратор показал, что это было сразу после закрытия устройства проверено)

Ответы [ 2 ]

3 голосов
/ 16 июля 2010

Я никогда не пробовал этого, но вы можете попробовать следующее. Предполагая, что у вас нет 6.1 SDK, вы можете сделать структуру DDCAPS (DirectDraw) самостоятельно (в основном это просто DWORD), а затем получить возможности ( D3DCAPS9 ), используя Функция DX9 GetDeviceCaps . Затем возьмите нужные вам значения из полученных заглавных букв (используя DX9) и установите эквивалентные значения для DirectDraw в вашей структуре DDCAPS. Затем вы можете добавить эту структуру заполненных заглавных букв в игру. Несколько предостережений - как вы упомянули, вы не знаете, что конкретно для этого нужно, поэтому это своего рода хит и промах (если у вас нет исходного кода). Кроме того, может не быть отображения 1: 1 для значений структуры caps (между DX9 и DDraw). Наконец - это связано с отсутствием 6.1 SDK - если вы не знаете значений флага, вы можете установить флаг неправильно при установке значений в соответствии с полученными заглавными буквами. Как я уже говорил, это может быть далеко (или потребовать много детективной работы), но я подумал, что это может быть что-то, что вы можете попробовать.

0 голосов
/ 11 февраля 2011

Решение было немного грубым, но самое главное - работает без нареканий.

Я написал небольшую автономную утилиту, которая инициализирует DDraw 6.1, затем получает заглавные буквы устройства, затем записывает их в файл на диске (заглавные буквы устройства имеют структуру в формате Plain Old C, поэтому сохранить ее очень просто) и завершает работу , Затем я могу прочитать файл caps устройства с диска и вернуть его, когда приложение спросит меня об этом.

...