Как OpenGL ES работает с такой скоростью?
Изучаю по книге OpenGL ES (для андроида). Автор описывает вершинный и фрагментный шейдера. И пишет, что вершинный шейдер выполняется для каждой вершины. Т.е. если нужно нарисовать треугольник, то вершинный шейдер должен выполниться 3 раза. С этим всё понятно. Потом автор пишет, что фрагментный шейдер выподняется для каждого фрагмента объекта. При этом автор подчёркивает, что фрагменты эквивалентны пикселям экрана устройства. Я делаю вывод, что для того, чтобы нарисовать треугольник который занимает половину экрана фрагментный шейдер будет вызван столько раз сколько пикселей на экране делённые на 2. А если я нарисую 2 треугольника занимающие весь экран, то фр.шейдер вызовется столько раз сколько пикселей на экране. Если на моём устройстве разрешение 1280х720, то шейдер будет вызван примерно 1 млн. раз!!! И это должно происходить в каждом кадре. Частота кадров у большинства устройств 60кд./сек. Значит устройство должно выполнить фрагментный шейдер 60млн. раз секунду. Подскажите, правильно ли я посчитал скорость работы OpenGL ES Если правильно, то объясните, как смартфон (не самый навороченный) может работать с такой скоростью?
Ответы (1 шт):
Ну во первых фрагментный шейдер вызовется только для пикселей вашего треугольника, всё за их пределами отсечётся, во вторых видеоускорители хорошо заточены под многопоточность, поэтому фрагментый шейдер будет исполняться сразу во множестве потоков.