OpenGL:在着色器中执行TexCoord计算,不好的做法吗?

时间:2018-09-26 06:50:44

标签: c++ opengl shader

我目前正在为游戏开发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之前执行CPU端的计算,将会有多大的差异,值得优化吗?

1 个答案:

答案 0 :(得分:1)

修改网格的属性数据是可编程管线的主要目的,将其移动到CPU将转化为性能降级。另外,正如@BDL指出的那样,您将需要将数据重新发送到GPU,这是整个过程中最糟糕的部分。

另一种情况是,您对所有着色器实例执行的计算都相同,因此更适合在CPU上执行此类操作并将其统一上传。