Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Вниз

вывод "поверх" игры   Найти похожие ветки 

 
Luka.rus   (2006-04-19 15:57) [0]

в общем, всегда интерисовался, как можно вывести графику поверх уже запущенной игры, как это делает, например, fraps. да и многие другие программы.

если есть примеры, поделитесь. нет, тогда давайте обсудим, может сможем реализовать это.

также меня смущает то, то тот же Фрапс выводит поверх практически любой игры, независимо OpenGL или Direct3D..


 
Pa5ha   (2006-04-19 17:15) [1]

Возможно он использует оверлей. Он ведь один :) Если занят, то выводит на оверлей. Чиста гипотеза.


 
Luka.rus   (2006-04-19 17:30) [2]

врядли. если создать много окон, то он будет писать в каждое из них отдельно :( как же они это делают..


 
Старик   (2006-04-19 18:05) [3]

берем GetDC нужного окна и рисуем на нем квадратики.
способ примитивен. единственное, что стоит обдумать, это как сделать, чтобы наше рисование было поверх игрового.


 
Luka.rus   (2006-04-19 18:12) [4]

дело в том, что игровое окно обновляется очень быстро, у меня в некоторых играх ФПС больше 1000. нам надо рисовать с частотой в несколько раз превышающей ФПС, и даже так скорее всего будет мерцание..


 
Luka.rus   (2006-04-19 18:20) [5]

вот этот код дает мерцание. даже если ФПС 60, в Варкрафте3:

 stop:= false;
 bmp:= TBitmap.Create;
 whd:= FindWindow("Warcraft III", nil);
 bmp.Canvas.Handle:= GetDC(whd);
 while not stop do begin
   bmp.Canvas.Draw(100,100, Image1.Picture.Graphic);
   Application.ProcessMessages;
 end;


теоретически он довольно часто должен рисовать :(


 
XProger ©   (2006-04-19 18:51) [6]

Перехватываем SwapBuffers...


 
XProger ©   (2006-04-19 19:04) [7]

http://www.yandex.ru/yandsearch?serverurl=gamedev.ru&text=Fraps


 
Sapersky   (2006-04-19 19:15) [8]

...или в случае D3D - Present/EndScene.

Теория внедрения/перехвата - см. книгу Рихтера, в электронном виде должна быть здесь: http://rouse.front.ru/
Или статьи на wasm.ru:
http://www.wasm.ru/article.php?article=apihook_1

Библиотека madCodeHook:
http://www.madshi.net
Есть пример включения wireframe в D3D играх.


 
Cash ©   (2006-04-19 19:39) [9]

С опеновскими штуками - согласен с XProger-ом, токма шприц и иньекцию
придется делать.

А для D3D есть в SDK длл-ка, называется d3dspy@.dll (где @-версия SDK),
ее можно подключть к себе и пользовать полномоштабный перехват
интерфейсов.
Дожидаемся когда срабатывает EndScene у девайса и рендерим все, что
душе только заблагорассудится.


 
Pa5ha   (2006-04-19 20:46) [10]

А windows media player на D3D или на OpenGL написан? :) Там ведь тоже фпс выводится и картинки с оверлея пизяца. Правда, в WinDVD некорректно.


 
Fosgen   (2006-04-19 21:30) [11]

Это конечно вопрос: "а WINDOWS media player на чем писан?" А что, кто-то допускает мысль о windows писанной на OpenGL? Это что-то из разряда: "А машины у сотрудников в Microsoft на чем работают - на Windows или Linux?"


 
Luka.rus   (2006-04-20 00:30) [12]

windows media player, насколько мне известно не использует ни ОГЛ ни Д3Д, хотя бы потому, что это библиотеки для работы в 3Д.

для вывода видео он иногда использует Директ. но не всегда, мне кажется это зависит от кодека.


 
XProger ©   (2006-04-20 00:56) [13]

Luka.rus, это зависит от настроек в свойствах проигрывателя ;)


 
Nic ©   (2006-04-20 09:54) [14]

Luka.rus   (20.04.06 00:30) [12]
Direct Draw/Direct Show.


 
Pa5ha   (2006-04-20 17:23) [15]

Вы не вкурили. Я к тому, что все, что здесь обсуждается по поводу перехвата свапа и endscene к фрапсу не относится и работает он по другому т.к. видео из проигрывателей он тоже грабит. Конечно, если все проигрыватели написаны на ddraw, то вопросов больше не имею.


 
Sapersky   (2006-04-20 19:24) [16]

Если не на ddraw/dshow, то обычным методом - GetDC/BitBlt.
Кстати, BitBlt неплохо работает и в D3D (быстрее, чем GetFrontBuffer/GetBackBuffer). Во всяком случае, если вызывать "изнутри", из внедряемой DLL то есть.


 
Лопух   (2006-05-30 22:52) [17]

Удалено модератором
Примечание: Создание пустых сообщений


 
XProger ©   (2006-05-30 23:01) [18]

Удалено модератором


 
Galiaf ©   (2006-06-07 05:12) [19]

Возможно я ошибаюсь но можно взять хэндл дэсктопа и прям на нём рисовать.

procedure TForm2. Button2Click(Sender: TObject);
var
dc: HDC;
begin
dc: = GetDC (0); // получаю ссылку на рабочий стол
Rectangle (dc, 10, 10, 110, 110);
ReleaseDC (Handle, dc);
DeleteDC (DC);
end;

- это Краснов писал, когда я пробовал, вывело мне квадратик прям поверх программы, сейчас точно не помню, так просто мысль выложил.



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.042 c
15-1175826761
Slider007
2007-04-06 06:32
2007.05.06
С днем рождения ! 6 апреля


8-1156137008
hero
2006-08-21 09:10
2007.05.06
Радио в stream


2-1176454419
ALS
2007-04-13 12:53
2007.05.06
Access и региональные настройки


15-1176195527
ocean
2007-04-10 12:58
2007.05.06
Office systems (word processors, spreadsheets, e-mail, etc.)


2-1176525285
Belorus
2007-04-14 08:34
2007.05.06
Классы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский