Я создаю шутер от первого лица в WebGL и в настоящее время отладки ранней версии в Chrome 31.0.1650.57WebGL: Низкая кадров в секунду и ~ 72% времени простоя
Приложение работает плохо около 7-8 кадров в секунду, и когда я Cpu профиль я получаю следующее:
и от этого она выглядит как центральный процессор не тратит время 72% делают ... ничего? Как получилось, requestAnimFrame
дает мне этот низкий fps? Мои шейдеры действительно очень простые (в основном 1 лайнеры)
Моя игра петли по существу
function drawScene() {
requestAnimFrame(drawScene);
map.render(playerPosition);
}
Графика также в настоящее время очень просто. Я включил скриншот приложения, а также full .cpuprofile file.
Может кто-нибудь объяснить, что время простоя может быть вызвано?
ОБНОВЛЕНИЕ: карта хранится в кучу «лица», где каждая грань представляет собой gl.TRIANGLE_FAN
. Я не уверен, как я могу нарисовать несколько gl.TRIANGLE_FAN
s (каждый с другим элементом «центр») в 1 вызов gl.drawElements
.
Я попытался изменить код, чтобы один раз загрузить вершины в gpu, а затем просто загрузить индексы в массив вершин, но это заставляет gl.drawElements нарисовать 1 гигантский gl.TRIANGLE_FAN
, что неверно. все gl.TRIANGLE_FAN
s не используют одну и ту же «центральную» вершину.
Могу ли я каким-либо образом преобразовать gl.TRIANGLE_FAN
s в gl.TRIANGLES
или gl.TRIANGLE_STRIPS
?
Я понимаю, что OpenGL имеет glMultiDrawElements, который делает именно то, что я wan't (давайте передадим размер каждого примитива), но не похоже, что он поддерживается в Webgl.