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

Discussing libraries simplifying applications development
  • Есть исходники по работе со шрифтами TrueType на языках Pascal и C++. Если кому-то надо, то могу поделиться.
  • Asper
    Если можно давай в ЛС.
  • Баг с таймером в новой версии не наблюдаю.
    Самолёт стал рисоваться немного лучше, но всё равно создаётся впечатление, что он машет крыльями.))
    Как запустить Font.kex, я не понял. Он не запускается.
  • Атауальпа wrote:Как запустить Font.kex, я не понял. Он не запускается.
    в папке где лежит font.kex должны лежать 2 файла fnt_1.vfo (файл шрифта) и vectors.obj (последняя версия от 19-го сентября).
    При открытии (у меня) выводится окно, показанное на картинке. В Win перерисовка символов идет медленно (заметно мерцание), в самой Kolibri рисует быстро (мерцания почти не видно).
    Много символов не рисуются, это потому что файл fnt_1.vfo нужно дополнять остальными символами (а времени на него нет, хотелось-бы в свободное время по возможности разобрать стандартные ttf).
  • Я скопировал оба файла по назначению, но всё равно не запускается... Может, что-то ещё надо сделать?
    И ещё, хорошо бы исходники и бинарники разложить по разным папкам, а в корень архива положить ридми с описанием установки.
  • Атауальпа
    Только что запустил под эмулятором Diamond'а и Qemu, с запущеной Колибри, в обоих случаях работает.
    Ты бы хоть написал следующие данные:
    1) Где запускаешь.
    2) Что пишет на доске отладки.

    Возможно у тебя в /sys/lib/ лежит предыдущая версия библиотеки, а при использовании макроса sys_load_library (обязательно читаем руководство написанное <Lrz>):
    Разница между этими двумя макросами только в порядке проверки пути к библиотеке.
    sys_load_library – в первую очередь проверяется значение указанное в system_path, т.е. на
    этом месте где находится system_path должен быть помещен адрес записи.
    ИМХО надо было использовать макрос load_library
  • Доработал рисующие функции, если задать координаты меньше 0 то раньше глючило, сейчас работает.
    Атауальпа wrote:создаётся впечатление, что он машет крыльями.))
    Сделал еще 1 пример с округляемыми координатами, в нем не машет, но кода больше.
    Attachments
    Downloaded 380 times
  • 03.10.09 - ускорен вывод комбинированых полигонов, за счет оптимизации вызовов функций (оказалось, что некоторые функции вызывались несколько раз подряд, что тормозило прорисовку)
    Mario wrote:Еще идея вдогонку - сделать готовые шаблоны. Например, пример со стрелками уже подходит для чертежей навроде AutoCAD.
    Добавлен 1 пример (bug.kex), из которого можно будет сделать шаблон, наподобие как в Ворде галерея клипов.
    Attachments
    vectors_091003.7z (20.17 KiB)
    Downloaded 383 times
  • IgorA
    ускорен вывод комбинированых полигонов
    Примера шрифтов это тоже коснулось? Просто на вскидку быстрее стало отрисовывать.
    Добавлен 1 пример (bug.kex), из которого можно будет сделать шаблон
    Это конечно замечательно, но почему бы не сделать масштабирование в размеры окна или регулировку как в примере шрифтов. Если это векторные изображения, то первейшее их отличие от растровых - масштабирование без существенной потери качества. И еще с заливкой похоже совсем туго?
  • Причина всех тормозов в способе рисования примитивов - это по точечное рисование напрямую на экране при помощи системной функции 1.
    В идеале надо сделать универсальную функцию рисования точки. Которая могла бы рисовать как в буфере так и на экране(у меня в библиотеке так). Отвести для флага вывода рисования некоторую переменную. Если, например, она ноль, то рисуется в буфере, если 1 то на экране. Просто при реализации заливки областей(в особенности градиентной заливки) или сглаживании шрифтов, рисование напрямую на экране - это самоубийство. Векторные изображения могут содержать сотни объектов с различными видами заливок и прозрачностей, поэтому без буфера никак не обойтись.
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • Отвести для флага вывода рисования некоторую переменную. Если, например, она ноль, то рисуется в буфере, если 1 то на экране.
    зачем? проще если в переменной есть параметры буфера (адрес/ширина/высота/число бит на пиксель) то рисовать в буфер, если вместо этого там нулик - рисовать на экран. Впрочем, техническая реализация не важна)
  • проще если в переменной есть параметры буфера (адрес/ширина/высота/число бит на пиксель) то рисовать в буфер, если вместо этого там нулик - рисовать на экран.
    Это уже не переменная, а тип данных "структура" с минимальным размером(для этого случая) 4+2+2+1=9 байт. У меня все эти данные хранятся в структуре + переменная-флаг указывающая куда рисовать(на экран или в буфер).
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • ну я руководствовался определением переменной как именованной области памяти, в данном случае 9 байт, что-то типа

    Code: Select all

    peremennaya rb 9
    а в каком виде данные внутри нея представлены - другой вопрос
    Впрочем, это уже оффтоп =)
  • Mario wrote:Примера шрифтов это тоже коснулось? Просто на вскидку быстрее стало отрисовывать.
    Да, коснулось всех фигур где рисуются кривые Безье. Просто раньше был многократный вызов последних кривых. Например если было несколько контуров (Безье), то рисовалось так:
    • 1234
      234
      34
      4
    Под цифрами имею ввиду любой набор точек для рисования кривой. Заметил это когда не совпадали цвета пересекающихся кривых и оно мигать начало. Тогда и понял что лишний раз в цикле вызов идет. Достаточно 1 раз вызвать и все:
    • 1234
    Mario wrote:но почему бы не сделать масштабирование в размеры окна или регулировку как в примере шрифтов. Если это векторные изображения, то первейшее их отличие от растровых - масштабирование без существенной потери качества
    стрелки курсоров Вверх и Вниз меняют масштаб, хотя я не сделал поворот картинки стрелками Влево и Вправо и подписи на экране нет. Хотелось еще сделать саму картинку в отдельный файл, а в программе загрузку картинки, по указанному пути.
    Mario wrote:И еще с заливкой похоже совсем туго?
    Пока да, нужно запрограммировать сам алгоритм заливки, и желательно делать ее в буфере, чтобы не тормозило на экране.
    andrew_programmer wrote:В идеале надо сделать универсальную функцию рисования точки. Которая могла бы рисовать как в буфере так и на экране(у меня в библиотеке так).
    ты имееш ввиду libGUI ? В каком файле код ?
  • Who is online

    Users browsing this forum: No registered users and 4 guests