Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 2029
Благодарности: 704

Профиль | Отправить PM | Цитировать


Цитата StarMAUGLI:
а где собственно физически расположен этот экранный буфер? может быть это самостоятельная микросхема? или он суть просто выделеная область в оперативной или графической памяти? »
Экранные буферы (их может быть несколько. Вообще говоря, сколько угодно) - это чисто программный термин. Никакой аппаратной поддержки он не имеет.
Допустим, Вы хотите вывести на экран какое-то изображение. Чтобы монитор мог его отрисовать, необходимо сначала сформировать его в видеопамяти в том виде, в котором его можно передать на монитор. Но сам факт того, что этот буфер можно вывести на экран, еще не означает, что он реально туда выводится. Ведь если бы Вы вносили изменения в область видеопамяти, которая в данный момент выводится на экран, это могло бы повлечь за собой возникновение дефектов изображения. Как аппаратного, так и программного характера.
Программные дефекты - это понятно. Вы перерисовываете буфер (в некоторой произвольной последовательности) и в этот момент устройство видеовывода начинает передавать монитору еще не отрисованный до конца кадр.
Аппаратные дефекты - это тоже понятно. К видеоОЗУ имеют доступ одновременно несколько устройств. В частности, GPU и все устройства видеовывода (то есть, 3-4 штуки, по числу выходных интерфейсов видеокарты).
И если Ваш GPU занят обменом информацией с областью ОЗУ находящейся в активном экранном буфере, неизбежно периодически будут возникать ситуации, когда к одной и той же области памяти попытаются получить доступ как GPU, так и устройство видеовывода.
Поскольку двухвходовая память в видеокартах уже давно не используется, то кто-то из них не сможет прочитать ячейки видеоОЗУ. Если неудачником окажется устройство видеовывода, то пиксели, значения компонентов которых хранятся в данном участке памяти, не будут отображены правильно.
Можно во многом снять указанные проблемы, включив вертикальную синхронизацию, но она сама по себе зло. Только обычно меньшего масштаба.
Поэтому обычно используется двойная или тройная буферизация.
GPU выделяет две области памяти под экранные буферы. Или даже три. Хотя может выделить хоть пятьдесят. Ведь это просто резервирование памяти и не более того.
Адрес одного из буферов передается устройству видеовывода, а рисовать GPU начинает в другом. Потом буферы меняются местами. Устройству видеовывода передается адрес буфера со свежеотрисованной картинкой (то есть второго), а GPU начинает формировать изображение в другом месте. В случае двойной буферизации - в том первом буфере, адрес которого был передан устройству видеовывода при отрисовке предыдущего кадра.
И так они меняются местами до бесконечности.
Естественно, это всё работает только в тех случаях, когда устройство видеовывода может получать данные для вывода на монитор из любого участка видеопамяти.
Сейчас это кажется само собой разумеющимся. Но еще 20 лет назад всё было совсем иначе и экранный буфер действительно был реализован аппаратно.
Однако, я не думаю, что Вас настолько интересует история. Поэтому, говоря о современных адаптерах, ответ на Ваш вопрос однозначен: буфер - это область памяти в видеоОЗУ программно выделенная для формирования видеопроцессором кадра изображения, которое может быть выведено на монитор.

-------
Господа! Убедительная просьба не обращаться за консультациями в ЛС. Поверьте, создать ветку в соответствующем разделе форума гораздо эффективнее.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:10, 05-04-2013 | #7