LINUX.ORG.RU

А как круги и окружности рисуются на низком уровне в Android или в WebGL?

 


0

2

Из обоих, кодил только под WebGL, но казалось бы современный андроид графику выводит только GL-способом. Ну всмысле, всё чтотвы видите на экране топового смарта - физически отрисовано текстурированными треугольниками и никак иначе. Проще сейчас уже не делают, типа. Круг - это просто много треугольников, где длина внешней грани - пара пикселей (то есть треугольников всего штук 180), да? Мы не считаем спрайты, когда заранее картинка с прозрачностью нарисована и выведена в прямоугольник (2 треугольника).

То есть вот интересно что там на низком уровне происходит когда рисуется анимированное крутящееся кольцо вида: https://www.google.com/search?q=circle+progress+indicator&tbm=isch&ved=&oq=circle+progress+indicator&gs_lcp=&sclient=mobile-gws-wiz-img&ei=a06gX7CeLJHpqgGkzaiICw&client=ms-android&prmd=imvn

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

2 треугольника + фрагментный шейдер = вот тебе и круг.

anonymous-angler ★☆
()
Последнее исправление: anonymous-angler (всего исправлений: 1)

Пишут фреймворк для рисования 2D на CPU, далее на фреймворках пишут что угодно, в т.ч. рендеринг SVG, бекграундом может быть и opengl, но без CPU и кривых безье точно не обходится вся современная графика

menangen ★★★★★
()
Ответ на: комментарий от anonymous-angler

Так там не простой круг, а всякие фишки навороченные, которые всё-равно нужно управлять by CPU, так что на шейдерах никто заморачиваться не будет писать сложные вещи

menangen ★★★★★
()

Открой для себя мир GLSL и подобного. Вот тебе целое море из двух треугольников http://glslsandbox.com/e#69054.0

(то есть треугольников всего штук 180), да?

Это если в лоб так сказать делать, но можно по разному рисовать.

особенно когда оно сложное, т.е. там несколько переливающихся цветов и несколько суб-колец и постоянно меняющаяся их длина и т.п.,

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

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

Можно и спрайтами, размер этих анимашек часто небольной так что в одну текстуру квадратную влезает 64 кадра анимации и всё по итогу максимально плавно и максимально быстро.

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

не очень понятно при чем тут CPU, т.е. в конечном итоге-то графической подсистеме тебе придётся предоставить только набор треугольриков с текстурами или шейдерами

pilobar
() автор топика
Ответ на: комментарий от menangen

Не всё так просто, обычно есть draw_circle или тип того внутрях может быть как просто заливка пикселями через CPU и отображение в текстуру так и аттач текстуры пустой, генерация glsl кода (это просто текст его можно на лету менять и перелинковывать) и отражение уже в текстуру. Тот же cairo. Если canvas взять браузерный то там именно на лету glsl часто.

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

Вообще-то будут и заморачиваются, более-менее современные игры используют compute фичи, которые делают многое вместо процессора. Правда на мобилах сомнительно, тк там сраный gl es.

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

не очень понятно при чем тут CPU

Часто быстрее нарисовать на CPU чем на GPU. Это решает бекенд отрисовщика на лету. Для кодера есть функция draw_line или draw_dot так вот если в отрисовке таких дравов менее миллиона то быстрее сразу и в память и писать что-бы потом закешировать в текстуру и показывать.

т.е. в конечном итоге-то графической подсистеме тебе придётся предоставить только набор треугольриков с текстурами или шейдерами

Ты видимо только знакомишься со всем этим и кажется что всё делается единообразно. Нет, это не так. Есть целая куча способов рендеринга и часто на процессоре, удобнее и быстрее чем на gpu если объём пикселей мал (менее гигапикселя в секунду) а на этих анимашках даже половины этого нет. Такое в реалтайме может любой pentium 3 рисовать тупо в память картинки после чего отдавать просто готовый результат на отрисовку в виде текстуры или вообще напрямую.

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

ну ты не можешь «рисовать на CPU» никак физически, если вижеокарта требует треугольники

Выдать 2 треугольника с текстурой, нарисованной CPU. В чём проблема? Можно ещё только маску заливки на CPU рассчитывать. Обычно это получается быстрее, чем триангуяция. Также проще и быстрее получить качественное сглаживание краёв (antialiasing).

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)

На Android для 2D графики используется библиотека отрисовки Skia. Можно её исходники посмотреть.

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

Выводить можно напрямую в fbdev, так например делает pmOS запуская иксы. Без всякого вообще 3d-ускорения и треугольников

gtk3 ★★★★
()

Вообще webgl настоящий который может дать модифицированная mesa выглядит так https://radikal.ru/video/tZ5LFs34dzx инверсия цветов оболочки того же ютуба , но все дико тормозит

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

Вообще, да. Но в конечном итоге всё сводится к паре треугольников и фрагментному шейдеру. Хотя конкретно эти индикаторы прогресса рисуются довольно легко и можно обойтись без фреймворка, но не нужно.

anonymous-angler ★☆
()
Ответ на: комментарий от anonymous

Это будет тормозное дерьмо без ускорения.

Для 2D графики, которая нужна автору топика, всё будет без тормозов работать даже если этих кругов 10000 будет.

X512 ★★★★★
()

Круг - это просто много треугольников, где длина внешней грани - пара пикселей (то есть треугольников всего штук 180), да?

Нет. Круг – обычно квадрат из двух треугольников и шейдером, работающим примерно по следующему правилу: если расстояние от центра квадрата больше R, то пиксель прозрачный, иначе непрозрачный.

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

Есть целая куча способов рендеринга и часто на процессоре, удобнее и быстрее чем на gpu если объём пикселей мал (менее гигапикселя в секунду) а на этих анимашках даже половины этого нет

Если круг анимированный, то нужно 60 раз в секунду рисовать эти пиксели заново. И на процессоре это делать совсем не прикольно, потому что производительность проца во много раз ниже у ЦП в графике. Это на старой 2D графике можно было кружок один раз нарисовать, и всё — тогда процессор, в самом деле, не нужен. И то даже в этом случае видеокарта нужно просто для того, чтобы буфер экрана отрисовывать с частотой кадров.

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

Никто ничего на cpu давно не рисует, не надо людей в заблуждение вводить

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

Владимир, потрудитесь объясниться

Устал вчера я и уснул
пока я спал мне Шульман вдул
Я закричал "Мне Шульман вдул!"
пошел и тоже ему вдул

Владимир

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

Вот только процессор в реальности занимается ещё выполнением программ, у которых будет отняты его ресурсы.

Во вторых, процессор тут наиболее вероятно будет менее энергоэффективен, а тс про мобилы спрашивал.

anonymous
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.