Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Ср окт 17, 2018 11:47 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 50 сообщений ]  На страницу Пред. 1 2 3 4 След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 27, 2007 7:53 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3951
Serial

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


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


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 27, 2007 2:07 pm 
В сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4774
Ещё можно немного оффтоповский вопрос.

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

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


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 27, 2007 4:08 pm 
Leency
Это будет играть роль лишь, если перерисовываемая область существенно меньше, чем само окно, в противном случае разница будет заметна лишь на очень слабых компьютерах.


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 27, 2007 5:48 pm 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 27, 2007 5:51 pm 
В сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4774
Heavyiron уловил мою мысль.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 27, 2007 6:57 pm 
Leency писал(а):
Можно ли сделать чтоб перерисовывалась только клиентская облать окна (без заголовка)?

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

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


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Пн апр 23, 2007 7:48 pm 
Не в сети
Аватара пользователя

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


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


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Вт апр 24, 2007 11:24 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3951
Heavyiron
Код проверки отсечения курсора не менялся. А активноая точка задаёт смещение рисунка курсора влевво и вверх относительно текущих координат мыши.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 21, 2007 10:04 am 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 24, 2007 2:06 pm 
Не в сети
Kernel Developer
Аватара пользователя

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


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 24, 2007 3:08 pm 
Не в сети

Зарегистрирован: Вс мар 11, 2007 4:05 pm
Сообщения: 64
Дело в том что, если проверять каждую точку то теряется скорость. отрисовки
Я думаю, нужно отдать функцию рисования курсора, приложению. Вот пусть он и проверяет отсечение.

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


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 24, 2007 8:14 pm 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 24, 2007 8:40 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт май 18, 2007 11:11 pm
Сообщения: 125
Pavia
Цитата:
Я думаю, нужно отдать функцию рисования курсора, приложению. Вот пусть он и проверяет отсечение.

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

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


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

Часовой пояс: UTC+03:00


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

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


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB