Вопросы по устройству графической подсистемы.

Kernel-side graphics support
  • это номер слота активного потока.
  • Serge wrote:это номер слота активного потока.
    это сам CURRENT_TASK
    а сдвиг для чего?
  • в структуре window_data на каждый слот отводится 32 байта.
    сдвиг влево на 5 - это фактически умножение номера слота на 32.
    Евангелие от Иоанна: стих 1

    Code: Select all

    ; В начале было Слово:
    B32:        mov     ax, os_stack       ; Selector for os
    [/size]
  • art_zh wrote:в структуре window_data на каждый слот отводится 32 байта.
    сдвиг влево на 5 - это фактически умножение номера слота на 32.
    art_zh, Serge спасибо, теперь дошло!
  • Я правильно понимаю, что при изменении положения окна, не происходит полной перерисовки буфера , начиная от фона и заканчивая верхним активным окном, а просто происходит перерисока того участка который подвергся изменению? Если так, то откуда окно берет данные, которые оно перекрывало, чтобы восстановить их? Из [_WinMapAddress] ???
  • Akyltist wrote:Я правильно понимаю, что при изменении положения окна, не происходит полной перерисовки буфера , начиная от фона и заканчивая верхним активным окном, а просто происходит перерисока того участка который подвергся изменению? Если так, то откуда окно берет данные, которые оно перекрывало, чтобы восстановить их? Из [_WinMapAddress] ???
    Сначала пересчитывается буфер перекрытия окон, а код перерисовки фона выводит тот участок, который надо восстановить. Всем процессам, окна которых попали хотя бы одним пикселем в активную зону отправляется событие перерисовки, которое обычно обрабатывает код главного цикла приложения.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4 wrote:
    Akyltist wrote:Я правильно понимаю, что при изменении положения окна, не происходит полной перерисовки буфера , начиная от фона и заканчивая верхним активным окном, а просто происходит перерисока того участка который подвергся изменению? Если так, то откуда окно берет данные, которые оно перекрывало, чтобы восстановить их? Из [_WinMapAddress] ???
    Сначала пересчитывается буфер перекрытия окон, а код перерисовки фона выводит тот участок, который надо восстановить. Всем процессам, окна которых попали хотя бы одним пикселем в активную зону отправляется событие перерисовки, которое обычно обрабатывает код главного цикла приложения.
    системный фон по тому же принципу?
  • Akyltist wrote:
    Mario_r4 wrote:
    Akyltist wrote:Я правильно понимаю, что при изменении положения окна, не происходит полной перерисовки буфера , начиная от фона и заканчивая верхним активным окном, а просто происходит перерисока того участка который подвергся изменению? Если так, то откуда окно берет данные, которые оно перекрывало, чтобы восстановить их? Из [_WinMapAddress] ???
    Сначала пересчитывается буфер перекрытия окон, а код перерисовки фона выводит тот участок, который надо восстановить. Всем процессам, окна которых попали хотя бы одним пикселем в активную зону отправляется событие перерисовки, которое обычно обрабатывает код главного цикла приложения.
    системный фон по тому же принципу?
    Есть только одни фон - фон рабочего стола.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4 wrote:Есть только одни фон - фон рабочего стола.
    который тоже перерисовывается полностью если его коснулись изменения?
  • Akyltist wrote:
    Mario_r4 wrote:Есть только одни фон - фон рабочего стола.
    который тоже перерисовывается полностью если его коснулись изменения?
    Нет, я же написал:
    а код перерисовки фона выводит тот участок, который надо восстановить
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4 спасибо!
  • Вопрос такой, можно ли срезать вот такой код:

    Code: Select all

    align 4
    ;------------------------------------------------------------------------------
    sys_button_activate_handler: ;/////////////////////////////////////////////////
    ;------------------------------------------------------------------------------
    ;? <description>
    ;------------------------------------------------------------------------------
    ;> eax = pack[8(process slot), 24(button id)]
    ;> ebx = pack[16(button x coord), 16(button y coord)]
    ;> cl = mouse button mask this system button was pressed with
    ;------------------------------------------------------------------------------
            call    button._.find_button
            or      eax, eax
            jz      .exit
    
            mov     ebx, dword[eax + SYS_BUTTON.id_hi - 2]
            call    button._.negative_button
    
      .exit:
            ret
    
    align 4
    ;------------------------------------------------------------------------------
    sys_button_deactivate_handler: ;///////////////////////////////////////////////
    ;------------------------------------------------------------------------------
    ;? <description>
    ;------------------------------------------------------------------------------
    ;> eax = pack[8(process slot), 24(button id)]
    ;> ebx = pack[16(button x coord), 16(button y coord)]
    ;> cl = mouse button mask this system button was pressed with
    ;------------------------------------------------------------------------------
            call    button._.find_button
            or      eax, eax
            jz      .exit
    
            mov     ebx, dword[eax + SYS_BUTTON.id_hi - 2]
            call    button._.negative_button
    
      .exit:
            ret
    До:

    Code: Select all

    align 4
    ;------------------------------------------------------------------------------
    sys_button_activate_handler: ;/////////////////////////////////////////////////
    ;------------------------------------------------------------------------------
    ;> eax = pack[8(process slot), 24(button id)]
    ;> ebx = pack[16(button x coord), 16(button y coord)]
    ;> cl = mouse button mask this system button was pressed with
    ;------------------------------------------------------------------------------
    
    align 4 ; тоже вроде ни к чему
    ;------------------------------------------------------------------------------
    sys_button_deactivate_handler: ;///////////////////////////////////////////////
    ;------------------------------------------------------------------------------
    ;? <description>
    ;------------------------------------------------------------------------------
    ;> eax = pack[8(process slot), 24(button id)]
    ;> ebx = pack[16(button x coord), 16(button y coord)]
    ;> cl = mouse button mask this system button was pressed with
    ;------------------------------------------------------------------------------
            call    button._.find_button
            or      eax, eax
            jz      .exit
    
            mov     ebx, dword[eax + SYS_BUTTON.id_hi - 2]
            call    button._.negative_button
    
      .exit:
            ret
    или не стоит?
    PS: код из (root)/kernel/trunk/gui/button.inc
  • Akyltist wrote:или не стоит?
    PS: код из (root)/kernel/trunk/gui/button.inc
    Не стоит. Рекомендую самому подумать почему не стоит, раз уж возникла идея такой копеечной оптимизации.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Who is online

    Users browsing this forum: No registered users and 5 guests