LINUX.ORG.RU
ФорумTalks

А нет ли у нас проблем с рендерингом SVG?

 ,


0

1

Попробовал я тут повозиться с рендерингом SVG на Qt. Разумеется с полпинка всё криво и косо, но это мелочи. Не мелочи то, что 2MiB SVG на не древней машине реально тормозит.
Ок, новая для меня либа; я скорее всего делаю что-то неправильно. Но GTKшный просмотрщик из MATE тоже тормозит. Реально неудовлетворительно.
А масштабирование в моей программе будет чуть ли не самой часто ипользуемой фичей.
Неужели с SVG всё действительно так плохо? Может это гиблая идея? А может просто нужно подрезать детализацию и всё будет хорошо?

Рендеринг 2MiB сложной векторной графики на процессоре. Вы сами, как думаете?

next_time ★★★★ ()
Ответ на: комментарий от next_time

И что? Каких-то 2MiB векторов. Ну вот совсем-совсем не выглядит сложным. Да и рендерю я далеко не на 486.

ZweiStein ★★ ()
Ответ на: комментарий от ZweiStein

Каких-то 2MiB векторов.

Это вообще-то сложная задача, если нет аппаратного кодера.

DoctorSinus ★★★★★ ()
Ответ на: комментарий от ZweiStein

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

MrClon ★★★★★ ()
Ответ на: комментарий от MrClon

Ну и ладно. Там всё равно изображение избыточно детализированное: уверен, что его можно упростить раз в 10 без качественного ухудшения при использовании в моих целях.

ZweiStein ★★ ()

Готовой реализации нет. Нужно пилить самому.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

А твоя то скоро будет? У меня даже пощупать её наклюкивается задачка.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

Что значит «будет»? Она уже есть. Но она не заточена под динамическую отрисовку. Нужна отдельная реализация, и желательно на gpu.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Возможно не страшно. Я релиз пропустил, потому вопросы такие:

1) Где посмотреть как оно рендерит?

2) Тесты на больших данных есть? Интересует в сравнении с другими либами (да, я слышал что они не всё умеют, значит в сравнении с тем, что умеют другие).

3) В чём сложность отдать рендер на опенгл? Вот это я бы даже поглубже обсудил.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

1. Есть демо на гихабе. Есть сравнитильная таблица в ридми.

2. Есть.

3. Я не знаю opengl. При этом есть проект azul, который использует resvg со своим opengl бекендом.

Без ссылок ибо с телефона.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от ZweiStein

Каких-то 2MiB векторов.

Ржу над тобой. Вектор это не пиксель.

peregrine ★★★★★ ()
Ответ на: комментарий от peregrine

И? Картошка не пиксель. Ты, наверное, тоже. Много чего не пиксель.

ZweiStein ★★ ()
Ответ на: комментарий от ZweiStein

2MiB пикселей это одно, а 2 MiB векторов над которыми надо сделать некоторые операции на процессоре, чтобы получить пиксели это совершенно другое.

peregrine ★★★★★ ()
Ответ на: комментарий от peregrine

Да, 2MiB пикселей это одно, а 2MiB векторов это другое. И что?

ZweiStein ★★ ()
Ответ на: комментарий от ZweiStein

А то что ожидать от них отсутствия тормозов странно.

peregrine ★★★★★ ()
Ответ на: комментарий от peregrine

Нет, не странно. Метр в 100 раз длиннее сантиметра, но вряд ли кто скажет что метр это далеко (как же я устал придумывать примитивные аналогии чтобы даже до ЛОРовца дошло).

ZweiStein ★★ ()

2MiB SVG

Где тест кейс? Выложи файл и мы потыкаем палочкой!

atsym ★★★★★ ()
Ответ на: комментарий от ZweiStein

На моей лопате оно отрисовывается за доли секунды и не тормозит. Совсем.

Unicode4all ★★★★ ()
Ответ на: комментарий от Unicode4all

