summaryrefslogtreecommitdiffhomepage
path: root/src/shapes.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/shapes.c')
-rw-r--r--src/shapes.c106
1 files changed, 57 insertions, 49 deletions
diff --git a/src/shapes.c b/src/shapes.c
index 80808526..83cdbe98 100644
--- a/src/shapes.c
+++ b/src/shapes.c
@@ -130,9 +130,9 @@ void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color)
rlEnableTexture(GetShapesTexture().id);
rlPushMatrix();
- rlTranslatef((float)startPos.x, (float)startPos.y, 0);
- rlRotatef(RAD2DEG*angle, 0, 0, 1);
- rlTranslatef(0, (thick > 1.0f) ? -thick/2.0f : -1.0f, 0);
+ rlTranslatef((float)startPos.x, (float)startPos.y, 0.0f);
+ rlRotatef(RAD2DEG*angle, 0.0f, 0.0f, 1.0f);
+ rlTranslatef(0, (thick > 1.0f) ? -thick/2.0f : -1.0f, 0.0f);
rlBegin(RL_QUADS);
rlColor4ub(color.r, color.g, color.b, color.a);
@@ -186,7 +186,7 @@ void DrawCircle(int centerX, int centerY, float radius, Color color)
// NOTE: Gradient goes from center (color1) to border (color2)
void DrawCircleGradient(int centerX, int centerY, float radius, Color color1, Color color2)
{
- if (rlCheckBufferLimit(RL_TRIANGLES, 3*36)) rlglDraw();
+ if (rlCheckBufferLimit(3*36)) rlglDraw();
rlBegin(RL_TRIANGLES);
for (int i = 0; i < 360; i += 10)
@@ -206,7 +206,7 @@ void DrawCircleGradient(int centerX, int centerY, float radius, Color color1, Co
void DrawCircleV(Vector2 center, float radius, Color color)
{
#if defined(SUPPORT_QUADS_DRAW_MODE)
- if (rlCheckBufferLimit(RL_QUADS, 4*(36/2))) rlglDraw();
+ if (rlCheckBufferLimit(4*(36/2))) rlglDraw();
rlEnableTexture(GetShapesTexture().id);
@@ -231,7 +231,7 @@ void DrawCircleV(Vector2 center, float radius, Color color)
rlDisableTexture();
#else
- if (rlCheckBufferLimit(RL_TRIANGLES, 3*(36/2))) rlglDraw();
+ if (rlCheckBufferLimit(3*(36/2))) rlglDraw();
rlBegin(RL_TRIANGLES);
for (int i = 0; i < 360; i += 10)
@@ -249,7 +249,7 @@ void DrawCircleV(Vector2 center, float radius, Color color)
// Draw circle outline
void DrawCircleLines(int centerX, int centerY, float radius, Color color)
{
- if (rlCheckBufferLimit(RL_LINES, 2*36)) rlglDraw();
+ if (rlCheckBufferLimit(2*36)) rlglDraw();
rlBegin(RL_LINES);
rlColor4ub(color.r, color.g, color.b, color.a);
@@ -273,48 +273,40 @@ void DrawRectangle(int posX, int posY, int width, int height, Color color)
// NOTE: On OpenGL 3.3 and ES2 we use QUADS to avoid drawing order issues (view rlglDraw)
void DrawRectangleV(Vector2 position, Vector2 size, Color color)
{
- Color colors[4] = { color, color, color, color };
-
- DrawRectanglePro((Rectangle){ position.x, position.y, size.x, size.y }, (Vector2){ 0.0f, 0.0f }, 0.0f, colors);
+ DrawRectanglePro((Rectangle){ position.x, position.y, size.x, size.y }, (Vector2){ 0.0f, 0.0f }, 0.0f, color);
}
// Draw a color-filled rectangle
void DrawRectangleRec(Rectangle rec, Color color)
{
- Color colors[4] = { color, color, color, color };
-
- DrawRectanglePro(rec, (Vector2){ 0.0f, 0.0f }, 0.0f, colors);
+ DrawRectanglePro(rec, (Vector2){ 0.0f, 0.0f }, 0.0f, color);
}
// Draw a color-filled rectangle with pro parameters
-void DrawRectanglePro(Rectangle rec, Vector2 origin, float rotation, Color colors[4])
+void DrawRectanglePro(Rectangle rec, Vector2 origin, float rotation, Color color)
{
rlEnableTexture(GetShapesTexture().id);
rlPushMatrix();
- //rlTranslatef(rec.x, rec.y, 0); // Already considered on vertex position
- rlRotatef(rotation, 0, 0, 1);
- rlTranslatef(-origin.x, -origin.y, 0);
+ rlTranslatef(rec.x, rec.y, 0.0f);
+ rlRotatef(rotation, 0.0f, 0.0f, 1.0f);
+ rlTranslatef(-origin.x, -origin.y, 0.0f);
rlBegin(RL_QUADS);
rlNormal3f(0.0f, 0.0f, 1.0f);
+ rlColor4ub(color.r, color.g, color.b, color.a);
- // NOTE: Default raylib font character 95 is a white square
- rlColor4ub(colors[0].r, colors[0].g, colors[0].b, colors[0].a);
rlTexCoord2f(recTexShapes.x/texShapes.width, recTexShapes.y/texShapes.height);
- rlVertex2f(rec.x, rec.y);
-
- rlColor4ub(colors[1].r, colors[1].g, colors[1].b, colors[1].a);
+ rlVertex2f(0.0f, 0.0f);
+
rlTexCoord2f(recTexShapes.x/texShapes.width, (recTexShapes.y + recTexShapes.height)/texShapes.height);
- rlVertex2f(rec.x, rec.y + rec.height);
-
- rlColor4ub(colors[2].r, colors[2].g, colors[2].b, colors[2].a);
+ rlVertex2f(0.0f, rec.height);
+
rlTexCoord2f((recTexShapes.x + recTexShapes.width)/texShapes.width, (recTexShapes.y + recTexShapes.height)/texShapes.height);
- rlVertex2f(rec.x + rec.width, rec.y + rec.height);
+ rlVertex2f(rec.width, rec.height);
- rlColor4ub(colors[3].r, colors[3].g, colors[3].b, colors[3].a);
rlTexCoord2f((recTexShapes.x + recTexShapes.width)/texShapes.width, recTexShapes.y/texShapes.height);
- rlVertex2f(rec.x + rec.width, rec.y);
+ rlVertex2f(rec.width, 0.0f);
rlEnd();
rlPopMatrix();
@@ -339,9 +331,32 @@ void DrawRectangleGradientH(int posX, int posY, int width, int height, Color col
// NOTE: Colors refer to corners, starting at top-lef corner and counter-clockwise
void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4)
{
- Color colors[4] = { col1, col2, col3, col4 };
+ rlEnableTexture(GetShapesTexture().id);
+
+ rlPushMatrix();
+ rlBegin(RL_QUADS);
+ rlNormal3f(0.0f, 0.0f, 1.0f);
+
+ // NOTE: Default raylib font character 95 is a white square
+ rlColor4ub(col1.r, col1.g, col1.b, col1.a);
+ rlTexCoord2f(recTexShapes.x/texShapes.width, recTexShapes.y/texShapes.height);
+ rlVertex2f(rec.x, rec.y);
+
+ rlColor4ub(col2.r, col2.g, col2.b, col2.a);
+ rlTexCoord2f(recTexShapes.x/texShapes.width, (recTexShapes.y + recTexShapes.height)/texShapes.height);
+ rlVertex2f(rec.x, rec.y + rec.height);
+
+ rlColor4ub(col3.r, col3.g, col3.b, col3.a);
+ rlTexCoord2f((recTexShapes.x + recTexShapes.width)/texShapes.width, (recTexShapes.y + recTexShapes.height)/texShapes.height);
+ rlVertex2f(rec.x + rec.width, rec.y + rec.height);
- DrawRectanglePro(rec, (Vector2){ 0.0f, 0.0f }, 0.0f, colors);
+ rlColor4ub(col4.r, col4.g, col4.b, col4.a);
+ rlTexCoord2f((recTexShapes.x + recTexShapes.width)/texShapes.width, recTexShapes.y/texShapes.height);
+ rlVertex2f(rec.x + rec.width, rec.y);
+ rlEnd();
+ rlPopMatrix();
+
+ rlDisableTexture();
}
// Draw rectangle outline
@@ -440,11 +455,11 @@ void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color col
{
if (sides < 3) sides = 3;
- if (rlCheckBufferLimit(RL_QUADS, 4*(360/sides))) rlglDraw();
+ if (rlCheckBufferLimit(4*(360/sides))) rlglDraw();
rlPushMatrix();
- rlTranslatef(center.x, center.y, 0.0);
- rlRotatef(rotation, 0, 0, 1);
+ rlTranslatef(center.x, center.y, 0.0f);
+ rlRotatef(rotation, 0.0f, 0.0f, 1.0f);
#if defined(SUPPORT_QUADS_DRAW_MODE)
rlEnableTexture(GetShapesTexture().id);
@@ -488,35 +503,28 @@ void DrawPolyEx(Vector2 *points, int pointsCount, Color color)
{
if (pointsCount >= 3)
{
- if (rlCheckBufferLimit(RL_QUADS, pointsCount)) rlglDraw();
+ if (rlCheckBufferLimit((pointsCount - 2)*4)) rlglDraw();
-#if defined(SUPPORT_QUADS_DRAW_MODE)
rlEnableTexture(GetShapesTexture().id);
-
rlBegin(RL_QUADS);
rlColor4ub(color.r, color.g, color.b, color.a);
for (int i = 1; i < pointsCount - 1; i++)
{
+ rlTexCoord2f(recTexShapes.x/texShapes.width, recTexShapes.y/texShapes.height);
rlVertex2f(points[0].x, points[0].y);
+
+ rlTexCoord2f(recTexShapes.x/texShapes.width, (recTexShapes.y + recTexShapes.height)/texShapes.height);
rlVertex2f(points[i].x, points[i].y);
- rlVertex2f(points[i].x, points[i].y);
+
+ rlTexCoord2f((recTexShapes.x + recTexShapes.width)/texShapes.width, (recTexShapes.y + recTexShapes.height)/texShapes.height);
rlVertex2f(points[i + 1].x, points[i + 1].y);
- }
- rlEnd();
- rlDisableTexture();
-#else
- rlBegin(RL_TRIANGLES);
- rlColor4ub(color.r, color.g, color.b, color.a);
- for (int i = 1; i < pointsCount - 1; i++)
- {
- rlVertex2f(points[0].x, points[0].y);
- rlVertex2f(points[i].x, points[i].y);
+ rlTexCoord2f((recTexShapes.x + recTexShapes.width)/texShapes.width, recTexShapes.y/texShapes.height);
rlVertex2f(points[i + 1].x, points[i + 1].y);
}
rlEnd();
-#endif
+ rlDisableTexture();
}
}
@@ -525,7 +533,7 @@ void DrawPolyExLines(Vector2 *points, int pointsCount, Color color)
{
if (pointsCount >= 2)
{
- if (rlCheckBufferLimit(RL_LINES, pointsCount)) rlglDraw();
+ if (rlCheckBufferLimit(pointsCount)) rlglDraw();
rlBegin(RL_LINES);
rlColor4ub(color.r, color.g, color.b, color.a);