-
Реально ли сделать сабж без изменений самих алгоритмов отрисовки? Т.е. пользуясь только хуками DirectX и сменой параметров каких-нибудь DirectX вызовов. При этом некоторое замедление скорости не страшно. (конкретно, игра - Heroes 3)
-
Игра скорее всего использует DirectShow. DirectShow обеспечивает прямой доступ к буфферу вывода. Соответственно все картинки должны иметь такой же формат, как и буффер вывода. Соответственно если ты хуком добьешся, что буффер станет 32 битным, то попытка записать туда 16 битный спрайт обернется кашей в буффере.
-
DirectDraw она использует, DirectShow это видео. С 90% вероятностью у "заточенной" под 16 бит игры все исходные картинки тоже 16-битные, заранее урезанные до 65536 цветов (меньше объём, можно урезать более аккуратно, чтобы потери качества не бросались в глаза). Т.е. переводить на 32 бита нет смысла, качество не улучшится.
-
> DirectDraw она использует, DirectShow это видео.
да да. Именно это и имел ввиду. :))
-
Единственное, для чего это нужно - чтобы запускать игру в окне при 32 битах в настройках системы, т.к. сейчас она требует 16.
-
Попробуй выставить качество буффера в 32 цвета... вдруг получится. :)
-
Можно создать 16-битный бэкбуфер в 32-битном режиме, но в системной памяти (т.е. фактически отключить аппаратное ускорение - но это не страшно, учитывая мощности современных CPU). Также и все прочие поверхности (кроме первички, ест-но) должны создаваться в сист. памяти. Т.е. хук на CreateSurface, на SetCooperativeLevel (чтобы переключить на оконный режим), на Flip с заменой его на Blt бэкбуфера в первичку.
А в чём проблема-то? Некорреткое масштабирование 800*600 на широкоэкранный монитор? Возможно, проще решить её обновлением драйверов или какой-нибудь утилитой.
|