OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 16 Декабрь, 2018 10:47

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Среда, 04 Май, 2011 15:35 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
Может я выразился не совсем корректно: "мерцание". Может "размазывание"?
Но на большой скорости это выглядит как мерцание.(особенно первой/последней строки текста в окне)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Среда, 04 Май, 2011 15:37 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4487
Откуда: Россия, Орёл
Евгений Темиргалеев писал(а):
ilovb, Вы случайно не про такое "мерцание"?
ilovb писал(а):
Да да. Я удивляюсь как Иван не заметил.

Фишка в том...
Если часть дочернего MDI-окна выдвинуть за пределы родительского, то:
1) в вайн при прокрутке наблюдается сей эффект (скриншот оттуда)
2) в WinXP не наблюдается

Может быть фишка в 7-ке?
Сергей Губанов писал(а):
ББ рисует посредством GDI. В Windows-7 GDI реализован как обёртка над новым графическим движком. Древние программы в Windows-7 выглядят как новенькие.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Среда, 04 Май, 2011 15:39 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2930
Откуда: г. Ярославль
ilovb писал(а):
Может я выразился не совсем корректно: "мерцание". Может "размазывание"?
Но на большой скорости это выглядит как мерцание.(особенно первой/последней строки текста в окне)


Да-да, вот сейчас проверил на семёрке - размазывается. А вот в вайне, на котором я по большей части работаю в ББ, всё чётко. Да и в винде мне удалось добиться размазывания, только крутанув колесо как следует, "от души".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Среда, 04 Май, 2011 15:43 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
Этот эффект есть на всех виндах и всех BlackBox'aх
Он меня раздражал еще при первом знакомстве с BB. (1.4 если не ошибаюсь)

Тут уже Сергей Губанов говорил о тормозах при прокрутке больших разноцветно раскрашенных доков (winapi например).
Эти тормоза и мерцание связаны между собой.

Мерцание усугубляется при сложном форматировании дока и большом количестве раскрашенных участков.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Среда, 04 Май, 2011 15:44 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
а Вайн случаем не преобразует там сообщение прокрутки каким нибудь хитрым способом?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Среда, 04 Май, 2011 16:23 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
Проверил на WinXP под VMware - эффект тот же. Правда выражен меньше. Это какая-то особенность виртуальных машин видимо...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Четверг, 05 Май, 2011 12:21 
Аватара пользователя

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1162
Откуда: Tel-Aviv
Эффект размазывания может быть вызван ещё отсутствием ускорения графики в виртуальных машинах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Четверг, 05 Май, 2011 12:22 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
В виртуальной машине наоборот размазывания меньше

ps. Люди не гадайте о причине. Она известна, и я о ней написал выше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Пятница, 30 Январь, 2015 11:54 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2235
Господа, а эта проблема кем-то решена? Борис, вам удалось победить мерцание. Проблема точно есть и она особенно ярко проявляется, когда текстовое отображение чем-то еще обернуто.

Еще заметил, что проблема обостряется, когда текст русский. Если текст на английском, то видимо быстрее происходят вычисления (например ширины строки) и мерцание не особо заметно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Пятница, 30 Январь, 2015 13:13 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2930
Откуда: г. Ярославль
Как раз переделываю WheelScroll для SDL-BB. Решил не портировать алгоритмы прокрутки, а делать с нуля. Потому как много странного. Например, в ступор ставит переменная w.wheelPos, которая нигде не инициализируется, а используется только в этом обработчике для хранения позиции колеса (!) между событиями.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Пятница, 30 Январь, 2015 15:27 
Аватара пользователя

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1162
Откуда: Tel-Aviv
Евгений Темиргалеев писал(а):
ilovb, Вы случайно не про такое "мерцание"?

Оно самое.

Борис, а тут точно именно мышь виновата? Может, дело в отрисовке прокручивания области? А тогда нужно смотреть в HostPorts.

Обновлено: не обратил внимание, что тема не нова.


