Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Jun 04, 2020 10:49 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 50 posts ]  Go to page Previous 1 2 3 4 Next
Author Message
 Post subject:
PostPosted: Tue Mar 27, 2007 7:53 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Serial

Если ты про NV то таи довольно мутный код. Прежде чем работать с картой идёт большая настройка. Наверное методом тыка можно найти работающий вариант но никто пробовал.


Top
   
 Post subject:
PostPosted: Tue Mar 27, 2007 8:01 am 
Пробовал, только так и не добился, чтобы вообще хоть какой-то курсор показался :) http://mikedld.com/f/nvidia_driver.7z (исходники где-то есть, как и для ATI драйвера когда-то писавшегося)


Top
   
 Post subject:
PostPosted: Tue Mar 27, 2007 2:07 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5278
Ещё можно немного оффтоповский вопрос.

Во время работы програм, особенно это видно в играх и 3-д демках, окно перерисовывается полностью и потому курсор магает. Иногда очень сильно.

Можно ли сделать чтоб перерисовывалась только клиентская облать окна (без заголовка)?


Top
   
 Post subject:
PostPosted: Tue Mar 27, 2007 4:08 pm 
Leency
Это будет играть роль лишь, если перерисовываемая область существенно меньше, чем само окно, в противном случае разница будет заметна лишь на очень слабых компьютерах.


Top
   
 Post subject:
PostPosted: Tue Mar 27, 2007 5:48 pm 
Offline
User avatar

Joined: Fri Jan 27, 2006 3:06 pm
Posts: 1072
В этом случае, при наведении курсора на заголовок, он, возможно, не будет исчезать, а теперь же закрывать активно рисующие программы приходится почти на ощупь - курсор появляется на тысячные доли секунды...


Top
   
 Post subject:
PostPosted: Tue Mar 27, 2007 5:51 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5278
Heavyiron уловил мою мысль.


Top
   
 Post subject:
PostPosted: Tue Mar 27, 2007 6:57 pm 
Leency wrote:
Можно ли сделать чтоб перерисовывалась только клиентская облать окна (без заголовка)?

Хм, программе самой решать, перерисовывать всё окно или только клиентскую часть. На это влияют используемые системные вызовы. Например, функция 0 должна (в идеале) использоваться только когда программе приходит сообщение о перерисовке (#1). Именно при вызове функции 0 и перерисовываются заголовок и рамка окна. В противном случае, если эту функцию лишний раз не вызывать, рамка и заголовок *никем более* перерисовываться не могут, кроме опять же самой программы.
Вобщем, проблема именно программы. Ядро не при чём. Оно не посылает сообщения #1, покуда в этом действительно не возникнет необходимости (перемещение окна, изменение его видимой области).

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


Top
   
 Post subject:
PostPosted: Mon Apr 23, 2007 7:48 pm 
Offline
User avatar

Joined: Fri Jan 27, 2006 3:06 pm
Posts: 1072
Сегодня поэксперементировал с курсором. Проблема несколько в другом... Размер курсора - 32х32, активная точка - 0,0. При этом рисунок курсора занимает не все 32 пиксела. Но перерисовка всего курсора происходит, если отрисовка примитива происходит даже в районе незадействованных пикселов. Поэтому курсор исчезает, когда его рисунок на заголовке, а незадействованные пикселы попадают уже в клиентскую область окна, где происходит активное рисование чего-нибудь.
Попробовал ход конем: сместил рисунок курсора в нижнюю часть, не изменяя положение активной точки. Исчезновения пректатились, но попасть таким курсором куда-нибудь непросто :). Тогда я передвинул активную точку. Курсор опять стал исчезать при наведении на заголовок :(. Такое впечатление, что ядро отсчитывает по 32 пиксела для курсора вниз и вправо, начиная с активной точки...


Top
   
 Post subject:
PostPosted: Tue Apr 24, 2007 7:34 am 
Heavyiron
Давно требуется переписать алгоритм вывода курсора, и кое-кто обещал это сделать, года этак 3 назад.
Конечно, воевать на форуме куда приятней, чем заниматься делом. :-(


Top
   
 Post subject:
PostPosted: Tue Apr 24, 2007 11:24 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Heavyiron
Код проверки отсечения курсора не менялся. А активноая точка задаёт смещение рисунка курсора влевво и вверх относительно текущих координат мыши.


Top
   
 Post subject:
PostPosted: Sat Jul 21, 2007 10:04 am 
Offline
User avatar

Joined: Fri May 18, 2007 11:11 pm
Posts: 125
Самое значительное мерцание вызывается функцией 4 - вывод текста. В начале вывода ставится 'call [disable_mouse]' (и так вродебы во всех примитвах), т.е. курсор исчезает на все время исполнения примитива а не на прорисовке отдельной точки примитива. Если в обработке прерывания от мыши выводится текстовая информация, никакие частичные перерисовки окна не спасут. При отрисовке точки функцией 1, время вывода примитива на порядок меньше, соответственно мерцание малозаметно.
Напрашивается два вывода для борьбы с мерцанием:
1 - В примитивах ядра проверять на отсечение курсора каждую выводимую точку а не весь примитив скопом.
2 - Дополнительно добавить в функции ядра возможность вывода примитивов без отсечения курсора (особенно для функции 4), т.е. позволить программам делать отсечение самостоятельно, в этом случае частичные перерисовки окна окажутся вполне эффективными.


Top
   
 Post subject:
PostPosted: Tue Jul 24, 2007 2:06 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
Alver
Вообще-то напрашивается нулевой вариант - переписать GUI-функции так, чтобы они проверяли, не находится ли текущая точка под курсором и если находится, то записывать её не на экран, а в буфер, сохраняющий информацию о пикселах под курсором. Именно так я понимаю слова "Давно требуется переписать алгоритм вывода курсора".


Top
   
 Post subject:
PostPosted: Tue Jul 24, 2007 3:08 pm 
Offline

Joined: Sun Mar 11, 2007 4:05 pm
Posts: 64
Дело в том что, если проверять каждую точку то теряется скорость. отрисовки
Я думаю, нужно отдать функцию рисования курсора, приложению. Вот пусть он и проверяет отсечение.

Есть и другой путь. Вывод осуществляется во временную область, а после копировать на экран. Но тут нужно делать только частичную перерисовку.


Top
   
 Post subject:
PostPosted: Tue Jul 24, 2007 8:14 pm 
Offline
User avatar

Joined: Fri May 18, 2007 11:11 pm
Posts: 125
diamond
Нормальный вариант. :D Кстати я там (в ядре) видел подпрограмму 'checkpixel", которая вызывается при прорисовке точек (соответственно линий и символов), она юзает буфер 'display_data' где определяется принадлежность точки процессу, к сожалению все биты заняты под номер процесса,:(
что если увеличить размер данных точки до 2 байт и выделить бит на принадлежность точки курсору (для облегчения проверки), или не изменять буфер но для точек курсора использовать фиксированный номер процесса (номер процесса ядра например).:wink:
Однако я не вьезжаю как осуществляется проверка при выводе рисунков и боксов, используется ли там "display_data", я так понял что там рисуется напрямую последовательностями байтов а не точками, или я ошибся? :roll:


Top
   
 Post subject:
PostPosted: Tue Jul 24, 2007 8:40 pm 
Offline
User avatar

Joined: Fri May 18, 2007 11:11 pm
Posts: 125
Pavia
Quote:
Я думаю, нужно отдать функцию рисования курсора, приложению. Вот пусть он и проверяет отсечение.

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

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


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

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