Какое снижение производительности при использовании нескольких контекстов WebGL - PullRequest
0 голосов
/ 14 сентября 2018

Я работаю над приложением WebGL, которое работает аналогично программам для композитинга видео, таким как After Effects.

Приложение берет текстуры и складывает их как слои. Это может быть так просто, как рисование одной текстуры поверх другой или использование общих режимов наложения, таких как экран, для объединения нескольких слоев.

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

Теперь мой вопрос , все это нужно отслеживать в одном холсте WebGL.

// Запуск вебгл рэнта

Приложение не будет знать, сколько слоев существует раньше времени, поэтому текстуры, координирующие плоскости и шейдеры, нужно будет создавать динамически.

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

// Завершить вебгл-рейнт

Однако это можно легко решить, создав новый элемент canvas для каждого слоя. На каждом холсте WebGL будет нарисована текстура, а затем я могу масштабировать / перемещать / смешивать слои, используя простой код CSS.

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

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

С целью обеспечения возможности поддержки ~ 4 слоя за раз, будет ли допустимым использование нескольких холстов? Помимо беспокойства о браузерах, имеющих максимальное количество активных контекстов WebGL, есть ли другие ограничения, о которых следует знать?

...