Захват картинки, которую рендерит OpenGL/DirectX

Тема в разделе "WASM.OpenGL", создана пользователем simnet_, 12 июн 2010.

  1. simnet_

    simnet_ New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    109
    Здравствуйте
    Подскажите, каким образом можно программно сделать скриншот игры, в которую я играю?
    Именно нужно изображение всего того, что находится на главном окне, куда приложение производит рендеринг. И желательно найти наиболее быстрый способ, с выч. точки зрения.
    Может, у Directx/opengl есть какие-то API для сохранения буффера кадра в область памяти? Или видеоподистема windows (есть ли что-то "до" медленного GDI? (кстати, gdi ведь наверное не будет работать так как gl'и и X'ы ривуют в обход него), что может делать копирования выводимой на экран области видеопамяти)?
    Да и еще такой вопрос: каким образом можно узнать FPS этой внешней программы? Графические программы обычно используют InvalidateRect() или что-то более низкоуровневое? Можно ли отрендерить свое изображение (это самое значение FPS) поверх изображения, которое рендерится OpenGL'ом/DirectX'ом?

    Спасибо за ответ!
     
  2. keYMax

    keYMax New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2003
    Сообщения:
    276
    Адрес:
    Новоуральск
    Через перехват интерефейсов. Есть средства и там и там. Все через изврат имхо. Дизасми фрапс.
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Эм... Кнопочку Print Screen отменили? :)
     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Ааа, программно. Ну тоже можно через эмуляцию принтскрин и клипборд :)
     
  5. simnet_

    simnet_ New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    109
    _DEN_
    слишком медленно

    keYMax
    >Дизасми фрапс
    квалификация не позволяет :dntknw: Поэтому и спрашиваю.
    >Через перехват интерефейсов
    Вы имеете ввиду перехват вызовов функций? (или com-интерфейсы? ) Не подскажете на какие именно "интерфейсы" обратить внимание?
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    simnet_
    Перехватываются функции блиттинга (SwapBuffers, Present, etc). Курите api функции.
     
  7. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    simnet_

    glReadPixels от имени процесса-владельца Rendering Context и, вероятно нечто похожее в Direct3D.
     
  8. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
  9. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Для других директ иксов не сложнее и для опенгл просто перехват функции смены буфферов.
    Там есть и все функции для перехвата. Если такой не устраивает перехват, то к господину Clerk за методикой захвата разрушением указателей)
     
  10. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    и да внедрять длл в прцесс нада. самое пристое- прилинковать длл к екзе в таблицу импорта статически экспортом в саоей длл пустой функции. там тоже есть кодес)
     
  11. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    вот еще посмотри
     
  12. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    чорт не прикрепилось.
    http://www.rapidshare.ru/1522893