Skip to content

Commit

Permalink
libgui|VertexBuilder: Making a 2D ring or circle
Browse files Browse the repository at this point in the history
  • Loading branch information
skyjake committed Aug 2, 2013
1 parent a05c735 commit 1bf3979
Showing 1 changed file with 25 additions and 0 deletions.
25 changes: 25 additions & 0 deletions doomsday/libgui/include/de/gui/vertexbuilder.h
Expand Up @@ -61,6 +61,31 @@ struct VertexBuilder
v.pos = rect.bottomRight; v.texCoord = uv.bottomRight; quad << v;
return *this += quad;
}
Vertices &makeRing(Vector2f const &center, float outerRadius, float innerRadius,
int divisions, Vector4f const &color, Rectanglef const &uv,
float innerTexRadius = -1) {
if(innerTexRadius < 0) innerTexRadius = innerRadius / outerRadius;
Vertices ring;
VertexType v;
v.rgba = color;
for(int i = 0; i <= divisions; ++i) {
float const ang = 2 * PI * i / divisions;
Vector2f r(cos(ang), sin(ang));
// Outer.
v.pos = center + r * outerRadius;
v.texCoord = uv.middle() + r * .5f * uv.size();
ring << v;
// Inner.
v.pos = center + r * innerRadius;
v.texCoord = uv.middle() + r * (.5f * innerTexRadius) * uv.size();
ring << v;
}
return *this += ring;
}
Vertices &makeRing(Vector2f const &center, float outerRadius, float innerRadius,
int divisions, Vector4f const &color, Vector2f const &uv) {
return makeRing(center, outerRadius, innerRadius, divisions, color, Rectanglef(uv, uv));
}
Vertices &makeFlexibleFrame(Rectanglef const &rect, float cornerThickness,
Vector4f const &color, Rectanglef const &uv) {
Vector2f const uvOff = uv.size() / 2;
Expand Down

0 comments on commit 1bf3979

Please sign in to comment.