OberonCore
https://forum.oberoncore.ru/

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

Автор:  Иван Денисов [ Среда, 30 Май, 2012 07:32 ]
Заголовок сообщения:  Anti-Grain для Ports

Подскажите есть ли какие-нибудь наработки по более качественной отрисовке геометрических примитивов в BB?

Хотел бы переписать DrawOval и DrawLine очень уж достало как он их криво рисует.

Автор:  Евгений Темиргалеев [ Среда, 30 Май, 2012 07:43 ]
Заголовок сообщения:  Re: AntiGain для Ports

Ports --- абстракция.

Поэтому проблему надо понимать, как "криво рисует WinApi", используемый HostPorts для виндового ББ. Так?

Попробуйте сделать свою реализацию Ports, которая будет использоваться для вьюшек, которым надо красиво нарисовать. Через OpenGL-какой-нибудь или... Если не ошибаюсь, пример использования специальных портов для вьюшек можно поглядеть у гуйных вьюшек-контролов.

Автор:  Иван Денисов [ Среда, 30 Май, 2012 07:47 ]
Заголовок сообщения:  Re: AntiGain для Ports

Евгений Темиргалеев писал(а):
Поэтому проблему надо понимать, как "криво рисует WinApi", используемый HostPorts для виндового ББ. Так?
Да, где то встречалось на форуме, что какие-то студенты переписывали HostPorts, но вот теперь не могу найти. Может мне это приснилось ) Но решил спросить все-же.

