Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Чт сен 21, 2017 3:15 pm

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




Начать новую тему  Ответить на тему  [ 44 сообщения ]  На страницу Пред. 1 2 3 След.
Автор Сообщение
СообщениеДобавлено: Сб июл 04, 2015 3:03 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пт авг 14, 2009 1:46 am
Сообщения: 1291
Pathoswithin писал(а):
Я смотрю, вывод осуществляется через вызов putpixel... "Это конечно круто".

Это конечно очень коряво.
Много неглупых людей пытались это как-то исправить.
Но пока что без особого успеха.
Потому что так или иначе надо проверять принадлежность каждого пикселя неперекрытому окну.
Ядро это делает через стандартную проверку внутри putpixel.
Разумеется, приложение может вдувать всё во фреймбуфер, но при этом есть риск нагадить в соседние окна.


Вернуться к началу
СообщениеДобавлено: Сб июл 04, 2015 3:23 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1174
А в каком случае текст может выводится в неактивное окно?


Вернуться к началу
СообщениеДобавлено: Сб июл 04, 2015 8:12 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пт авг 14, 2009 1:46 am
Сообщения: 1291
Pathoswithin
в любом.
Колибри - многозадачная ОС, и любой процесс в принципе может осуществлять вывод в свое окно даже если оно неактивно и частично перекрыто другими окнами.
Ядро следит за GUI-операциями и блокирует putpixel в перекрытые регионы.


Вернуться к началу
СообщениеДобавлено: Вт июл 07, 2015 9:57 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1598
Pathoswithin писал(а):
Второй вопрос до сих пор без ответа.
Ты же сам ответил: функция 4 в API ядра, внутре у ей putpixel.

Pathoswithin писал(а):
Как мне добавить к четвёртой функции параметр "размер шрифта"? В есх есть 3 свободных бита, можно передавать множитель, будет до х8. Хотя это не перспективно, лучше передавать размер в пикселях...
Заведи новую сисфункцию. Всё равно приложения без изменений не поймут нововведений.

Pathoswithin писал(а):
Я смотрю, вывод осуществляется через вызов putpixel... "Это конечно круто". Есть прямой доступ к видеопамяти или что-то вроде DirectDraw?
Нельзя писать в видеобуфер напрямую. Приложение не одно в системе.

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


Вернуться к началу
СообщениеДобавлено: Вт июл 07, 2015 10:52 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1174
CleverMouse писал(а):
Заведи новую сисфункцию. Всё равно приложения без изменений не поймут нововведений.
И мне придётся вручную изменения вносить. 4 функция вполне нормальная, использовать 3 бита в есх проще всего, если можно.
CleverMouse писал(а):
Нельзя писать в видеобуфер напрямую. Приложение не одно в системе.
Но и putpixel использовать не обязательно. Давайте решать, как лучше. Вроде art_zh в своём шрифте вручную сделал проверку углов.


Вернуться к началу
СообщениеДобавлено: Ср июл 08, 2015 12:40 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1174
Для начала и без проверки ничего ужасного не случится. Я уже начал экспериментировать с новым подходом, но система перезагружается сразу после синего экрана, и похоже я чего-то не знаю. Посмотрите, там всего 60 строк.


Вложения:
font.inc [2.45 КБ]
39 скачиваний
Вернуться к началу
СообщениеДобавлено: Ср июл 08, 2015 9:06 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Пт июн 30, 2006 9:01 am
Сообщения: 1223
Have you tried running your code in BOCHS or VirtualBox with debugger enabled? :)

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Вернуться к началу
СообщениеДобавлено: Ср июл 08, 2015 1:20 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1174
hidnplayr No... :) Usually I found errors manually. Especially in 60 lines. If I dont see any, probably I dont know something. In that case, art_zh, Serge or CleverMouse should find the problem easily.


Вернуться к началу
СообщениеДобавлено: Ср июл 08, 2015 2:13 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Пт июн 30, 2006 9:01 am
Сообщения: 1223
Pathoswithin Your laziness in fault seeking disapoints me.
Perhaps this will get you going again:

Цитата:
dtext
edx=80035E8B esi=80035E8B edi=00000001
ebx=000A000A ecx=80FFFFFF
.userarea


Also, be sure to read the documentation of the system function again.

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Вернуться к началу
СообщениеДобавлено: Ср июл 08, 2015 3:14 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1174
edi=00000001 :?:
kernel.asm, syscall_writetext:
Код:
   mov   eax, edi
   test  ecx, 0x08000000  ; redirect the output to the user area
   jnz   dtext
   xor   edi, edi
   jmp   dtext


Вернуться к началу
СообщениеДобавлено: Ср июл 08, 2015 3:22 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1174
Ага
Код:
; edi 1 force or user area for redirect
"1 force" это конечно исчерпывающее описание.


Вернуться к началу
СообщениеДобавлено: Ср июл 08, 2015 3:39 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Пт июн 30, 2006 9:01 am
Сообщения: 1223
Код:
boot_log:
        pushad

        mov     ebx, 10*65536
        mov     bx, word [boot_y]
        add     [boot_y], dword 10
        mov     ecx, 0x80ffffff; ASCIIZ string with white color
        xor     edi, edi
        mov     edx, esi
        inc     edi
        call    dtext

        mov     [novesachecksum], 1000
        call    checkVga_N13

        popad

        ret

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Вернуться к началу
СообщениеДобавлено: Ср июл 08, 2015 4:04 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Пт июн 30, 2006 9:01 am
Сообщения: 1223
This edi=1 stuff looks like the remains of something old that is probably no longer needed.
The first problem with your code is that you test if edi is 0, instead of testing the correct bit in another register, as mentioned in syscalls.txt

edit: Sorry, it seems this binary flag is detected in syscall_writetext and from there on, another interface is used, did not notice...

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Вернуться к началу
СообщениеДобавлено: Чт июл 09, 2015 6:13 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1174
Сделал проверку углов, теперь надо с курсором разобраться. Как вообще работает программный курсор?


Вернуться к началу
СообщениеДобавлено: Чт июл 09, 2015 9:10 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1598
Pathoswithin писал(а):
CleverMouse писал(а):
Заведи новую сисфункцию. Всё равно приложения без изменений не поймут нововведений.
И мне придётся вручную изменения вносить. 4 функция вполне нормальная, использовать 3 бита в есх проще всего, если можно.
Так в любом случае придётся.

Pathoswithin писал(а):
CleverMouse писал(а):
Нельзя писать в видеобуфер напрямую. Приложение не одно в системе.
Но и putpixel использовать не обязательно. Давайте решать, как лучше. Вроде art_zh в своём шрифте вручную сделал проверку углов.

Зачем? Ты собираешься выводить на экран миллионы символов в секунду?

Проверка углов будет давать видимые артефакты - при перекрытии окна другим части символов, которые должны быть видимы, исчезнут. А если приложение рассчитывает ещё и на заливку фоном, которую ты так тоже отключишь для области рядом с перекрывающим окном, могут получаться совсем странные эффекты.

Для ускорения проверки перекрытий нужно переходить с буфера win_map на обрамляющие прямоугольники, чтобы не проверять каждый пиксель, а сразу понять, что рисовать можно в таких-то пределах. Но это чрезвычайно трудоёмкая задача, mike.dld в своё время пытался - http://websvn.kolibrios.org/listing.php ... de1b3d298f - но не осилил.

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


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

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


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

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


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

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