Вы быстрее создаете круги из треугольников или рисуете их фрагментным шейдером? - PullRequest
0 голосов
/ 01 июля 2018

Я использую язык Rust и библиотеку Glium. Я хочу вывести на экран большое количество кружков, но не могу решить, как мне лучше это сделать.

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

vec2 point = vec2(200.0f, 200.0f);
float dist = distance(point, gl_FragCoord.xy);

if (dist < 200)
    gl_FragColor = vec4(0.0f, 1.0f, 0.0f, 1.0f);

Какой метод будет работать быстрее? Есть варианты сделать это лучше? Размер и цвет каждого круга будут меняться во время выполнения.

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Быстрее?

Быстрее для процессора?

Совершенно быстрее?

Никто не знает ваше окружение. Графический чип может быть ОЧЕНЬ мощным. И когда вы сможете рационально использовать его мощь, возможно, программа будет «быстрее»

Когда вы визуализируете набор треугольников, ваш процессор выполняет работу по подготовке параметров геометрии и т. Д., Когда вы визуализируете только два треугольника на вызов отрисовки, тогда работа выполняется на стороне графического процессора. Но этот подход может быть сложнее реализовать, потому что вам нужно передать необработанные данные окружности (я имею в виду радиус и координаты центра) в фрагментном шейдере. Для малого количества кругов это тривиально, но не для многих. Подумайте об этом.

Если вы делаете это с текстурой поля расстояния, то вы должны создать ее на ЦП или с другим вызовом отрисовки.

0 голосов
/ 01 июля 2018

Что ж, рисование с помощью GPU (шейдера) должно быть намного быстрее, чем создание целой связки треугольников (если я действительно прав ...)

...