Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Apr 24, 2019 9:15 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 19 posts ]  Go to page 1 2 Next
Author Message
PostPosted: Wed Apr 16, 2014 7:53 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Текущее устройство ф.0 позволяет отключать заливку окна (C = 1 - не закрашивать рабочую область при отрисовке окна), т.е. рисуется внешняя рамка и заголовок. Это сделано было с целью убрать моргание (blink) появляю щееся при последовательной отрисовке фона, а поверх него отличающиеся по цвету элементы. Способность полезная, спору нет, однако, имеется недостаток - программисту приходится самому вычислять все пустоты между элементами (кнопки, боксы, бары...) и заливать их ф.13. Получается куча лишних действий и кода, и так в каждой программе.

У меня уже давно идея вертелась в голове - указывать таблицу прямоугольных областей пустот, где фон не должен отрисовываться. Т.е. такой список в каждой строке которого хранится четыре элемента, описывающих крайние углы области пустоты (верхний левый, верхний правый, нижний левый, нижний правый). Опция может включаться флагом, например, можно выбросить градиентную заливку, которую по факту ни одна программа (кроме SETUP) не использует. Указателем на структуру с областями пустот будет служить ESI.

Естественно, при каждом изменение размера окна, эту структуру придется обновлять, но это несложно, так как размеры и расположение для "резинового" окна приходится все равно вычислять. Области пустот могут пересекаться. При заливке фона, перед тем как залить очередной пиксел, код пробежится по этому списку, если координаты будут находиться за пределами описанных областей пустот, то пиксел будет отображен, в противном случае место останется не тронутым, с расчетом на последующую отрисовку пользовательскими элементами.

Плюсы: не нужно высчитывать и отрисовывать ф.13 оставшиеся между элементами пустоты, меньше головной боли для прикладного програмиса.

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

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Wed Apr 16, 2014 8:08 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario_r4
И что будет с Fplay и другими программами, которые сами всё рисуют ?


Top
   
PostPosted: Wed Apr 16, 2014 10:11 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 4993
Идея отличная.

Совместимость со старыми программами будет сохранена?

_________________
Через тернии к звездам


Top
   
PostPosted: Wed Apr 16, 2014 11:47 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Serge wrote:
И что будет с Fplay и другими программами, которые сами всё рисуют ?

Ничего, они будут продолжать рисовать как раньше - это же выбираемая вещь. Единственно я пока не знаю, что делать в случае аппаратной отрисовки. Можешь ли ты по простому объяснить, что происходит с отрисовкой окон со скинами, при задействовании драйвера?
Leency wrote:
Идея отличная. Совместимость со старыми программами будет сохранена?

Да.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Thu Apr 17, 2014 12:43 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario_r4
Ничего не происходит. Ядро про акселерацию не знает.
Драйвер делает то же, что и ф.73 - выводит битмап на экран. Демки Mesa выводят картинку на месте клиентской области и поэтому заливку фоном не используют. Fplay рисует всё окно в битмап и выводит через ф73 а видео через ф73 или драйвер.

У меня есть некоторые сомнения.
Графическая часть ядра уже сильно запутана, а новый функционал сделает её ещё сложнее. С реализацией тоже не ясно. Сколько прямоугольников можно определять, где их хранить - ядерный malloc не безразмерный.


Top
   
PostPosted: Thu Apr 17, 2014 1:01 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Serge wrote:
Ничего не происходит. Ядро про акселерацию не знает.

Т.е. 2D ускорения для обычных приложений нет. Но ведь не факт, что в будущем не изменится?
Serge wrote:
Драйвер делает то же, что и ф.73 - выводит битмап на экран. Демки Mesa выводят картинку на месте клиентской области и поэтому заливку фоном не используют. Fplay рисует всё окно в битмап и выводит через ф73 а видео через ф73 или драйвер.

Я спрашивал именно про отрисовку скинованных окон, про вывод через битмап это не коснется вообще.
Serge wrote:
У меня есть некоторые сомнения.
Графическая часть ядра уже сильно запутана, а новый функционал сделает её ещё сложнее.