Последний раз редактировалось Роман М. Пятница, 30 Январь, 2015 15:30, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Пятница, 30 Январь, 2015 15:29 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2235
Иван Кузьмицкий писал(а):
Как раз переделываю WheelScroll для SDL-BB. Решил не портировать алгоритмы прокрутки, а делать с нуля. Потому как много странного. Например, в ступор ставит переменная w.wheelPos, которая нигде не инициализируется, а используется только в этом обработчике для хранения позиции колеса (!) между событиями.

Попробовал инициализировать w.wheelPos, но это особо не помогает. В принципе будет интересно сравнить реализации, возможно вашу портировать назад на WinApi. Но как я понимаю Бориса, тут дело в обработке TextView этих сообщений. То есть, TextView не готово так быстро обрабатывать сообщения. Только вот буферизировать надо не сообщения, а текстовое отображение. Чтобы оно было просчитано заранее немного вверх и немного вниз.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Пятница, 30 Январь, 2015 15:46 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2930
Откуда: г. Ярославль
Иван Денисов писал(а):
Иван Кузьмицкий писал(а):
Как раз переделываю WheelScroll для SDL-BB. Решил не портировать алгоритмы прокрутки, а делать с нуля. Потому как много странного. Например, в ступор ставит переменная w.wheelPos, которая нигде не инициализируется, а используется только в этом обработчике для хранения позиции колеса (!) между событиями.

Попробовал инициализировать w.wheelPos, но это особо не помогает. В принципе будет интересно сравнить реализации, возможно вашу портировать назад на WinApi. Но как я понимаю Бориса, тут дело в обработке TextView этих сообщений. То есть, TextView не готово так быстро обрабатывать сообщения. Только вот буферизировать надо не сообщения, а текстовое отображение. Чтобы оно было просчитано заранее немного вверх и немного вниз.

Я только что выкинул всю эту винапишную логику из WheelScroll окончательно. Дело в том, что при получении сообщения о прокрутке колеса, в окно Windows.Window сначала засылается сообщение Controllers.WheelMsg. И если на него никто не среагировал, вот тогда включается вся эта хостовая логика и начинает обрабатывать прокрутку.
А у меня алгоритм StdScrollers по умолчанию используется в окне. Поэтому он и делает всю прокрутку самостоятельно, отчего я не вижу смысла дублировать алгоритмы прокрутки!

Насчёт рендера TextView, ничего не могу сказать. После оптимизации использования SDL_TTF, предполагаю, окончательный рендер будет летать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Пятница, 30 Январь, 2015 20:48 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
Иван Денисов писал(а):
Господа, а эта проблема кем-то решена? Борис, вам удалось победить мерцание


Если мне не изменяет память, то извне это не победить. Т.е., имхо, Иван Кузьмицкий правильно решил переписать. Там уж больно мудрено и неэффективно сделано. Они всю эту логику судя по всему постепенно наращивали без рефакторинга.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Среда, 04 Февраль, 2015 16:03 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2235
Про "неэффективно сделано" я бы так не сказал, расчет на нормальный быстрый рендеринг строк. Дело в GDI, у меня еще что-то драйверами видимо 2D ускорения совсем нету в ББ. Сейчас попробую винду и драйверы обновить, может уже улучшили ускорение GDI.

Но в целом вектор верный, надо избавляться от GDI.
"GDI is deprecated on Windows Vista/7. use Direct3D9 surfaces instead entirely, or use a Direct2D implementation for DWM capable operating systesms. "
https://forums.geforce.com/default/topi ... windows-7/

Резюмируя... размазывание размазыванию рознь :) чтобы было идеально, но надо оптимизировать каркас, а чтобы было нормально хотя-бы надо обновить ОС и дрова.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Четверг, 05 Февраль, 2015 06:06 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2235
Торможение текста значительно уменьшается, если отключить в опциях TrueType метрику. Может кто-то объяснить, почему она такая тяжелая для расчетов? Что она вообще в ББ дает?

