|
@@ -29,6 +29,8 @@ uint32_t windowHeight = 600;
|
|
|
/***********************************************************************************************************************
|
|
|
* Functions
|
|
|
**********************************************************************************************************************/
|
|
|
+#define MAX(_a, _b) ((_a) < (_b)) ? (_b) : (_a)
|
|
|
+#define MIN(_a, _b) ((_a) > (_b)) ? (_b) : (_a)
|
|
|
|
|
|
bool initialiseWindow(bool fullScreen)
|
|
|
{
|
|
@@ -108,6 +110,40 @@ void drawPixel(uint32_t x, uint32_t y, uint32_t colour)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void drawVLine(uint32_t x, uint32_t y0, uint32_t y1, uint32_t colour)
|
|
|
+{
|
|
|
+ uint32_t i;
|
|
|
+ if (y0 > y1) { i = y0; y1 = y0; y0 = i; }
|
|
|
+
|
|
|
+ x = MIN(MAX(x, 0), windowWidth);
|
|
|
+ y0 = MAX(0, y0);
|
|
|
+ y1 = MIN(y1, windowHeight);
|
|
|
+
|
|
|
+ uint32_t *currentPos = &frameBuffer[x + (y0 * windowWidth)];
|
|
|
+
|
|
|
+ for(i = y0; i < y1; i++, currentPos+=windowWidth)
|
|
|
+ {
|
|
|
+ *currentPos = colour;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void drawHLine(uint32_t x0, uint32_t y, uint32_t x1, uint32_t colour)
|
|
|
+{
|
|
|
+ uint32_t i;
|
|
|
+ if (x0 > x1) { i = x0; x1 = x0; x0 = i; }
|
|
|
+
|
|
|
+ x0 = MAX(0, x0);
|
|
|
+ x1 = MIN(x1, windowWidth);
|
|
|
+ y = MIN(MAX(y, 0), windowHeight);
|
|
|
+
|
|
|
+ uint32_t *currentPos = &frameBuffer[x0 + (y * windowWidth)];
|
|
|
+
|
|
|
+ for(i = x0; i < x1; i++, currentPos++)
|
|
|
+ {
|
|
|
+ *currentPos = colour;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void clearFrameBuffer(uint32_t colour)
|
|
|
{
|
|
|
uint32_t x, y;
|
|
@@ -137,14 +173,11 @@ void drawGrid(int spacing, uint32_t colour)
|
|
|
|
|
|
void drawRectangle(uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint32_t colour)
|
|
|
{
|
|
|
- uint32_t i, j;
|
|
|
-
|
|
|
+ uint32_t j;
|
|
|
+
|
|
|
for (j = 0 ; j < h ; j++)
|
|
|
{
|
|
|
- for (i = 0 ; i < w ; i++)
|
|
|
- {
|
|
|
- drawPixel(x + i, y + j, colour);
|
|
|
- }
|
|
|
+ drawHLine(x, y + j, x + w, colour);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -159,25 +192,25 @@ void drawLine(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t colou
|
|
|
double incrementX = deltaX / (double)sideLength;
|
|
|
double incrementY = deltaY / (double)sideLength;
|
|
|
|
|
|
-#if 0
|
|
|
if (deltaX == 0)
|
|
|
{
|
|
|
- drawHLine()
|
|
|
+ drawVLine(x0, y0, y1, colour);
|
|
|
}
|
|
|
- if (deltaY == 0)
|
|
|
+ else if (deltaY == 0)
|
|
|
{
|
|
|
- drawVLine()
|
|
|
+ drawHLine(x0, y0, x1, colour);
|
|
|
}
|
|
|
-#endif
|
|
|
-
|
|
|
- double currentX = x0;
|
|
|
- double currentY = y0;
|
|
|
-
|
|
|
- for(i = 0 ; i < sideLength ; i++)
|
|
|
+ else
|
|
|
{
|
|
|
- drawPixel(round(currentX), round(currentY), colour);
|
|
|
- currentX += incrementX;
|
|
|
- currentY += incrementY;
|
|
|
+ double currentX = x0;
|
|
|
+ double currentY = y0;
|
|
|
+
|
|
|
+ for (i = 0 ; i < sideLength ; i++)
|
|
|
+ {
|
|
|
+ drawPixel(round(currentX), round(currentY), colour);
|
|
|
+ currentX += incrementX;
|
|
|
+ currentY += incrementY;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|