Войти
ПрограммированиеФорумГрафика

[РЕШЕНО] WebGL, ANGLE, производительность.

#0
18:48, 26 июня 2015

Тестирую свое приложение на хроме. Видеокарта встроенная Intel HD4600. Разрешение 1920х1080. По-умолчанию работает через ANGLE. Фпс в районе 30, а когда на экране много полупрозрачных треугольников скатывается до 5. Если уменьшить окно(по площади раза в 4), то фпс становится 40-50. Но потом запускаю хром с ключем --use-gl=desktop, и фпс стабильно 50-60 в любых случаях. Похоже когда webgl работает через ANGLE, то бишь DirectX, то возникают серьезные накладные расходы. Что бы такого можно было сделать, чтобы уменьшить эти самые накладные расходы и получить нормальный фпс без всяких дополнительных ключей?

Уточнение: в хроме реальный фпс оценивался на глаз, потому что если просто считать кадры, то получается 70-80 фпс в любых ситуациях. Такое ощущение, что хром некоторые кадры просто пропускает. В файрфоксе например какой фпс выводит, такой и ощущается.

#1
15:13, 1 июля 2015

Angle в начале приводит все в OpenglES, а потом транслирует уже в DX11. А это уже другой конвеер. С большей вероятностью - где-то вы лажаете, и напарываетесь на грабли. В презе Angle было несколько хинтов которые для OpenGL вроде как норм, а DX их плохо жует (или по другому жует) - с тех пор утекло много воды, но ANGLE как работал "странно", так и продолжает.

Правильным решением будет скачать ANGLE себе, скомпилить и продебажить свои кейсы. Либо воспользоваться профайлом хрома - быть может где-то будет явный лаг.
PS: ANGLE эта такая хрень, что используется во всех виндовых браузерах - и в ФФ и в ИЕ тоже. С ним надо как-то мириться.
PPS: Браузер сам использует ANGLE для рендеринга, возможно вы с браузером подрались. Все бывает.

#2
16:33, 1 июля 2015

в ИЕ вроде бы своя реализация. бывало я репортил ANGLE баги, которые репродюсились одновременно в хроме и ФФ, а в ИЕ норм всё было, и наоборот. но все они работают через дх11 (если не хп).

#3
20:11, 1 июля 2015

Kashey
Да понятно, что напарываюсь на грабли, понять бы на какие. Профайлер в хром смотрел, там всё в порядке. На текущий момент похоже, что glBufferData/glBufferSubData тормозят при определенных размерах буфера. Ну кроме того, что они тормозят сами по себе. Буду копать дальше.

Mr F
Точно не знаю, через что работает IE, но в списке gl-расширений на нем присутствует GL_ANGLE_instanced_arrays, так что похоже тоже ANGLE. Или может для совместимости добавили.

#4
21:40, 1 июля 2015

А формат данных какой? Ходили слухи что ANGLE не любит когда весь верктекс в одном struct лежит (stride в общем). Но это от карты/драйвера зависит.
Вообще там все очень платформо зависимо - ты в начале на соседе проверь, вдруг это именно тебе не повезло.

#5
21:41, 1 июля 2015

Апдейт: а точно, все баги, глюки и тормоза именно на интеловских дровах :( Даже в официальных багтрекерах. В том числе часто связано с самим браузером - проблемы уже при "склейке" слоев рендеринга на странице.

#6
0:03, 2 июля 2015

alorken
> GL_ANGLE_instanced_arrays,
он везде есть, даже на андройдах, ANGLE просто предложил расширение вебгл-менам, и они его стандартизировали

#7
12:52, 2 июля 2015

Окей. Разобрался. Проблема была в флаге usage функций glBufferData/glBufferSubData. У меня было GL_STATIC_DRAW. На реально opengl-ных рендерах толку от этого флага я нигде не замечал, поэтому на этот параметр внимания и не обращал. Но для ANGLE разница очень серьезная. Так что просто поменял на GL_DYNAMIC_DRAW и фпс сразу 60. Получается, что это я налажал.

Это я смотрел исходники ANGLE, там действительно проверяется этот usage и поведение разное.

ПрограммированиеФорумГрафика

Тема в архиве.