Ага, сам нашел ответ. Не надо её включать в общем.
Цитата:
Если установлен флажок Использовать метрику TrueType (Use TrueType Metric), для размещения отдельных символов будет использоваться точная метрика. Это дает лучший результат при печати, но обычно затрудняет чтение с экрана.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Четверг, 05 Февраль, 2015 09:06 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2930
Откуда: г. Ярославль
Иван Денисов писал(а):
Торможение текста значительно уменьшается, если отключить в опциях TrueType метрику. Может кто-то объяснить, почему она такая тяжелая для расчетов? Что она вообще в ББ дает?
Посмотрел на флажок HostFonts.useTTMetric (это интерактор опции метрики). Судя по всему, он участвует только при инициализации объекта шрифта. В алгоритмах отображения текста он не задействуется. Можно сделать вывод, что тормозит Windows (см. HostPorts.Rider.DrawString, функция WinApi.TextOutW), а не ББ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Четверг, 05 Февраль, 2015 10:31 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
Ага и Windows тормозит только в ББ. Вот чудеса.
В тысячах текстовых редакторов не тормозил, а тут на тебе.

Да и вообще не пойму что вы обсуждаете?! Там самый обычный говнокод.

И в отрисовке текста говнокод. И в поиске линеек говнокод. Все вместе дает тормоза.

В поиске линеек сложность O(n), где n - количество элементов текста. А этот поиск ЕМНИП происходит при отрисовке каждой строки текста. Ясен пень будет нехилая задержка в отрисовке.


Цитата:
2D ускорения совсем нету в ББ

Господь с тобой, Иван. Это явно не та задача, которой требуется 2D ускорение. Тут скорее прямые руки нужны.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Четверг, 05 Февраль, 2015 10:49 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2930
Откуда: г. Ярославль
ilovb писал(а):
Ага и Windows тормозит только в ББ. Вот чудеса.
В тысячах текстовых редакторов не тормозил, а тут на тебе.

Да и вообще не пойму что вы обсуждаете?! Там самый обычный говнокод.

И в отрисовке текста говнокод. И в поиске линеек говнокод. Все вместе дает тормоза..


Рассуждения ни о чём. Слово "говнокод" совершенно уводит от сути.

Поясню на простом примере - делаем сотню кнопок на форме и обновление формы начинает тупо тормозить. Почему? Потому что в контролах ББ сквозь HostCFrames просвечивают окошки Windows. Поскольку ББ не учитывает изменения в алгоритмах рендеринга виндовых контролов с каждой новой версией Windows, то при перестройке дерева фреймов эти неучтённые особенности виндовых контролов начинают отнимать время, и форма от этого фликает.
Если мы сделаем контролы средствами самого ББ, то форма перестаёт фликать, это проверено.

Точно так же со шрифтами. Что там изменилось в WinApi.TextOutW? Что там изменилось в самой Windows? Наверняка были какие-то изменения. А ББ не менялся годами.
Я сейчас сделал свой Ports.DrawString и вижу, как тормоза вывода влияют на рендер текста. Так что Иван Денисов прав, алгоритмы ББ рассчитаны на нормальный вывод строк. По нынешним временам, рисование десятка строк текста - вообще незаметная операция, и если WinApi.TextOutW сделает это быстро, то и ББ будет работать без проблем. Но, видимо, есть какие-то проблемы с унаследованным кодом внутри самой Windows.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка Крысой
СообщениеДобавлено: Четверг, 05 Февраль, 2015 10:55 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
Кстати, товарищи, если у кого то есть ресурсы и желание улучшить ББ, то сделайте нормальный профайлер. Это решит очень многие проблемы. Без профайлера оптимальную систему написать невозможно. Обратное только гуманитарий может утверждать.
Люди ошибаются, лгут и режут понты. А профайлер покажет реальную картину и поможет точно установить узкое место.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2018, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB