summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--examples/shapes/shapes_basic_shapes.c23
-rw-r--r--src/rshapes.c155
2 files changed, 83 insertions, 95 deletions
diff --git a/examples/shapes/shapes_basic_shapes.c b/examples/shapes/shapes_basic_shapes.c
index 5b02a549..d06c2ee1 100644
--- a/examples/shapes/shapes_basic_shapes.c
+++ b/examples/shapes/shapes_basic_shapes.c
@@ -2,7 +2,7 @@
*
* raylib [shapes] example - Draw basic shapes 2d (rectangle, circle, line...)
*
-* Example originally created with raylib 1.0, last time updated with raylib 4.0
+* Example originally created with raylib 1.0, last time updated with raylib 4.2
*
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
* BSD-like license that allows static linking with closed source software
@@ -25,6 +25,8 @@ int main(void)
InitWindow(screenWidth, screenHeight, "raylib [shapes] example - basic shapes drawing");
+ float rotation = 0.0f;
+
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
@@ -33,7 +35,7 @@ int main(void)
{
// Update
//----------------------------------------------------------------------------------
- // TODO: Update your variables here
+ rotation += 0.2f;
//----------------------------------------------------------------------------------
// Draw
@@ -55,17 +57,18 @@ int main(void)
DrawRectangleLines(screenWidth/4*2 - 40, 320, 80, 60, ORANGE); // NOTE: Uses QUADS internally, not lines
// Triangle shapes and lines
- DrawTriangle((Vector2){screenWidth/4.0f *3.0f, 80.0f},
- (Vector2){screenWidth/4.0f *3.0f - 60.0f, 150.0f},
- (Vector2){screenWidth/4.0f *3.0f + 60.0f, 150.0f}, VIOLET);
+ DrawTriangle((Vector2){ screenWidth/4.0f *3.0f, 80.0f },
+ (Vector2){ screenWidth/4.0f *3.0f - 60.0f, 150.0f },
+ (Vector2){ screenWidth/4.0f *3.0f + 60.0f, 150.0f }, VIOLET);
- DrawTriangleLines((Vector2){screenWidth/4.0f*3.0f, 160.0f},
- (Vector2){screenWidth/4.0f*3.0f - 20.0f, 230.0f},
- (Vector2){screenWidth/4.0f*3.0f + 20.0f, 230.0f}, DARKBLUE);
+ DrawTriangleLines((Vector2){ screenWidth/4.0f*3.0f, 160.0f },
+ (Vector2){ screenWidth/4.0f*3.0f - 20.0f, 230.0f },
+ (Vector2){ screenWidth/4.0f*3.0f + 20.0f, 230.0f }, DARKBLUE);
// Polygon shapes and lines
- DrawPoly((Vector2){screenWidth/4.0f*3, 320}, 6, 80, 0, BROWN);
- DrawPolyLinesEx((Vector2){screenWidth/4.0f*3, 320}, 6, 80, 0, 6, BEIGE);
+ DrawPoly((Vector2){ screenWidth/4.0f*3, 330 }, 6, 80, rotation, BROWN);
+ DrawPolyLines((Vector2){ screenWidth/4.0f*3, 330 }, 6, 90, rotation, BROWN);
+ DrawPolyLinesEx((Vector2){ screenWidth/4.0f*3, 330 }, 6, 85, rotation, 6, BEIGE);
// NOTE: We draw all LINES based shapes together to optimize internal drawing,
// this way, all LINES are rendered in a single draw pass
diff --git a/src/rshapes.c b/src/rshapes.c
index 458569a5..d6e4da22 100644
--- a/src/rshapes.c
+++ b/src/rshapes.c
@@ -1395,129 +1395,114 @@ void DrawTriangleStrip(Vector2 *points, int pointCount, Color color)
void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color color)
{
if (sides < 3) sides = 3;
- float centralAngle = 0.0f;
-
- rlPushMatrix();
- rlTranslatef(center.x, center.y, 0.0f);
- rlRotatef(rotation, 0.0f, 0.0f, 1.0f);
+ float centralAngle = rotation;
#if defined(SUPPORT_QUADS_DRAW_MODE)
- rlSetTexture(texShapes.id);
+ rlSetTexture(texShapes.id);
- rlBegin(RL_QUADS);
- for (int i = 0; i < sides; i++)
- {
- rlColor4ub(color.r, color.g, color.b, color.a);
+ rlBegin(RL_QUADS);
+ for (int i = 0; i < sides; i++)
+ {
+ rlColor4ub(color.r, color.g, color.b, color.a);
- rlTexCoord2f(texShapesRec.x/texShapes.width, texShapesRec.y/texShapes.height);
- rlVertex2f(0, 0);
+ rlTexCoord2f(texShapesRec.x/texShapes.width, texShapesRec.y/texShapes.height);
+ rlVertex2f(center.x, center.y);
- rlTexCoord2f(texShapesRec.x/texShapes.width, (texShapesRec.y + texShapesRec.height)/texShapes.height);
- rlVertex2f(sinf(DEG2RAD*centralAngle)*radius, cosf(DEG2RAD*centralAngle)*radius);
+ rlTexCoord2f(texShapesRec.x/texShapes.width, (texShapesRec.y + texShapesRec.height)/texShapes.height);
+ rlVertex2f(center.x + sinf(DEG2RAD*centralAngle)*radius, center.y + cosf(DEG2RAD*centralAngle)*radius);
- rlTexCoord2f((texShapesRec.x + texShapesRec.width)/texShapes.width, (texShapesRec.y + texShapesRec.height)/texShapes.height);
- rlVertex2f(sinf(DEG2RAD*centralAngle)*radius, cosf(DEG2RAD*centralAngle)*radius);
+ rlTexCoord2f((texShapesRec.x + texShapesRec.width)/texShapes.width, (texShapesRec.y + texShapesRec.height)/texShapes.height);
+ rlVertex2f(center.x + sinf(DEG2RAD*centralAngle)*radius, center.y + cosf(DEG2RAD*centralAngle)*radius);
- centralAngle += 360.0f/(float)sides;
- rlTexCoord2f((texShapesRec.x + texShapesRec.width)/texShapes.width, texShapesRec.y/texShapes.height);
- rlVertex2f(sinf(DEG2RAD*centralAngle)*radius, cosf(DEG2RAD*centralAngle)*radius);
- }
- rlEnd();
- rlSetTexture(0);
+ centralAngle += 360.0f/(float)sides;
+ rlTexCoord2f((texShapesRec.x + texShapesRec.width)/texShapes.width, texShapesRec.y/texShapes.height);
+ rlVertex2f(center.x + sinf(DEG2RAD*centralAngle)*radius, center.y + cosf(DEG2RAD*centralAngle)*radius);
+ }
+ rlEnd();
+ rlSetTexture(0);
#else
- rlBegin(RL_TRIANGLES);
- for (int i = 0; i < sides; i++)
- {
- rlColor4ub(color.r, color.g, color.b, color.a);
+ rlBegin(RL_TRIANGLES);
+ for (int i = 0; i < sides; i++)
+ {
+ rlColor4ub(color.r, color.g, color.b, color.a);
- rlVertex2f(0, 0);
- rlVertex2f(sinf(DEG2RAD*centralAngle)*radius, cosf(DEG2RAD*centralAngle)*radius);
+ rlVertex2f(center.x, center.y);
+ rlVertex2f(center.x + sinf(DEG2RAD*centralAngle)*radius, center.y + cosf(DEG2RAD*centralAngle)*radius);
- centralAngle += 360.0f/(float)sides;
- rlVertex2f(sinf(DEG2RAD*centralAngle)*radius, cosf(DEG2RAD*centralAngle)*radius);
- }
- rlEnd();
+ centralAngle += 360.0f/(float)sides;
+ rlVertex2f(center.x + sinf(DEG2RAD*centralAngle)*radius, center.y + cosf(DEG2RAD*centralAngle)*radius);
+ }
+ rlEnd();
#endif
- rlPopMatrix();
}
// Draw a polygon outline of n sides
void DrawPolyLines(Vector2 center, int sides, float radius, float rotation, Color color)
{
if (sides < 3) sides = 3;
- float centralAngle = 0.0f;
+ float centralAngle = rotation;
- rlPushMatrix();
- rlTranslatef(center.x, center.y, 0.0f);
- rlRotatef(rotation, 0.0f, 0.0f, 1.0f);
-
- rlBegin(RL_LINES);
- for (int i = 0; i < sides; i++)
- {
- rlColor4ub(color.r, color.g, color.b, color.a);
+ rlBegin(RL_LINES);
+ for (int i = 0; i < sides; i++)
+ {
+ rlColor4ub(color.r, color.g, color.b, color.a);
- rlVertex2f(sinf(DEG2RAD*centralAngle)*radius, cosf(DEG2RAD*centralAngle)*radius);
- centralAngle += 360.0f/(float)sides;
- rlVertex2f(sinf(DEG2RAD*centralAngle)*radius, cosf(DEG2RAD*centralAngle)*radius);
- }
- rlEnd();
- rlPopMatrix();
+ rlVertex2f(center.x + sinf(DEG2RAD*centralAngle)*radius, center.y + cosf(DEG2RAD*centralAngle)*radius);
+ centralAngle += 360.0f/(float)sides;
+ rlVertex2f(center.x + sinf(DEG2RAD*centralAngle)*radius, center.y + cosf(DEG2RAD*centralAngle)*radius);
+ }
+ rlEnd();
}
void DrawPolyLinesEx(Vector2 center, int sides, float radius, float rotation, float lineThick, Color color)
{
if (sides < 3) sides = 3;
- float centralAngle = 0.0f;
+ float centralAngle = rotation;
float exteriorAngle = 360.0f/(float)sides;
float innerRadius = radius - (lineThick*cosf(DEG2RAD*exteriorAngle/2.0f));
- rlPushMatrix();
- rlTranslatef(center.x, center.y, 0.0f);
- rlRotatef(rotation, 0.0f, 0.0f, 1.0f);
-
#if defined(SUPPORT_QUADS_DRAW_MODE)
- rlSetTexture(texShapes.id);
+ rlSetTexture(texShapes.id);
- rlBegin(RL_QUADS);
- for (int i = 0; i < sides; i++)
- {
- rlColor4ub(color.r, color.g, color.b, color.a);
+ rlBegin(RL_QUADS);
+ for (int i = 0; i < sides; i++)
+ {
+ rlColor4ub(color.r, color.g, color.b, color.a);
- rlTexCoord2f(texShapesRec.x/texShapes.width, texShapesRec.y/texShapes.height);
- rlVertex2f(sinf(DEG2RAD*centralAngle)*innerRadius, cosf(DEG2RAD*centralAngle)*innerRadius);
+ rlTexCoord2f(texShapesRec.x/texShapes.width, texShapesRec.y/texShapes.height);
+ rlVertex2f(center.x + sinf(DEG2RAD*centralAngle)*innerRadius, center.y + cosf(DEG2RAD*centralAngle)*innerRadius);
- rlTexCoord2f(texShapesRec.x/texShapes.width, (texShapesRec.y + texShapesRec.height)/texShapes.height);
- rlVertex2f(sinf(DEG2RAD*centralAngle)*radius, cosf(DEG2RAD*centralAngle)*radius);
+ rlTexCoord2f(texShapesRec.x/texShapes.width, (texShapesRec.y + texShapesRec.height)/texShapes.height);
+ rlVertex2f(center.x + sinf(DEG2RAD*centralAngle)*radius, center.y + cosf(DEG2RAD*centralAngle)*radius);
- centralAngle += exteriorAngle;
- rlTexCoord2f((texShapesRec.x + texShapesRec.width)/texShapes.width, texShapesRec.y/texShapes.height);
- rlVertex2f(sinf(DEG2RAD*centralAngle)*radius, cosf(DEG2RAD*centralAngle)*radius);
+ centralAngle += exteriorAngle;
+ rlTexCoord2f((texShapesRec.x + texShapesRec.width)/texShapes.width, texShapesRec.y/texShapes.height);
+ rlVertex2f(center.x + sinf(DEG2RAD*centralAngle)*radius, center.y + cosf(DEG2RAD*centralAngle)*radius);
- rlTexCoord2f((texShapesRec.x + texShapesRec.width)/texShapes.width, (texShapesRec.y + texShapesRec.height)/texShapes.height);
- rlVertex2f(sinf(DEG2RAD*centralAngle)*innerRadius, cosf(DEG2RAD*centralAngle)*innerRadius);
- }
- rlEnd();
- rlSetTexture(0);
+ rlTexCoord2f((texShapesRec.x + texShapesRec.width)/texShapes.width, (texShapesRec.y + texShapesRec.height)/texShapes.height);
+ rlVertex2f(center.x + sinf(DEG2RAD*centralAngle)*innerRadius, center.y + cosf(DEG2RAD*centralAngle)*innerRadius);
+ }
+ rlEnd();
+ rlSetTexture(0);
#else
- rlBegin(RL_TRIANGLES);
- for (int i = 0; i < sides; i++)
- {
- rlColor4ub(color.r, color.g, color.b, color.a);
- float nextAngle = centralAngle + exteriorAngle;
+ rlBegin(RL_TRIANGLES);
+ for (int i = 0; i < sides; i++)
+ {
+ rlColor4ub(color.r, color.g, color.b, color.a);
+ float nextAngle = centralAngle + exteriorAngle;
- rlVertex2f(sinf(DEG2RAD*centralAngle)*radius, cosf(DEG2RAD*centralAngle)*radius);
- rlVertex2f(sinf(DEG2RAD*centralAngle)*innerRadius, cosf(DEG2RAD*centralAngle)*innerRadius);
- rlVertex2f(sinf(DEG2RAD*nextAngle)*radius, cosf(DEG2RAD*nextAngle)*radius);
+ rlVertex2f(center.x + sinf(DEG2RAD*centralAngle)*radius, center.y + cosf(DEG2RAD*centralAngle)*radius);
+ rlVertex2f(center.x + sinf(DEG2RAD*centralAngle)*innerRadius, center.y + cosf(DEG2RAD*centralAngle)*innerRadius);
+ rlVertex2f(center.x + sinf(DEG2RAD*nextAngle)*radius, center.y + cosf(DEG2RAD*nextAngle)*radius);
- rlVertex2f(sinf(DEG2RAD*centralAngle)*innerRadius, cosf(DEG2RAD*centralAngle)*innerRadius);
- rlVertex2f(sinf(DEG2RAD*nextAngle)*radius, cosf(DEG2RAD*nextAngle)*radius);
- rlVertex2f(sinf(DEG2RAD*nextAngle)*innerRadius, cosf(DEG2RAD*nextAngle)*innerRadius);
+ rlVertex2f(center.x + sinf(DEG2RAD*centralAngle)*innerRadius, center.y + cosf(DEG2RAD*centralAngle)*innerRadius);
+ rlVertex2f(center.x + sinf(DEG2RAD*nextAngle)*radius, center.y + cosf(DEG2RAD*nextAngle)*radius);
+ rlVertex2f(center.x + sinf(DEG2RAD*nextAngle)*innerRadius, center.y + cosf(DEG2RAD*nextAngle)*innerRadius);
- centralAngle = nextAngle;
- }
- rlEnd();
+ centralAngle = nextAngle;
+ }
+ rlEnd();
#endif
- rlPopMatrix();
}
//----------------------------------------------------------------------------------