2013-02-06 3 views
0

WebGL очень медленный.PlayN WebGL для холста

100 спрайтов в кадре - ОК,

1000 спрайтов в кадре - оптимизация необходимости,

10000 спрайты, кадров в секунду упадет с 40 до 20fps.

Мне вообще не нужен 3D. Мне не нужны фильтры, шейдеры, огни и другие 3D-материалы. Мне нужно просто быстро 2d canvas (без сглаживания пикселей) с возможностью рендеринга png и рендеринга фигур для отладки (линий, баров, кругов). Есть ли возможность исключить WebGL из движка PlayN и переключиться на холст HTML5? (Я полагаю, это будет намного быстрее, чем WebGL.)

+1

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

+0

Я предполагаю, что это медленно, потому что он рисует эти 10 000 спрайтов каждый в отдельном вызове рисования WebGL ... –

ответ

1

Это не имеет никакого отношения к WebGL. WebGL работает быстро. И это не связано с PlayN. Вы просите гонку Indy 500 с помощью внедорожника. Внедорожник никогда не будет сопоставим со специализированными гоночными автомобилями. Однако, если вам нужно проехать по неизвестной местности и взять детей в футбольную игру и забрать бакалею по дороге домой, внедорожник будет намного лучшим выбором.

В случае, описанном вами, медленность не является вызовом WebGL и вызовами Canvas.drawImage, это факт, что PlayN выполняет полное преобразование аффинного преобразования для вычисления текущего преобразования для каждого спрайта на каждом кадре. Это то, что вы хотите в 99% случаев, потому что в большинстве игр на экране появляется не менее 1000 спрайтов, и они предпочитают гибкость в том, чтобы манипулировать этими спрайтами по своему усмотрению.

Если вам действительно нужно 10 000 спрайтов, и вы не просто пытаетесь использовать движок графика сцены как систему частиц, тогда используйте слой ImmediateLayer и вызовите Surface.drawImage, чтобы нарисовать ваши изображения в том положении, в котором они должны быть , и сохранить математику, которая определяет их положение до минимума.

+0

Например, я могу легко нарисовать 10 000 спрайтов (из одной текстуры) при 60 FPS в Chrome на ноутбуке Mac с помощью WebGL , пока я использую Surface и не создаю 10 000 слоев. Если вы используете слои, он болото около 1200 спрайтов. Попробуйте сами: http://samskivert.com/playn/perf-test/ – samskivert

Смежные вопросы