Оптимизация преобразования вида модели в GLSL для 2D - PullRequest
4 голосов
/ 27 марта 2011

Итак, стандартный способ преобразования вершин и последующего перехода к фрагментному шейдеру в GLSL выглядит примерно так:

uniform mat4 u_modelview;
attribute vec4 a_position;

void main() {
    gl_Position = u_modelview * a_position;
}

Однако я работаю в 2D, поэтому в матрице 4x4 есть избыточность.Будет ли для меня более эффективным сделать это?

uniform mat3 u_modelview;
attribute vec3 a_position;

void main() {
    gl_Position = vec4(u_modelview * a_position, 1.0);
}

gl_Position требует 4-компонентный вектор, поэтому при выводе требуется дополнительная операция.Тем не менее, умножение матриц для 9 элементов вместо 16. Могу ли я сделать лучше?

Ответы [ 2 ]

4 голосов
/ 27 марта 2011

Я думаю, что графическое оборудование трансформируется с матрицами 3x3 и 4x4 за одинаковое количество времени.У вас есть проверенное узкое место в процессе преобразования вершин?Обычно замедление появляется на фрагментном шейдере, а не на вершине

1 голос
/ 27 марта 2011

Это зависит. Если у вас есть сложная информация для каждой вершины, и для вас это является узким местом, то, если вы уменьшите данные для каждой вершины, вы увидите некоторое увеличение скорости.

Лучше всего настроить тест и измерить его в обоих направлениях.

...