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

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

Пишут фреймворк для рисования 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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.