Если передать в drawImage координаты [800 : 450], то мы не увидим даже одного пикселя. По сути, мы передаем в фукцию индексы строки и столбца, на пересечении которых находится первый пиксель нашего изображения. Так как эти индексы (считай координаты) начинают нумероваться с 0, изображение с таким адресом будет полностью отрисовано за пределами видимой области канваса.
Интересно будет провести подобный эксперимент. По опыту скажу, что при отрисовке за пределами канваса, рендер занимает на порядки меньше времени, поэтому - да, в канвасе явно есть оптимизация на такой случай.
Могу предложить использование нескольких канвасов.
Можно собрать весь статичный background tilemap в одно изображение и рендерить его на canvas2d с z-index, условно, 1. Остальной кадр рендерить также как сейчас в webgl, но другом канвасе с z-index 2. Таким образом у нас получится лееринг, с финальным наложением двух канвасов средствами css. К тому же, каждый отдельный канвас можно передать на обработку воркеру, чтобы заработала многопоточная обработка.
Интересный вопрос!)
Если передать в
drawImage
координаты [800 : 450], то мы не увидим даже одного пикселя. По сути, мы передаем в фукцию индексы строки и столбца, на пересечении которых находится первый пиксель нашего изображения. Так как эти индексы (считай координаты) начинают нумероваться с 0, изображение с таким адресом будет полностью отрисовано за пределами видимой области канваса.Интересно будет провести подобный эксперимент. По опыту скажу, что при отрисовке за пределами канваса, рендер занимает на порядки меньше времени, поэтому - да, в канвасе явно есть оптимизация на такой случай.
Могу предложить использование нескольких канвасов.
Можно собрать весь статичный background tilemap в одно изображение и рендерить его на canvas2d с z-index, условно, 1. Остальной кадр рендерить также как сейчас в webgl, но другом канвасе с z-index 2. Таким образом у нас получится лееринг, с финальным наложением двух канвасов средствами css. К тому же, каждый отдельный канвас можно передать на обработку воркеру, чтобы заработала многопоточная обработка.
Тут не могу не согласиться. Да, 2d контекст может достаточно быстро отрисовывать спрайты, но для геймдева его возможности сильно ограничены.
Однако, для создания динамичных двумерных интерфейсов, как это, например, делают в Google Sheets, 2d контекст подходит отлично.