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

Вниз

Проблема с back буфером в direct3d   Найти похожие ветки 

 
SSW   (2008-02-12 20:48) [0]

Необходимо сохранить содержимое back буфера в direct3d,
делаю так:

Device3D.GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, Buf);
Buf.LockRect(R, NIL, 0);
{...сохранение буфера...}
Buf.UnlockRect;

Все работает, но возникают такие тонкости:
- копирование области из буфера в другую область памяти занимает 200-300 мс;
- таже самая операция на старом ноутбуке с интегрированной видеокартой занимает 100-150 мс.

А по идее копирование должно быть мгновенным...
Почему такое происходит и как от этого избавится?


 
SSW   (2008-02-13 06:15) [1]

Ну неужели никто ничего не подскажет???


 
Sapersky   (2008-02-13 13:32) [2]

Что значит "сохранить"? Просто запомнить для какого-нибудь спецэффекта или перегнать в системную память (GetBackBuffer именно это и делает) для сохранения?


 
SSW   (2008-02-13 13:39) [3]

Именно "перегнать" в системную память.
Копирование то происходит - только уж очень медленно


 
Sapersky   (2008-02-13 13:42) [4]

Это нормально.
Отчасти из-за того, что все видео-шины (особенно AGP) оптимизированы на передачу "туда", но не "обратно". Отчасти из-за тормознутости конкретно GetBackBuffer (по моему опыту, банальный BitBlt быстрее).


 
SSW   (2008-02-13 13:58) [5]

В DX9 сделать получилось через GetRenderTargetData (результат тотже, работает очень быстро, получается что шина здесь не причем), а в DX8.1 не получается - а надо именно в 8-ой версии сделать.


 
Sapersky   (2008-02-13 14:09) [6]

Очень быстро это конкретно сколько? Попробуй сравнить с BitBlt.
Кстати, относительно GetRenderTargetData MS пишет:
This method will fail if the render target is multisampled.

Насчёт других методов в DX8 не знаю. Есть ещё GetFrontBuffer, но она, насколько помню, такая же тормозная. Я в конечном итоге пришёл к использованию для таких вещей BitBlt.


 
SSW   (2008-02-13 14:18) [7]

GetFrontBuffer в DX8 тоже быстро работает, но возвращает буфер всего экрана, а не только окна.
А BitBlt из буфера Direct3D никак не сделать...


 
Sapersky   (2008-02-13 14:30) [8]

Handle окна разве неизвестен?


 
SSW   (2008-02-13 14:34) [9]

Дело в том, что во время работы программы, это окно частично перекрыто другими окнами, и если делать скриншот при помощи BitBlt, то окно будет не полностью сохранено.
А GetBackBuffer и GetRenderTargetData возвращают исходное изображение, т. е. не перекрытое другими окнами.


 
Sapersky   (2008-02-13 15:29) [10]

Можно попробовать выводить всё в дополнительный render target и делать GetFrontBuffer с него... хотя не знаю, может, всё равно будет копироваться экран. Или тормозить будет как GetBackBuffer.



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

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

Наверх





Память: 0.46 MB
Время: 0.046 c
2-1260808991
alexan
2009-12-14 19:43
2010.02.14
Вопрос по Delphi


2-1260795180
ShowMessage
2009-12-14 15:53
2010.02.14
Координаты ShowMessage на форме


2-1260637936
recop
2009-12-12 20:12
2010.02.14
После выполнения файла cmd получить содержание переменных среды


15-1260394794
kyn66
2009-12-10 00:39
2010.02.14
Avast тормозит загрузку таблиц


2-1260811238
Human
2009-12-14 20:20
2010.02.14
Проверка введённого значения в MaskEdit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский