Skip to content

Commit b91e9c5

Browse files
Improved performance, drawing functions now take pixels parameters instead of creating new vectors. Performance improved from 5.6ms to 2.6ms
1 parent 7ca1324 commit b91e9c5

20 files changed

Lines changed: 123 additions & 247 deletions

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
build/
22
.cache/
33
.github/
4+
dependencies.lock

main/include/Renderer.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class Renderer {
1616
Renderer(int width, int height,
1717
const Color &backgroundColor = Color(255, 255, 255, 1.0f));
1818

19-
Pixels render(const std::vector<Collection *> &collections,
19+
void render(Pixels &pixels, const std::vector<Collection *> &collections,
2020
const DrawOptions &options);
2121

2222
static Pixels blendPixels(const Pixels &pixels);

main/include/Shapes/Circle.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ class Circle : public Shape {
1818
public:
1919
Circle(const CircleParams &params);
2020
Collider *defaultCollider() override;
21-
Pixels drawAntiAliased() override;
22-
Pixels drawAliased() override;
21+
void drawAntiAliased(Pixels &pixels) override;
22+
void drawAliased(Pixels &pixels) override;
2323
int getRadius() const;
2424

2525
private:

main/include/Shapes/Collection.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ class Collection : public Shape {
1313
Collider *defaultCollider() override;
1414
void addShape(Shape *shape);
1515
std::vector<Shape *> getShapes() { return shapes; }
16-
Pixels drawAntiAliased() override;
17-
Pixels drawAliased() override;
16+
void drawAntiAliased(Pixels &pixels) override;
17+
void drawAliased(Pixels &pixels) override;
1818
};

main/include/Shapes/LineSegment.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@ class LineSegment : public Shape {
1818
public:
1919
LineSegment(const LineSegmentParams &params);
2020
Collider *defaultCollider() override;
21-
Pixels drawAntiAliased() override;
22-
Pixels drawAliased() override;
21+
void drawAntiAliased(Pixels &pixels) override;
22+
void drawAliased(Pixels &pixels) override;
2323
};

main/include/Shapes/Point.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ class Point : public Shape {
55
public:
66
Point(const ShapeParams &params);
77
Collider *defaultCollider() override;
8-
Pixels drawAntiAliased() override;
9-
Pixels drawAliased() override;
8+
void drawAntiAliased(Pixels &pixels) override;
9+
void drawAliased(Pixels &pixels) override;
1010
};

main/include/Shapes/Polygon.hpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,14 @@ class Polygon : public Shape {
2121
public:
2222
Polygon(const PolygonParams &params);
2323
Collider *defaultCollider() override;
24-
Pixels drawAntiAliased() override;
25-
Pixels drawAliased() override;
24+
void drawAntiAliased(Pixels &pixels) override;
25+
void drawAliased(Pixels &pixels) override;
2626

2727
private:
2828
std::vector<std::pair<int, int>> getTransformedVertices();
2929
std::vector<LineSegment *> getSegments();
30-
Pixels getInsidePoints(const std::vector<std::pair<int, int>> &vertices);
31-
Pixels getInsidePointsWithTexture(
32-
const std::vector<std::pair<int, int>> &vertices);
30+
void getInsidePoints(Pixels &points,
31+
const std::vector<std::pair<int, int>> &vertices);
32+
void getInsidePointsWithTexture(
33+
Pixels &points, const std::vector<std::pair<int, int>> &vertices);
3334
};

main/include/Shapes/Rectangle.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@ class Rectangle : public Shape {
2121
public:
2222
Rectangle(const RectangleParams &params);
2323
Collider *defaultCollider() override;
24-
Pixels drawAntiAliased() override;
25-
Pixels drawAliased() override;
24+
void drawAntiAliased(Pixels &pixels) override;
25+
void drawAliased(Pixels &pixels) override;
2626

2727
private:
2828
std::vector<std::pair<int, int>> getVertices();
29-
Pixels getInsidePoints(const std::vector<std::pair<int, int>> &vertices);
29+
void getInsidePoints(Pixels &points,
30+
const std::vector<std::pair<int, int>> &vertices);
3031
};

main/include/Shapes/RegularPolygon.hpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,18 @@ class RegularPolygon : public Shape {
3636
RegularPolygon(const RegularPolygonSideParams &params);
3737
RegularPolygon(const RegularPolygonRadiusParams &params);
3838
Collider *defaultCollider() override;
39-
Pixels drawAntiAliased() override;
40-
Pixels drawAliased() override;
39+
void drawAntiAliased(Pixels &pixels) override;
40+
void drawAliased(Pixels &pixels) override;
4141
int getSides() const;
4242
int getRadius();
4343

4444
private:
4545
int calculateRadiusFromSideLength(int sideLength);
4646
std::vector<std::pair<int, int>> getVertices();
4747
std::vector<LineSegment *> getSegments();
48-
Pixels getInsidePoints(const std::vector<std::pair<int, int>> &vertices);
48+
void getInsidePoints(Pixels &points,
49+
const std::vector<std::pair<int, int>> &vertices);
4950

50-
Pixels getInsidePointsWithTexture(
51-
const std::vector<std::pair<int, int>> &vertices);
51+
void getInsidePointsWithTexture(
52+
Pixels &points, const std::vector<std::pair<int, int>> &vertices);
5253
};

main/include/Shapes/Shape.hpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ class Shape {
8282
protected:
8383
std::pair<int, int> getTransformedPosition(int x, int y);
8484

85-
Pixels bresenhamLine(int x0, int y0, int x1, int y1);
86-
Pixels wuLine(int x0, int y0, int x1, int y1);
85+
void bresenhamLine(Pixels &points, int x0, int y0, int x1, int y1);
86+
void wuLine(Pixels &points, int x0, int y0, int x1, int y1);
8787
void addPixel(Pixels &points, int x, int y, float alpha);
8888

8989
public:
@@ -98,10 +98,11 @@ class Shape {
9898
void rotate(float angle);
9999
void setPivot(int x, int y);
100100

101-
Pixels draw(const DrawOptions &options);
102-
virtual Pixels drawAntiAliased() = 0;
103-
virtual Pixels drawAliased() = 0;
101+
void draw(Pixels &pixels, const DrawOptions &options);
102+
virtual void drawAntiAliased(Pixels &pixels) = 0;
103+
virtual void drawAliased(Pixels &pixels) = 0;
104104

105105
protected:
106-
Pixels getInsidePoints(const std::vector<std::pair<int, int>> &vertices);
106+
void getInsidePoints(Pixels &points,
107+
const std::vector<std::pair<int, int>> &vertices);
107108
};

0 commit comments

Comments
 (0)