Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ALWAYS on top

2.3K
17 октября 2002 года
Nex
4 / / 17.10.2002
Добрый день, all. Пожалуйста, хоть раз стисните зубы и помогите темному чайнику, вместо того, чтобы бить его ногами. :D Мне надо сделать программу, в которой в углу ПОСТОЯННО будет что-то висеть: таймер, сообщение от администратора и т. п. Но это должно работать и в играх, где используется OpenGL и Direct3D. Так, как это делает программа FRAPS (fraps.com), меня устраивает, но вот знать бы КАК ОНА ЭТО ДЕЛАЕТ... Только пожалуйста не надо рекомендовать написать письмо автору этой программы - уже сделал и уже очень долго жду ответа.
476
17 октября 2002 года
man2002ua
218 / / 16.10.2002
а как делает FRAPs?
2.3K
17 октября 2002 года
Nex
4 / / 17.10.2002
Цитата:
Originally posted by man2002ua
а как делает FRAPs?



FRAPS - программа для вывода FPS (frames per second) в играх и всех остальных приложениях, использующих Direct3D или OpenGL. Запускаешь ее - она вешается в трей. Потом когда заходишь в игру - видишь циферки в том углу, в каком сам указал. Можно задавать стиль циферок Opaque и Transparent. Но выводится не какой-нибудь шрифт типа Arial или Times, а очень простой (для его начертания) шрифт. Прелесть в том, что висит это ВСЕГДА, практически безо всякого мерцания. Может кто видел логотип NVidia в правом нижнем углу при использовании Direct3D (и только Direct3D)? Думаю, что FRAPS использует похожий принцип, хоть и не так красиво рисует :) Вообще программа бесплатная - можно скачать и самому посмотреть

476
17 октября 2002 года
man2002ua
218 / / 16.10.2002
раз висит без мерцания и исп. эффекты прозрачности, то скорее всего используются механизмы DirectX(OpenGL), думаю обычный "теневой" буфер, но вот принятие решения типа "когда обновить себя на экране" - это сложнее... или висит отдельный поток приложения, к-й с интервалом 100-200 мс перебрасывает содержимое "тени" на экран и готовит новую "тень" или чего покруче - перехват операции обновления экрана - и только после этого - обновление себя...
(у меня выход в инет только сюда открыт, скачать не могу, если скачаешь - кинь мне на [email]man@kiev.vectis.ru[/email], я раскручу и гляну принцип)
2.3K
17 октября 2002 года
Nex
4 / / 17.10.2002
Программу отослал. Надеюсь на помощь :-}
Кстати, насчет перехвата операции обновления экрана.... Нельзя ли поподробнее? Мне надо будет вносить свои изменения в дрова видео? или может свои писать? :o
295
18 октября 2002 года
gray_k
356 / / 20.12.1999
Кстати это очень интересная тема. Я помнится задавал похожий вопрос, но ответов так и не дождался:???:
476
18 октября 2002 года
man2002ua
218 / / 16.10.2002
К сожалению я не занимаюсь графикой профессионально, есть общие познания как что делается и не более.Насчет "теней" (или заднего буфера) - все изображения, к-е появляются на экране подготавливаются на альтернативной плоскости (что-то вроде невидимого экрана - на "тени"), т.е. на невидимую на экране плоскость по очереди выводятся все элементы изображения, после чего плоскости меняются местами (и в DirectX и в OpenGl и даже просто в WinAPI есть функция BitBlt, к-я позволяет менять плоскости практически мгновенно). В худшем случае плоскостей две - основная и невидимая (лучше иметь две и более плоскостей).

Насчет перехвата обновления - в DirectX 8.1 появился интерфейс IMediaDet, к-й позволяет подключаться к текущему Media Source и управлять им (получать/устанавливать FPS, снимать картинки и т.п.) Возможно с его помощью можно определить, когда основное устройство выполнило перерисовку плоскости - и влепить после этого свою картинку...
...еще надо подумать...
кстати - внутри фрапса стоят две Hook процедуры - для WH_CALLWNDPROCRET и WH_CBT (могет быть, что идет перехват обновления с их помощью.. надо опробовать реально)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог