Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Jan 22, 2021 4:51 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 44 posts ]  Go to page Previous 1 2 3
Author Message
PostPosted: Fri Jul 10, 2015 12:39 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1274
CleverMouse wrote:
Проверка углов будет давать видимые артефакты - при перекрытии окна другим части символов, которые должны быть видимы, исчезнут.
Это как раз легко исправить, но есть проблемы посложнее. Конечно, их легко решить с помощью ctrl-c/ctrl-v, но сколько тогда кода получится... Просто мне не хочется возится с двумя координатами, и так регистров мало. И хочется унифицировать код: вывод на экран, вывод без проверок, вывод в буфер.
А что, если в первом случае тоже выводить в буфер, а потом как битмап? Изображения наверно быстрее рисуются?


Top
   
PostPosted: Fri Jul 10, 2015 5:13 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1625
Вывод в буфер в сисфункции вообще-то откровенно лишний, его вполне может делать приложение/библиотека самостоятельно, при таком вызове наверняка большая часть времени уходит на собственно системный вызов вместо работы. Марат, типично, сделал "как проще".

_________________
Сделаем мир лучше!


Top
   
PostPosted: Fri Jul 10, 2015 9:31 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1274
Не понял... У вас же так рисуются шрифты под иконками, сначала в буфер а потом какой-то cel shading.


Top
   
PostPosted: Sun Jul 12, 2015 9:19 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Pathoswithin
Тень делается просто. Сначала темный текст, потом светлый со смещением влево-вверх на пиксель.
А отрисовка в пользовательский буфер это жуткий костыль.


Top
   
PostPosted: Sun Jul 12, 2015 5:24 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1274
Всё равно не понял, почему жуткий костыль? Как это сделать по другому, если пользовательская программа хочет применить к шрифту свой эффект?
И скажите что-нибудь про скорость вывода изображений.


Top
   
PostPosted: Sun Jul 12, 2015 6:28 pm 
Offline
User avatar

Joined: Fri Apr 17, 2015 9:44 am
Posts: 28
Pathoswithin, f.73 выводит 32 битное изображение практически с той же скоростью, что и SetDIBitsToDevice в винде


Top
   
PostPosted: Sun Jul 12, 2015 9:41 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1274
А f.65?


Top
   
PostPosted: Mon Jul 13, 2015 4:06 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1625
Pathoswithin wrote:
Всё равно не понял, почему жуткий костыль?
Потому что на ровном месте появляется системный вызов, что а) тормозит и б) раздувает ядро.
Pathoswithin wrote:
Как это сделать по другому, если пользовательская программа хочет применить к шрифту свой эффект?
Самостоятельно вывести в буфер так, как ей надо. Это не настолько сложный процесс, чтобы дёргать ради него ядро. Будет быстрее.

Pathoswithin wrote:
И скажите что-нибудь про скорость вывода изображений.
В дистрибутиве есть бенчмарк графики mgb.

Pathoswithin wrote:
А что, если в первом случае тоже выводить в буфер, а потом как битмап?
1. Функции вывода битмапа не умеют прозрачность.
2. Откуда буфер возьмёшь? Ядерный стек потока не резиновый, 9*6*4 байта = 216 байт там, конечно, найдётся, но если ты эти 9*6 будешь увеличивать в 8 раз по обеим осям, то перезапишешь что попало со слабопредсказуемыми эффектами.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Mon Jul 13, 2015 5:05 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1274
Quote:
Самостоятельно вывести в буфер так, как ей надо. Это не настолько сложный процесс, чтобы дёргать ради него ядро. Будет быстрее.
Стоп, ещё раз. Программа хочет вывести строку текста так, чтобы она по длине переливалась из одного цвета в другой, системными шрифтами, которые имеют недокументированную структуру и вшиты в ядро. Поэтапно, как она будет это делать?
Quote:
Откуда буфер возьмёшь? Ядерный стек потока не резиновый
При чём здесь стек? kernel_alloc для всей строки, не? Мне ж его другой функции скармливать.


Top
   
