OberonCore
https://forum.oberoncore.ru/

Anti-Grain для Ports
https://forum.oberoncore.ru/viewtopic.php?f=23&t=3980
Страница 6 из 6

Автор:  Пётр Кушнир [ Вторник, 11 Март, 2014 21:53 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Интересно, вы сделали над AGG dll-обертку на другом языке программирования?

Автор:  Димыч [ Суббота, 15 Март, 2014 10:11 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Пётр Кушнир писал(а):
Интересно, вы сделали над AGG dll-обертку на другом языке программирования?

Я не понял вопрос.
Обертка написана на С++

Если говорить об AGG на других языках, то я рассматривал вопрос сделать порт на Lisp, но быстро отказался от этой затеи — мало опыта, плюс наличие библиотек, частично реализующих AGG.

Автор:  Пётр Кушнир [ Воскресенье, 16 Март, 2014 18:38 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Димыч писал(а):
Обертка написана на С++
Некошерно :) Зачем тогда КП, если писать придется на С++?

Автор:  Иван Денисов [ Воскресенье, 16 Март, 2014 18:46 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Пётр Кушнир писал(а):
Димыч писал(а):
Обертка написана на С++
Некошерно :) Зачем тогда КП, если писать придется на С++?

Это временная мера, чтобы все запустилось, мысль правильная, надо понять стоит ли игра свеч, чтобы затем переписать на КП. Вот только у меня как-то глючит, то что я скачал по последним ссылкам Дмитрия... не могу понять, так и должно быть? Дмитрий, напиши, куда смотреть? Я думал, что после фикса со сборщиком трапы перестанут вылетать и в черный не будет окрашиваться, но так вроде все и осталось...

Автор:  Пётр Кушнир [ Воскресенье, 16 Март, 2014 18:54 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Иван Денисов писал(а):
Это временная мера, чтобы все запустилось, мысль правильная, надо понять стоит ли игра свеч
Насколько я могу судить, проблема всегда в написании биндинга. Как только биндинг готов - работа встает на рельсы и катится легко. Но это уже давно известно, зачем еще один раз проверять?

Автор:  Димыч [ Понедельник, 17 Март, 2014 05:43 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Пётр Кушнир писал(а):
Димыч писал(а):
Обертка написана на С++
Некошерно :) Зачем тогда КП, если писать придется на С++?

Изначально не было обертки. Был (и остается) код на КП. Обертка появилась, когда появился тупик с реализацией шрифтов на КП.

Дело в том, что библиотека AGG написана на C++ с применением шаблонов. В конечном коде (после раскрытия шаблонов) используется «утиная типизация», т.е. стыковка кусков кода осуществляется по сигнатурам, а не по типам. Более того, и в коде на C++, и в коде на Pascal (AggPas), в модулях, связанных со шрифтами, байтовые массивы данных весьма вольно преобразуются от типа к типу, т.е. сначала это массив одного типа, несколькими строками ниже — другого типа. В общем и целом, осилить этот кусок сразу целиком у меня не получилось. Но, поскольку работать надо, я и решил потратить силы и сделать обертку, тем более, что архитектурно то, что легло в основу обертки будет использоваться и в КП.

В процессе реализации обертки, а также после некоторых обсуждений здесь и в офлайне появилось понимание того, как надо делать шрифты. Поэтому судьба обертки сейчас под вопросом.
Тем не менее, опыт её написания полезный.

Сейчас, к своему глубокому сожалению, вынужденно занят ремонтом. Как только появится возможность, продолжу работу.

Иван Денисов писал(а):
Вот только у меня как-то глючит, то что я скачал по последним ссылкам Дмитрия... не могу понять, так и должно быть?

Я исправил только одну ошибку, приводившую к трапу. Связана она была со сборщиком мусора. Есть еще одна, периодически обваливающая ББ. Ошибка плавающая, для вылавливания требуется отладка. Еще есть проблема с некорректной отрисовкой, видимо неправильный расчет координат.
Есть еще и другие проблемы: ссылка.

Автор:  Пётр Кушнир [ Понедельник, 17 Март, 2014 09:59 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

А, понятно.

Ну, конечно, реализовывать абстракции ББ непосредственно в DLL это немного странно, но раз уж другого способа нет.
Кстати, а вы не думали реализовать что-то типа обертки на все случаи жизни, например, чтобы больше не реализовывать биндинги на КП, а описывать обмен информацией с помощью json например, чтобы передавать сообщения внутрь dll-обертки, там их разбирать и превращать в вызовы библиотек, или объекты в памяти.
Накладные расходы, конечно, зато какое удобство.

Автор:  Димыч [ Понедельник, 17 Март, 2014 10:19 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Пётр Кушнир писал(а):
Накладные расходы, конечно, зато какое удобство.

Не делал. Пока смысла не было. Для таких целей, в принципе, есть SVG.
У меня другой процедурный движок, а делать обобщенную систему цели не было.

Автор:  Иван Денисов [ Пятница, 21 Март, 2014 12:31 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Тем временем Дмитрий прислал улучшенный вариант HostPorts на основе Cairo. Улучшена отрисовка кривых Безье и овалов.

Обновил его тут:
https://bitbucket.org/diamagnetic/bb-cairo
и тут:
http://oberon.molpit.com/packs/Cairo.txt

Сделал также демку CairoDemoBezier, в Блэкбоксе эта синяя фигура крутится :)

Вложения:
bezier.png
bezier.png [ 26.39 КБ | Просмотров: 11331 ]

Автор:  Роман М. [ Среда, 26 Март, 2014 13:02 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Спасибо, уже добавил себе. Сглаженные кривые выглядят намного приятнее. Да и со шрифтами было бы класно то же самое проделать.

Обратите также внимание на следующие фиксации для модулей Ports и HostPorts в моём хранилище:
  1. 2009 Aug 06, BdT, jt, DrawSpace added (underlining spaces)
  2. HostPortsCairo synced with HostPortsGDI32, adding DrawSpace

Автор:  Димыч [ Вторник, 29 Апрель, 2014 04:40 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Коллеги, у меня маленькое свершение.
Заработал вывод шрифтов в AGG.
Вложение:
Комментарий к файлу: Первый вывод шрифтом PT Mono
a.png
a.png [ 1.95 КБ | Просмотров: 11241 ]

Я понимаю, что картинка не впечатляет, но эти артефакты вокруг букв - результат числовых ошибок, которые еще предстоит найти.
Самое важное, что это заработало принципиально.

Правильно считывается шрифтовая информация из операционной системы и правильно выстраиваются кривые. Пока неправильно работает собственно вывод, но это ничего, исправим :)

Подробности и код в репозитории:

https://github.com/dmitrys99/BBAGG

Как-нибудь выкрою время и напишу «квест» о переводе AGG с С++ и Паскаля со вставкой кусков Питона на BB. Увлекательное мероприятие :)

UPD: См. код в модуле AggTestTT

Автор:  Илья Ермаков [ Вторник, 29 Апрель, 2014 04:42 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Впечатляет...

Автор:  Иван Денисов [ Суббота, 24 Май, 2014 15:25 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Исправил косяк с обводкой овалов. "Оказывается" овал то задумывался на демонстрации без заливки, а ее наличие было следствием ошибки.

Вложение:
new.png
new.png [ 37.04 КБ | Просмотров: 11152 ]

Обновленная версия по старой ссылке:
http://oberon.molpit.com/packs/Cairo.txt

Хранилище перенес сегодня сюда:
http://gitlab.molpit.com/oberon/cairo

Роман М. писал(а):
Обратите также внимание на следующие фиксации для модулей Ports и HostPorts в моём хранилище:
  1. 2009 Aug 06, BdT, jt, DrawSpace added (underlining spaces)
  2. HostPortsCairo synced with HostPortsGDI32, adding DrawSpace
Роман, я пока не уверен про эти подчеркивания, буду опираться на версию центра (которой пока нет). Поэтому пока оставлю без них.

Автор:  Иван Денисов [ Вторник, 14 Июль, 2020 14:22 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Заметил, что тут в теме ссылки устарели.

Актуальные:
https://blackbox.oberon.org/extension/Cairo
https://gitlab.molpit.org/bindings/Cairo
http://comp.molpit.org/bindings/Cairo.txt

Страница 6 из 6 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/