OpenGL: выполнение вычислений TexCoord внутри шейдера, плохая практика? - PullRequest
0 голосов
/ 26 сентября 2018

В настоящее время я работаю над движком 2D-графики для игры.Мой шейдер принимает 2 UV-смещения и вычисляет TexCoord, применяя смещение.

Вот пример моего вершинного шейдера:

#shader vertex
#version 330 core

layout(location = 0) in vec4 position;
layout(location = 1) in vec2 texCoord;

out vec2 v_TexCoord;

uniform float u_Offset;
uniform float v_Offset;

void main()
{
    gl_Position = position;
    v_TexCoord = vec2(texCoord.x + u_Offset, texCoord.y + v_Offset);
};

Должен ли я беспокоиться об этом, что вызывает проблемы с производительностью вв долгосрочной перспективе?Насколько велика была бы разница, если бы я выполнял вычисления на стороне процессора перед передачей финального UV, и стоит ли это оптимизировать?

1 Ответ

0 голосов
/ 26 сентября 2018

Модификация данных атрибутов меша является основной целью программируемого конвейера, перемещение его в ЦП приведет к снижению производительности.Также, как отмечает @BDL, вам нужно будет повторно отправить данные в графический процессор, что является худшей частью всего процесса.

Другой случай, когда вы выполняете вычисления, которые являются одинаковыми для всех экземпляров шейдера, что будет более уместным для выполнения такой операции на ЦП и загрузки ее в виде униформы.

...