Функции рисования 2d графики (библиотеки vectors и buf2d)

Discussing libraries simplifying applications development
  • Заметил, что все программы использующие функцию рисующую кривую Безье из библиотеки не работают. А в эмуляторе KlbrInWin все функции работают. Что означает ошибка:
    Page fault - Недостаток страницы
  • Возможно указатель вышел за пределы выделенного участка памяти.
  • У меня всё кроме самолёта не работает.
  • Атауальпа wrote:У меня всё кроме самолёта не работает
    Так и есть, дело в том что там пока не используются функции рисования Безье.
    Недавно вычислил "глючное" место. Оказалось, что первая точка по координате Y имеет очень большое значение. Потому как сказал Mario, программа вылазила на чужую память. В эмуляторе этого глюка не заметно, т. к. WinAPI функции при неправильных координатах не вылетают (что с одной стороны хорошо, а с другой плохо: нельзя отлаживать программы если не видно глюков, тормозится рисование).
    В общем проверял несколько раз алгоритм, и устранил глюк добавлением в функцию всего 1-й строки кода:

    Code: Select all

    finit
    :o
    Attachments
    vectors.obj (2.73 KiB)
    с этим файлом работает
    Downloaded 254 times
  • Теперь работает, но со странным глюком.
    Когда запущены часы или самолёт, во всех других приложениях не работают клавиатура и мышь! Я не могу ничего сделать ни с каким другим окном, пока не закрою демку. По клавише Win запускается меню, но ни один из его пунктов ничего не запускает ни мышью, ни клавиатурой.
  • немного обновил библиотеку:
    1) работает масштабирование контуров (раньше масштаб всегда был = 1.0, даже если на входе подавалось другое число)
    2) добавил функцию вывода векторного шрифта (в своем формате, хотелось-бы сделать поддержку стандартных, но до этого пока наверное очень далеко)
    ---
    В примерах самолет и часы пока не нашел как устранить проблемы связанные с таймером.
    В общем изменений не много.
    Attachments
    vectors_090915.7z (12.21 KiB)
    Downloaded 262 times
  • версия 17.09.09:
    1) вызов функции vect_conv_cont делается перед прорисовкой контуров автоматически (это упрощает написание программ)
    2) изменен способ задания размера текста, и сама функция вывода текста доработана (символ 13 работает как перевод строки)
    из недостатков:
    1) пока шрифт не в отдельном файле
    2) в шрифте есть не все символы
    Attachments
    vectors_090917.7z (13.97 KiB)
    Downloaded 245 times
  • Самолет убил систему запущенную под Qemu. Я думал, что такое невозможно. :mrgreen:

    Итак ошибки:
    1) samolot.asm

    Code: Select all

    draw_window:
      push eax ebx ecx edx
      mcall 12,1
    
      xor eax,eax
      mov ebx,50*65536+320
      mov ecx,30*65536+250
      mov edx,0
      or  edx,0x33000000
      mov edi,hed
      mcall
    
      mov eax,4 ;рисование текста
      mov ebx,5*65536+5
      mov ecx,0xffff00
      or  ecx,0x80000000
      mov edx,txtInfo
      mcall
    
      call draw_objects
    
      mcall 12,1
      pop edx ecx ebx eax
      ret
    
    2) clock.asm

    Code: Select all

    draw_window:
      push eax ebx ecx edx
      mcall 12,1
    
      xor eax,eax
      mov ebx,50*65536+320
      mov ecx,30*65536+250
      mov edx,0+0x33000000
      mov edi,hed
      mcall
    
      mov eax,4 ;рисование текста
      mov ebx,5*65536+5
      mov ecx,0xffff00
      or  ecx,0x80000000
      mov edx,txtInfo
      mcall
    
      call draw_objects
    
      mcall 12,1
      pop edx ecx ebx eax
      ret
    
    Вопрос на засыпку кто видит ошибки? Я вижу, но не скажу.

    Как там было на bash.org.ru:
    xxx: Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
  • Mario79 wrote:Как там было на bash.org.ru:
    xxx: Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
    Распространённый-то он распространённый, но это не влияет на тот факт, что этот способ не работает (неоднократно проверял... пришлось писать отладчик).
    P.S. Да, а копипастить при программировании вообще не стоит. Хотя в данном случае скорее имеет место быть банальная опечатка.
    Ушёл к умным, знающим и культурным людям.
  • Видим и намекнем. :) Незачем программам по 2 окна.
  • кажись я понял в чем юмор:
    1)

    Code: Select all

    push eax ebx ecx edx ;в начале функции
    ...
    mov edi,hed ;в нутри функции, хотя edi не в стеке
    
    2)

    Code: Select all

    mcall 12,1 ;в начале
    ...
    mcall 12,1 ;в конце, должно быть mcall 12,2
  • первое не критично, если по ходу программы ты в edi не хранишь нечто важное, хотя в твоем варианте, наверное проще написать pushad/popad
  • Исправил ошибки в примерах, немного изменил 2 функции в библиотеке. Самое главное перенес данные по шрифту в отдельный файл. Теперь можно создавать файлы шрифтов, не сидящие внутри kex файла.
    Если разобрать формат ttf, то думаю можно сделать прогрмму для конвертирования этих файлов, в таком случае не нужно будет создавать свои шрифты с 0 (тем более что я так до конца не заполнил все символы).
    Attachments
    vectors_090919.7z (15.48 KiB)
    Downloaded 252 times
  • Пример с отображением шрифта не очень удачный т.к. при непосредственном выводе без буферизации в ОЗУ глифов медленно. Конечно, лучше разобраться с существующими форматами шрифтов (хотя бы одним). У меня нет достаточно времени, что бы этим заняться...
  • Who is online

    Users browsing this forum: No registered users and 8 guests