我发现在谈论画圆时,我得到的所有示例都是使用基本API来组成一个圆。
例如,按度和绘制线进行迭代。
我想知道是否有一个“内置”版本可以画一个圆?如您所见,迭代器可以通过使用GPU并行运行,这看起来更快。
还有,着色器可以并行进行吗?
而且,这是否意味着如果我真的很在意性能,我必须编写一个着色器吗?
答案 0 :(得分:1)
没有内置功能,但是您确实可以在GPU上执行循环。这就是this article使用几何着色器执行的操作,它看起来像这样:
#version 150 core
layout(points) in;
layout(line_strip, max_vertices = 64) out;
in vec3 vColor[];
in float vSides[];
out vec3 fColor;
const float PI = 3.1415926;
void main()
{
fColor = vColor[0];
// Safe, GLfloats can represent small integers exactly
for (int i = 0; i <= vSides[0]; i++) {
// Angle between each side in radians
float ang = PI * 2.0 / vSides[0] * i;
// Offset from center of point (0.3 to accomodate for aspect ratio)
vec4 offset = vec4(cos(ang) * 0.3, -sin(ang) * 0.4, 0.0, 0.0);
gl_Position = gl_in[0].gl_Position + offset;
EmitVertex();
}
EndPrimitive();
}
您会看到每个传入的顶点都围绕其位置转换为规则的多边形。