Ну может на лопате есть какое ускорение для этого дела. В браузере на компе открывается тоже не катастрофически плохо. А вот обычными просмотрщиками и средствами Qt всё из рук вон плохо.

ZweiStein ★★ ()
Ответ на: комментарий от ZweiStein

Да, 2MiB пикселей это одно, а 2MiB векторов это другое. И что?

2MiB векторов понятие растяжимое.

Вот например

  1. <rect height="99.999999999999999999999999999999999999999999999999999999" width="55.5555555555555555555555555555555555555555555555555555555" y="-33.33333333333333333333333333333333333333333333333" x="0.0000000000000000000000000000000000000000000000001" id="XMLID_3_"/>
  2. <polygon id="polygon1" points="0,-4 4,-4 4,0 0,0     " fill="none"/>
    <polygon id="polygon2" points="0,-5 5,-5 5,0 0,0     " fill="none"/>

Первый «svg» будет намного больше второго по размеру файла.

Но отрисовывать проще первый потому как там всего лишь один прямоугольник, в то время как во втором «svg» целих два полигона.

А теперь интерполируй этот пример на SVG-файл со множеством объектов.

В случае с векторными рисунками важен не размер файла, а количество, тип и свойства объектов внутри SVG-файла.

atsym ★★★★★ ()
Последнее исправление: atsym (всего исправлений: 3)
Ответ на: комментарий от ZweiStein

У чипов Adreno ещё с 205 есть таки аппаратное ускорение SVG. Да и вроде у современных десктопных карточек есть, но это я мельком так глядел, у Хуанга есть.

Unicode4all ★★★★ ()
Ответ на: комментарий от atsym

Это понятно и очевидно.
Но в итоге мы имеем тормоза при рендеринге карты мира средне-паршивой детализации.

ZweiStein ★★ ()
Ответ на: комментарий от ZweiStein

Да, странно. Ты сравниваешь сантиметр с килограммом. Отрисовка векторной графики в разы, если не на порядки, дольше.

Deleted ()
Ответ на: комментарий от ZweiStein

Кэшируй результат, делай всё асинхронно.

Deleted ()
Ответ на: комментарий от Deleted

А что кешировать-то? Растр? Это жесть получится: масштабирование будет происходить в очень широком диапазоне. Никаких гигабайтов не хватит...

ZweiStein ★★ ()
Ответ на: комментарий от ZweiStein

А как иначе? Вот есть у вас фильтр размытия, его нужно каждый раз пересчитывать. Вот и прощай производительность.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Я пока посмотрю что можно сделать с самой SVGшкой. Там, как мне кажется, есть задел для оптимизации. Детализация мне не принципиальна и я могу ей пожертвовать.
Но уж в 21 веке-то идти на такие жалкие компромисы...

ZweiStein ★★ ()
Ответ на: комментарий от RazrFalcon

1. Демки тут

Жаль что в демке нет масштаба. Но мой 2MiB файлик открыла шустро, хотелось бы посмотреть на ресайз...

ZweiStein ★★ ()
Ответ на: комментарий от ZweiStein

Я его убрал, ибо тормозит. Можно просто окно растягивать. Но нужно учесть, что отрисовка идёт в отдельном потоке, чтобы GUI не подвисал.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от ZweiStein

У вас в файле 29469 кривых и больше ничего. То есть всё упирается в проц и конкретную реализацию отрисовки кривых.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Ну да, логично. И мы на современном уровне развития не можем просчитать 30 тысяч кривых за приемлемое время. Это плохо. Это вообще задница.

ZweiStein ★★ ()
Ответ на: комментарий от ZweiStein

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

RazrFalcon ★★★★★ ()
Последнее исправление: RazrFalcon (всего исправлений: 1)
Ответ на: комментарий от ZweiStein

У гуглокарт же получается рисоваться, а они едва жрут оперативку. (Да, там везде растр, но операция получения очередного уровня детализации сопоставима с получением более детального рендера SVG-шки).

Deleted ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)