Автор:  Иван Кузьмицкий [ Среда, 30 Май, 2012 07:51 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Человек сподобился портировать AGG на паскаль: http://www.crossgl.com/aggpas

Почему бы не рассмотреть возможность портирования на оберон? Ну или Cairo тут упоминалась, не знаю.

Хороший вектор нужен, нужен.

P.S. И, да, скорее всего будет, наверное, HostPorts другой сделать. На базе того же AGG или Cairo.

Автор:  Роман М. [ Воскресенье, 03 Июнь, 2012 18:00 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

В Cairo была добавлена поддержка вывода на Win32 GDI, не знаю в какой версии. Сам вывод примитивов очень прост. Стоит проверить этот вариант.

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

Роман М. писал(а):
В Cairo была добавлена поддержка вывода на Win32 GDI, не знаю в какой версии. Сам вывод примитивов очень прост. Стоит проверить этот вариант.
С огромным удовольствием, вот бы пример только, не получается разобраться с выводом в этот GDI.

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

На основе наработок Романа переписал HostPorts (DrawOval, DrawLine, Роман помог с DrawPath), и теперь ББ может рисовать красиво.

Вложения:
Комментарий к файлу: Cairo (переименована), HostPorts, ObxLines, dlls
cairo.7z [717.97 КБ]
Скачиваний: 220
plot_test.png
plot_test.png [ 62.15 КБ | Просмотров: 9930 ]
cairoTest_win7.png
cairoTest_win7.png [ 42.68 КБ | Просмотров: 9929 ]

Автор:  Роман М. [ Понедельник, 04 Июнь, 2012 18:49 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Результаты при просмотре с мобильника мне кажутся вполне удовлетворительными. Если я не проглядел чего.
Позже взгляну на HostPorts - что там проблематично.
Результаты экспериментов проще и лучше хранить в VCS в кодировке UTF-8. Я так делаю в своем хранилище на https://github.com/romiras/ . По крайней мере, история всех произведенных изменений видна всем и кто захочет, может присоединиться к разработке.
Ветку можно назвать host-cairo.

Автор:  Иван Денисов [ Понедельник, 04 Июнь, 2012 19:41 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Не против вести публичную ветку у тебя, зарегистрировался на github. Но только не в utf8, потом как все будет работать переводи в текст в скажем host-cairo-utf8, а сейчас выделять предлагаю цветом.

Автор:  Роман М. [ Понедельник, 04 Июнь, 2012 22:42 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Иван Денисов писал(а):
Не против вести публичную ветку у тебя, зарегистрировался на github. Но только не в utf8, потом как все будет работать переводи в текст в скажем host-cairo-utf8, а сейчас выделять предлагаю цветом.

На открытых хранилищах я буду работать только с кодировкой UTF-8, даже если и в ущерб некоторой функциональности. Если хочешь работать только с форматом ODC, то веди разработку в своем хранилище, а себе я буду дублировать ветку в удобном мне формате, периодически синхронизируя с твоей.

Автор:  Роман М. [ Понедельник, 04 Июнь, 2012 22:57 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Локально я работаю или с плоским текстом или с odc , но в итоге все равно экспортирую в VCS плоский текст, потому что все доступно публично без ББ.

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

Исправил косяки с цветами, начал делать DrawPath, но не могу разобраться как залить путь в Cairo.
Обновил архив в сообщении выше.
download/file.php?id=3214

Автор:  Роман М. [ Среда, 06 Июнь, 2012 00:42 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Иван Денисов писал(а):
Исправил косяки с цветами, начал делать DrawPath, но не могу разобраться как залить путь в Cairo.
Обновил архив в сообщении выше.
download/file.php?id=3214

Иван, попробуй так:
Код:
IF s = 0 THEN s := 1 END;
C.cairo_set_line_width(ctx, s);
C.cairo_stroke_preserve(ctx);
IF path = Ports.closedPoly THEN
   C.cairo_fill(ctx)
END;
(поменял порядок вызова)

Автор:  Иван Денисов [ Среда, 06 Июнь, 2012 11:42 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

К сожалению порядок вызова не помог. Проверяю работоспособность на стандартных примерах Omosi :)

Вложения:
omosi.png
omosi.png [ 14.84 КБ | Просмотров: 9818 ]

Автор:  Роман М. [ Среда, 06 Июнь, 2012 23:43 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Я разобрался в чём дело с заливкой. Всё из-за того, что ломаная линия должна состоять из непрерывных отрезков. Для этого команда Move To делается лишь 1 раз. И Line To сама устанавливает позицию пера на новом месте.

Правильно так:
Код:
C.cairo_move_to(ctx, pts[0].x, pts[0].y);
FOR i := 1 TO n-1 DO
   C.cairo_line_to(ctx, pts[i].x, pts[i].y)
END;


Однако (из-за антиалиасинга?) получается вот такой результат:
Вложение:
cairo-fill.png
cairo-fill.png [ 15.16 КБ | Просмотров: 9790 ]


На данный момент с Cairo реализована только отрисовка ломаных линий. Сплайны Безье остались пока в WinAPI.
Вложение:
HostCairo-v0.1.zip [22.81 КБ]
Скачиваний: 226

Автор:  Иван Денисов [ Четверг, 07 Июнь, 2012 05:11 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Отлично! Роман, а у вас обрезается вот так отображения или нет?

У кого-нибудь есть идеи, что может быть причиной?

Вложения:
Комментарий к файлу: недорисовка
cut.png
cut.png [ 16.5 КБ | Просмотров: 9775 ]

Автор:  Роман М. [ Четверг, 07 Июнь, 2012 08:57 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Иван Денисов писал(а):
Отлично! Роман, а у вас обрезается вот так отображения или нет?

У кого-нибудь есть идеи, что может быть причиной?
Не наблюдал я такого. Все Omosi показывались прилично, почти (см. выше) не отличимы от оригинала. Твистер также показывался без проблем.
Из патчей к ББ применял только этот.

Автор:  Роман М. [ Четверг, 07 Июнь, 2012 09:03 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Роман М. писал(а):
Иван Денисов писал(а):
Отлично! Роман, а у вас обрезается вот так отображения или нет?

У кого-нибудь есть идеи, что может быть причиной?
Не наблюдал я такого. Все Omosi показывались прилично, почти (см. выше) не отличимы от оригинала. Твистер также показывался без проблем.
Из патчей к ББ применял только этот.

Правда, в Линуксе еще не проверял. Позже проверю. [Проверил. В Wine выглядит также неплохо, как и в Windows.]
Это на какой демке произошло?

Автор:  Иван Денисов [ Суббота, 09 Июнь, 2012 18:57 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Роман М. писал(а):
Это на какой демке произошло?

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

Вложения:
demo.png
demo.png [ 30.71 КБ | Просмотров: 9712 ]

Автор:  Роман М. [ Суббота, 09 Июнь, 2012 23:19 ]
Заголовок сообщения:  Re: Anti-Grain для Ports

Иван Денисов писал(а):
Отлично! Роман, а у вас обрезается вот так отображения или нет?

У кого-нибудь есть идеи, что может быть причиной?
Проблема обнаруживается при наборе версий библиотек из поставки Cairo в Wine, которыми ты пользуешься. При использовании версий библиотек, которыми пользуюсь я из этого сообщения проблема проявляется только у командеров в некоторых случаях: изображения прорисовываются полностью, но при перекрытии другими окнами наблюдается эффект затирания низлежащих областей (dirty window).

Вложения:
cairo-commander-issue-wine.png
cairo-commander-issue-wine.png [ 5.32 КБ | Просмотров: 9682 ]

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