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 Next
Author Message
PostPosted: Sat Jul 04, 2015 3:03 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1441
Pathoswithin wrote:
Я смотрю, вывод осуществляется через вызов putpixel... "Это конечно круто".

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


Top
   
PostPosted: Sat Jul 04, 2015 3:23 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1274
А в каком случае текст может выводится в неактивное окно?


Top
   
PostPosted: Sat Jul 04, 2015 8:12 pm 
Offline
Kernel Developer
User avatar

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


Top
   
PostPosted: Tue Jul 07, 2015 9:57 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1625
Pathoswithin wrote:
Второй вопрос до сих пор без ответа.
Ты же сам ответил: функция 4 в API ядра, внутре у ей putpixel.

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

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

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


Top
   
PostPosted: Tue Jul 07, 2015 10:52 pm 
Offline
Mentor/Kernel Developer
User avatar

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


Top
   
PostPosted: Wed Jul 08, 2015 12:40 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1274
Для начала и без проверки ничего ужасного не случится. Я уже начал экспериментировать с новым подходом, но система перезагружается сразу после синего экрана, и похоже я чего-то не знаю. Посмотрите, там всего 60 строк.


Attachments:
font.inc [2.45 KiB]
Downloaded 115 times
Top
   
PostPosted: Wed Jul 08, 2015 9:06 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Fri Jun 30, 2006 9:01 am
Posts: 1279
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


Top
   
PostPosted: Wed Jul 08, 2015 1:20 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1274
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.


Top
   
PostPosted: Wed Jul 08, 2015 2:13 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Fri Jun 30, 2006 9:01 am
Posts: 1279
Pathoswithin Your laziness in fault seeking disapoints me.
Perhaps this will get you going again:

Quote:
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


Top
   
PostPosted: Wed Jul 08, 2015 3:14 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1274
edi=00000001 :?:
kernel.asm, syscall_writetext:
Code:
   mov   eax, edi
   test  ecx, 0x08000000  ; redirect the output to the user area
   jnz   dtext
   xor   edi, edi
   jmp   dtext


Top
   
PostPosted: Wed Jul 08, 2015 3:22 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1274
Ага
Code:
; edi 1 force or user area for redirect
"1 force" это конечно исчерпывающее описание.


Top
   
PostPosted: Wed Jul 08, 2015 3:39 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Fri Jun 30, 2006 9:01 am
Posts: 1279
Code:
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


Top
   
PostPosted: Wed Jul 08, 2015 4:04 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Fri Jun 30, 2006 9:01 am
Posts: 1279
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


Top
   
PostPosted: Thu Jul 09, 2015 6:13 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1274
Сделал проверку углов, теперь надо с курсором разобраться. Как вообще работает программный курсор?


Top
   
PostPosted: Thu Jul 09, 2015 9:10 pm 
Offline
Kernel Developer
User avatar

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

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

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

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

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

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 44 posts ]  Go to page Previous 1 2 3 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