В эти дни мне нужно нарисовать много изображений на холсте. Размер холста 800x600px, и у меня есть много изображений размером 256x256px (некоторые меньше), чтобы рисовать на нем, эти маленькие изображения составят полное изображение на холсте. У меня есть два способа реализовать это.WebGL VS Canvas 2D аппаратное ускорение
Во-первых, если я использую canvas 2D-контекст, то есть context = canvas.getContext('2d')
, тогда я могу просто использовать метод context.drawimage()
, чтобы поместить каждое изображение в нужное место на холсте.
Другой способ, я использую WebGL для рисования этих изображений на холсте. Таким образом, для каждого маленького изображения мне нужно нарисовать прямоугольник. Размер прямоугольника такой же, как у этого маленького изображения. Кроме того, прямоугольник находится на правильном месте холста. Затем я использую изображение как текстуру, чтобы заполнить его.
Затем я сравниваю производительность этих двух методов. Оба их fps достигнут 60, а анимация (Когда я нажимаю или двигаю мышью, холст будет многократно перерисовываться) выглядит очень гладко. Поэтому я сравниваю их использование . Я ожидаю, что когда я использую WebGL, процессор будет использовать меньше, потому что GPU обеспечит много работы по рисованию. Но в результате использование ЦП выглядит почти таким же. Я пытаюсь оптимизировать свой код WebGL, и я думаю, что это достаточно хорошо. Google, я обнаружил, что браузер, такой как Chrome, Firefox включит Аппаратное ускорение по умолчанию. Поэтому я пытаюсь закрыть аппаратное ускорение. Тогда использование ЦП первого метода становится намного выше. Итак, мой вопрос заключается в том, что, поскольку canvas 2D использует GPU для ускорения, необходимо ли мне использовать WebGL только для 2D-рендеринга? В чем разница между ускорением 2D GPU и WebGL? Они оба используют графический процессор. Может быть, есть какой-либо другой способ снизить использование ЦП второго метода? Любой ответ будет оценен!
Спасибо за ваш ответ и очень жаль позднего принятия. Как вы сказали, как WebGL, так и Canvas 2D имеют свои преимущества и недостатки. Наконец я принял WebGL. – LiuGui
Просто примечание: 2dContext также имеет опцию 'alpha'. – Kaiido
ваша точка бытие? – gman