add uv layout type for Circle shape

This commit is contained in:
Omar Mohamed Ali Mudhir
2017-01-17 20:02:15 +00:00
parent d5fed78bf5
commit f1e6fb7716
3 changed files with 32 additions and 21 deletions

View File

@@ -30,25 +30,27 @@ public:
class Circle : public Shape
{
void create_impl(float radius, int div, GLushort* idx, vertex_t* vertices);
void create_impl(float radius_out, float radius_in, int div, GLushort* idx, vertex_t* vertices);
public:
enum class kUVMapping: uint8_t { Planar, Tube };
template<int div>
bool create(float radius)
bool create(float radius, kUVMapping map)
{
static GLushort idx[div * 3 + div * 2];
static vertex_t vertices[div + 1];
create_impl(radius, div, idx, vertices);
create_impl(radius, div, idx, vertices, map);
return create_buffers(idx, vertices, sizeof(idx), sizeof(vertices));
}
template<int div>
bool create(float radius_out, float radius_in)
bool create(float radius_out, float radius_in, kUVMapping map)
{
static GLushort idx[div*6 + div*4];
static vertex_t vertices[div * 2];
create_impl(radius_out, radius_in, div, idx, vertices);
create_impl(radius_out, radius_in, div, idx, vertices, map);
return create_buffers(idx, vertices, sizeof(idx), sizeof(vertices));
}
private:
void create_impl(float radius, int div, GLushort* idx, vertex_t* vertices, kUVMapping map);
void create_impl(float radius_out, float radius_in, int div, GLushort* idx, vertex_t* vertices, kUVMapping map);
};
class Rounded : public Shape
@@ -68,13 +70,13 @@ public:
class Slice9 : public Shape
{
void create_impl(float w, float h, float r, GLushort* idx, vertex_t* vertices);
void create_impl(float w, float h, float r, float tr, GLushort* idx, vertex_t* vertices);
public:
bool create(float w, float h, float r)
bool create(float w, float h, float r, float tr)
{
static GLushort idx[3 * 3 * 6 + 4 * 2];
static vertex_t vertices[4 * 4];
create_impl(w, h, r, idx, vertices);
create_impl(w, h, r, tr, idx, vertices);
return create_buffers(idx, vertices, sizeof(idx), sizeof(vertices));
}
};