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

Ваш аккаунт

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

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

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

Быстрая очистка заднего буффера

1.8K
20 июня 2005 года
GLAGOLA
80 / / 06.11.2004
Помогите....я недавно сел разбираться с директом 3д.. а меня инетерсует можно както очистить задний буфер, как DirectDraw - вручную..т.е. получить ссылку где находиться поверхность в памяти и ее допустим обнулить(например ZeroMemory)??????????????????????????????
11K
20 июня 2005 года
da1t0nic
8 / / 19.06.2005
Цитата:
Originally posted by GLAGOLA
Помогите....я недавно сел разбираться с директом 3д.. а меня инетерсует можно както очистить задний буфер, как DirectDraw - вручную..т.е. получить ссылку где находиться поверхность в памяти и ее допустим обнулить(например ZeroMemory)??????????????????????????????



Следующий фрагмент взят из туториала в SDK

// Clear the back buffer to a blue color
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );


Ну а если именно как на память, то скорее всего никак, т.к. Direct3D в отличие от DirectDraw не позволяет (на сколько я знаю) напрямую работать с видеопамятью (т.е. копировать, смотреть). Это более высокоуровневый компонент.
На счет производительности ты зря волнуешься -- в Microsoft не дураки работают и вполне возможно, что "ручная" очистка более медленная из-за необходимости блокировать видеопамять, проецировать в обычную, ну и т.д.

1.8K
21 июня 2005 года
GLAGOLA
80 / / 06.11.2004
Хм....не знаю..дураки не дураки...но ведь в DirectDraw ,быстрее работает чем простая(стандртная) очистка...а зачем что-то куда-то переводить...моя цель получить доступ к области памяти, занимаемой задним буффером...а там просто не сложными матиматическими формулами считаем сколько эта поверхность занимает в памяти и забиваем все вподряд...
11K
21 июня 2005 года
da1t0nic
8 / / 19.06.2005
Цитата:
Originally posted by GLAGOLA
Хм....не знаю..дураки не дураки...но ведь в DirectDraw ,быстрее работает чем простая(стандртная) очистка...а зачем что-то куда-то переводить...моя цель получить доступ к области памяти, занимаемой задним буффером...а там просто не сложными матиматическими формулами считаем сколько эта поверхность занимает в памяти и забиваем все вподряд...


Понимаешь, в тебе стремление все оптимизировать, прям как у ЛаМота (не могу сказать, что он плохо на меня повлиял, просто после него долго переучиваться...) Я хочу сказать, что сотни тысяч треугольников, визуализируемых десятки раз в секунду, едят куда больше ресурсов. Да и вообще, в том то и дело, что если драйвер видеокарточки может справиться с какой-то задачей быстрее, то она ложится на его плечи. Существует множество других проблем, на решение которых ты затратишь куда меньше времени и получишь куда более ощутимый выигрышь.
Я, к примеру достаточно уверен в том, что никакие самые современные SSE/SSE2 расширения процессора не помогут процессору обрабатывать векторы быстрее, чем современная 256-битная видеокарточка... Короче, на современном этапе программы зависят в первую очередь от того, что способна реализовать видеокарточка, а не от того, что кажеться быстрее, если руководствоваться здравым смыслом (хотя это часто и не так)...

Вот тебе еще информация для размышления (взята из книги Гайдукова по OpenGL. Надо сказать превосходная книга): порт AGP8X способен передавать данные с пиковой скоростью лишь в 2.1 Гбайт/c. В тоже время видеокарта NVIDIA GeForce FX 5900 Ultra обладает пропускной способностью 27 Гбайт/с (нехило, да??). В результате, даже несмотря на то, что сжатые текстуры требуют времени на раскодирование, работать с ними все-же быстрее, так как они занимают меньше места в видеопамяти и, соответсенно, быстрее считываются...
В общем, думаю, ты меня понял.

11K
21 июня 2005 года
da1t0nic
8 / / 19.06.2005
Хотя, кажется я тебя обманул. Попробуй использовать методы IDirect3DDevice9 GetBackBuffer или GetFrontBufferData. Мне некогда с ними разбираться, но судя по SDK, они возвращают указатель на IDirect3DSurface9, который нужно заблокировать (LockRect), выполнить необходимые действия и разблокировать (UnlockRect). Но я почти уверен, что это это у тебя получиться медленнее.
1.8K
21 июня 2005 года
GLAGOLA
80 / / 06.11.2004
Хм..я глянул SDK одним глазком...вроде функции которые ты привел(LockRect) не возвращают указателя на адресс в памяти где распологаются данные(поверхность)...
15K
03 марта 2006 года
PAV
16 / / 03.03.2006
Указатель тебя не получить в любом случае, так как задний буффер находится в видеопамяти. Скорее всего, раз уж так хочешь оптимизировать, рой доки по API видюхи и ищи там работу с памятью.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог