Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет dibr ([info]dibr)
@ 2011-01-16 16:54:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Внезапные простые решения
     Когда-то давно, когда по поверхности планеты бегали велосирапторы, а на компьютерах "Ай-Би-эМ Пи-Си" стоял MS-DOS, программисты уже писали программы "с окошками" (и, подозреваю, у каждого компьютерщика тех времён найдётся самописная "оконная библиотечка"). Окошки создавались тривиально - сохранением и последующим восстановлением области экрана под окном, благо в текстовом режиме места она занимает мало.
     Потом появился графический интерфейс (например в виде Windows), и выяснилось что "картинку под окном" сохранять нельзя, ибо некуда (обычной памяти мало, видеопамяти - очень мало, помню все эти расчёты при покупке видюхи "если поставить 1024х768 то получится всего 256 цветов, а в 800х600 уже можно позволить себе 64k цветов"), и для окошек надо что-то придумать. И придумали, гениально простую вещь - содержимое окна не сохранять вообще, для восстановления - попросить приложение, которому принадлежит окно, "перерисоваться". Кстати, до меня только сейчас дошло, почему в win1.0 были запрещены перекрывающиеся окна: они просто ещё не умели их перерисовывать!

     Быстро шли годы, медленнее проходили десятилетия. Типичный объем компьютерной памяти вырос до нескольких гигабайт, видеопамять тоже росла как на дрожжах: меньше полугига сейчас уже наверное и не найти (а в полгига, если что, можно примерно 60 раз целиком уложить экран 1920х1200). Я когда-то удивлялся, зачем видеокарте памяти в разы больше, чем может понадобиться для вывода картинки, потом привык. Параллельно, на деньги любителей 3D игр, производители видюх развивали вроде-бы-больше-никуда-не-нужное 3D (я про него вспоминал разве что глядя очередную киношку "через оверлей", причём вспоминал только когда "оверлей" глючил). Сама операционная система 3D особо не пользовала, а окошки при показе так и перерисовывались приложениями: в XP все признаки перерисовки при переключении (вроде "белых окон", подтормаживания и перерисовки "не всего и не того") были в полный рост.

     А потом как-то внезапно до софтописателей дошло. Что сейчас уже можно каждому окну выделить собственную область видеопамяти - пусть себе там рисует по потребности, а когда нужно его показать - достаточно просто сделать эту область видимой средствами видеокарты!
     И получился интерфейс Windows Aero (впервые появившийся в Vista, если я не путаю - лично с вистой не работал, сразу перешёл на 7). И внезапно оказалось, что если все окошки в готовом виде хранятся в видеопамяти, а видеокарта позволяет с ними произвольно оперировать, многие вещи становятся легче, проще и удобнее. Показ окна становится настолько дешевым действием, что его можно делать по событию вида "навелись мышом куда надо" (убрали мышь - убрали окно), можно дёшево показать "превью" окна (при этом оно будет "живым и шевелящимся", поскольку это и есть настоящее окно, только уменьшенное средствами видеокарты), можно так же дёшево делать всякую мелкую анимацию при исчезновении/появлении, фишки вроде полупрозрачности - и всё это без нагрузки на процессор, ибо всё делается видеокартой в реальном времени. Даже в превьюшках, показываемых в переключалке alt/tab, окна "шевелятся" - и оно и понятно, это ж теперь очень дешевое (по расходу процессора) действие!

     А я-то до недавнего времени считал что 3D в видеокартах - "неизбежное зло, и для UI от него пользы никакой". А в win1.0 негров линчевали окна перекрываться не могли. А оно вон какой внезапно прогресс. :-)
     Кстати, любопытно - как оно сейчас во всяких юниксах типа линукса. С одной стороны - памяти раньше всем не хватало, а значит "во времена оные" как-то извращаться приходилось всем. С другой стороны - если я правильно понимаю идеологию xserver/xclient, просить приложение перерисовываться по каждому чиху может оказаться накладным, перерисовываться желательно xserver'у (но "окно" хранить не в виде дампа, конечно, а более компактно), что резко упрощает идеологически переход к "все окна лежат в реальной видеопамяти".
     Я лично с линуксом давно дел не имел, поэтому не в курсе. Кто скажет - там уже так же как в Aero? А они это первыми придумали, или микрософт?


(Читать комментарии) - (Добавить комментарий)


[info]ext_229571@lj
2011-01-16 11:01 (ссылка)
> И получился интерфейс Windows Aero

Ну вообще-то Compiz и получился, он был несколько ранее. А ещё ранее были 3D эффекты в MacOS X. Более того, будущий Wayland уже с самого начала разрабатывается с учётом того, что он будет плевать на перекрывающиеся окна, там главный — композитор.

(Ответить) (Ветвь дискуссии)


[info]ext_229571@lj
2011-01-16 11:11 (ссылка)
Да, а в классическом X Server окна перерисовывает клиент, тут ничего нового — есть специальное событие.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2011-01-16 11:15 (ссылка)
Но хотя бы в случае работы по сети это, надеюсь, хоть как-то оптимизировалось (попытками перерисовать локально, не дёргая клиента)?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ext_229571@lj
2011-01-16 11:17 (ссылка)
Да, конечно, картинки кэшировались пискмапами, шрифты там тоже… Но вообще протокол X11 не слишком оптимизирован под медленное соединение, он оптимизирован под тупые терминалы, без мощных процессоров. Другое дело протокол NX.

(Ответить) (Уровень выше)


[info]dibr@lj
2011-01-16 11:14 (ссылка)
> Ну вообще-то Compiz и получился, он был несколько ранее.

А, ну вот примерно это я и спрашивал - я не особо слежу за тем, что в мире Linux происходит, мне винды хватает :-)

> Более того, будущий Wayland уже с самого начала разрабатывается с учётом того, что он будет плевать на перекрывающиеся окна

Не очень понятно - учитывая, что перекрывающиеся окна побороли четверть века назад, сейчас это при разработке нужно не "учитывать", а "подразумевать" - где-то рядом с "графика будет не какая-нибудь, а цветная" и "будет поддерживаться мышь" :-)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ext_229571@lj
2011-01-16 11:16 (ссылка)
Идея не в этом. Там выкинут событие «перерисовать окно» за ненадобностью — всё окна всегда рисуют в свою собственную область, которая никогда не перекрывается, а потом композитор соединяет всё это в единую картину с перекрывающимися окнами, но приложения это волновать не должно.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2011-01-16 11:24 (ссылка)
А. Это разумно, кстати - меньше геморроя разработчикам, меньше графических глюков...

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ext_229571@lj
2011-01-16 11:32 (ссылка)
Дык! :)

(Ответить) (Уровень выше)


(Читать комментарии) -