PostPosted: Mon Jul 13, 2015 7:24 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1625
Pathoswithin wrote:
Quote:
Самостоятельно вывести в буфер так, как ей надо. Это не настолько сложный процесс, чтобы дёргать ради него ядро. Будет быстрее.
Стоп, ещё раз. Программа хочет вывести строку текста так, чтобы она по длине переливалась из одного цвета в другой, системными шрифтами, которые имеют недокументированную структуру и вшиты в ядро. Поэтапно, как она будет это делать?
В чём проблема? Формат совершенно тривиальный, никто не мешает скопировать себе char.mt или char2.mt и вообще не связываться с ядром.
Pathoswithin wrote:
Quote:
Откуда буфер возьмёшь? Ядерный стек потока не резиновый
При чём здесь стек? kernel_alloc для всей строки, не? Мне ж его другой функции скармливать.

kernel_alloc - не самая быстрая функция, дёргать её на каждую строчку чревато просадкой в скорости. Количество областей памяти, выделяемых kernel_alloc, довольно ограничено, что-то порядка 4096. Дёргать kernel_alloc, оперирующую страницами, ради 216 байт, расточительно.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Mon Jul 13, 2015 8:57 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1274
Quote:
В чём проблема? Формат совершенно тривиальный, никто не мешает скопировать себе char.mt или char2.mt и вообще не связываться с ядром.
А, ну правильно, зачем нам вообще ядро? Программа вполне в состоянии всё делать самостоятельно, рисовать окно и кнопки, отслеживать клавиатуру и мышь. Ну разве что спрашивать, кому принадлежит точка экрана, и то могут друг с другом общаться: "Не твоя точка, не? И не твоя? Ну я нарисую, вы не против?". А ядро не трогать, оно по статусу имеет право ничего не делать.
Кстати, TinyPad близок к этому идеалу. Правда, там говна больше чем кода... в отличии от TextEdit.
Quote:
Дёргать kernel_alloc, оперирующую страницами, ради 216 байт, расточительно.
216 байт это только один символ, и то при х8 уже понадобится 4 страницы.


Top
   
PostPosted: Tue Jul 14, 2015 3:10 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1625
Pathoswithin wrote:
Quote:
В чём проблема? Формат совершенно тривиальный, никто не мешает скопировать себе char.mt или char2.mt и вообще не связываться с ядром.
А, ну правильно, зачем нам вообще ядро? Программа вполне в состоянии всё делать самостоятельно, рисовать окно и кнопки, отслеживать клавиатуру и мышь. Ну разве что спрашивать, кому принадлежит точка экрана, и то могут друг с другом общаться: "Не твоя точка, не? И не твоя? Ну я нарисую, вы не против?". А ядро не трогать, оно по статусу имеет право ничего не делать.
Программа не может отслеживать клавиатуру и мышь, потому что программа не одна в системе, а клавиатура и мышь - общие устройства. Более того, доступ к железу - привилегированная операция, и десктопная система - а я пишу десктопную систему - не может давать прямой доступ к железу кому попало, здесь ядро нужно.

Разделение экрана прямо в таком виде нежизнеспособно - программа сама не знает, какие части её окна видимы, другая программа может просто висеть, переключение контекста между программами ещё медленнее, чем вызов ядра, - но отрисовка в user-mode без участия ядра в принципе возможна. При условии, что а) информация о карте окон в том или ином виде хранится где-то в расшаренной памяти, б) отрисовкой занимается общая библиотека, умеющая читать информацию из пункта а и не писать куда не просят, в) мы доверяем всем программам, что они не будут рисовать текст "ваша система заблокирована, отправьте смс на номер 1234" поверх всех остальных окон в обход библиотеки из пункта б - пункт в был бы важнее, если бы фреймбуфер не был и так открыт на запись всему миру - и, главное, г) кто-то перепишет всю-всю-всю графическую подсистему и все-все-все графические программы на такую схему.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Tue Jul 14, 2015 3:38 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
б+) все программы честно используют read-write блокировку карты окон. И не забывают освобождать блокировку в конце отрисовки.


Top
   
PostPosted: Tue Jul 14, 2015 6:36 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1274
Attachment:
jesus.PNG
jesus.PNG [ 26.57 KiB | Viewed 3215 times ]
Понял, шутить здесь бесполезно...


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 44 posts ]  Go to page Previous 1 2 3

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 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