В WinAPI такая фича с пустотами есть, чем мы хуже? Насчет запутанности - по моему документация нормально все описывает и у меня лично проблем не было. С прикладной точки зрения отрисовка окна значительно упрощается, и я как ты знаешь не любитель траты памяти (код вывод курсора передает горячий привет ненужному фреймбуферу).
Serge wrote:
С реализацией тоже не ясно. Сколько прямоугольников можно определять, где их хранить - ядерный malloc не безразмерный.

Не нужен мне malloc - обычное приложение ведь само отрисовывает свое окно. Это будет по реализации подобно "B = 1 - координаты всех графических примитивов задаются относительно клиентской области окна", т.е. ядру особых телодвижений не требуется. Зачем мне копировать данные в область ядра, если код отрисовки окна, в ядре, всегда имеет доступ к исходной области памяти, т.к. все выполняется в одном потоке. Для системной механики оконного стека абсолютно ничего не меняется.

З.Ы. Мне кажется ты просто не понял о чем именно идет речь.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Thu Apr 17, 2014 10:02 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quote:
В WinAPI такая фича с пустотами есть, чем мы хуже?
Фича есть, используется редко, когда надо что-то совсем нестандартное
Quote:
Насчет запутанности - по моему документация нормально все описывает и у меня лично проблем не было.
Я про исходники. Множественное отсечение вообще не подарок. GDI и X server делают CombineRgn(RGN_DIFF) и рисуют оставшиеся прямоугольники. Так же и с отрисовкой курсора. Каждый пиксель не проверяют.


Top
   
PostPosted: Thu Apr 17, 2014 10:18 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Serge wrote:
Я про исходники. Множественное отсечение вообще не подарок. GDI и X server делают CombineRgn(RGN_DIFF) и рисуют оставшиеся прямоугольники. Так же и с отрисовкой курсора. Каждый пиксель не проверяют.

Я не хочу зря расходовать память - жаба придет ко мне ночью и начнет душить меня.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Thu Apr 17, 2014 10:26 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Будешь каждый пиксель на отсечение проверять ?


Top
   
PostPosted: Thu Apr 17, 2014 11:02 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Serge wrote:
Будешь каждый пиксель на отсечение проверять ?

Еще раз - если не установлен флаг D (сейчас используется для отрисовки градиента), то будет однократная проверка на установленность флага и все. Для существующих приложение абсолютно ничего не изменится. Если флаг установлен, отрисовка заливки фона перенаправляется в другую процедуру, в которой уже идет контроль каждого пиксела. Как вариант для ускорения можно написать процедуру разбиения на области рисуемых прямоугольников, но тут уже алгоритм сложнее получается. Еще раз - существующие приложения не будут затронуты вообще никак.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Thu Apr 17, 2014 11:27 am 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
А почему не поручить заливку boxlib?


Top
   
PostPosted: Thu Apr 17, 2014 11:51 am 
Offline
KSoC/GSoC Student

Joined: Wed Jul 11, 2012 3:17 am
Posts: 224
Извините, что влезаю в дискуссию, помимо "Setup" эту заливку использует "Арканойд v 0.3" - это чтобы не забыть поправить потом.


Top
   
PostPosted: Thu Apr 17, 2014 12:42 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
SoUrcerer wrote:
А почему не поручить заливку boxlib?

А приложения которым не нужен Box_Lib должны быть лишены такой возможности?
Spoiler: Show
Akyltist

Спасибо, учту.

З.Ы. В общем все как обычно - в 90% случаев, когда предложишь новую полезную вещь, которая старых вещей не затрагивает, начинаются реакционные настроения. Когда сделаешь все успокаиваются и так до следующего раза...

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Thu Apr 17, 2014 3:48 pm 
Offline

Joined: Tue Oct 05, 2010 6:05 pm
Posts: 213
Позволит ли новый функционал не рисовать на правой и нижней рамках окна битмапы-тексты-кнопки-..., или лучше этим отдельно заняться?


Top
   
PostPosted: Thu Apr 17, 2014 4:00 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
lev wrote:
Позволит ли новый функционал не рисовать на правой и нижней рамках окна битмапы-тексты-кнопки-..., или лучше этим отдельно заняться?

Я не понял суть идеи. Можно в виде рисунка изложить?

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 19 posts ]  Go to page 1 2 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited