|
@@ -23,8 +23,8 @@ SDL_Window *window = NULL;
|
|
|
SDL_Renderer *renderer = NULL;
|
|
|
uint32_t *frameBuffer = NULL;
|
|
|
SDL_Texture *frameBufferTexture = NULL;
|
|
|
-uint32_t windowWidth = 800;
|
|
|
-uint32_t windowHeight = 600;
|
|
|
+int32_t windowWidth = 800;
|
|
|
+int32_t windowHeight = 600;
|
|
|
|
|
|
/***********************************************************************************************************************
|
|
|
* Functions
|
|
@@ -110,12 +110,14 @@ 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)
|
|
|
+void drawVLine(int32_t x, int32_t y0, int32_t y1, uint32_t colour)
|
|
|
{
|
|
|
uint32_t i;
|
|
|
if (y0 > y1) { i = y1; y1 = y0; y0 = i; }
|
|
|
|
|
|
- if ((x < 0) || (x > windowWidth))
|
|
|
+ if ( ((x < 0) || (x > windowWidth)) ||
|
|
|
+ ((y0 < 0) && (y1 < 0)) ||
|
|
|
+ ((y0 > windowHeight) && (y1 > windowHeight)) )
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
@@ -131,12 +133,14 @@ void drawVLine(uint32_t x, uint32_t y0, uint32_t y1, uint32_t colour)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void drawHLine(uint32_t x0, uint32_t y, uint32_t x1, uint32_t colour)
|
|
|
+void drawHLine(int32_t x0, int32_t y, int32_t x1, uint32_t colour)
|
|
|
{
|
|
|
uint32_t i;
|
|
|
if (x0 > x1) { i = x1; x1 = x0; x0 = i; }
|
|
|
|
|
|
- if ((y < 0) || (y > windowHeight))
|
|
|
+ if ( ((y < 0) || (y > windowHeight)) ||
|
|
|
+ ((x0 < 0) && (x1 < 0)) ||
|
|
|
+ ((x0 > windowWidth) && (x1 > windowWidth)) )
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
@@ -152,7 +156,7 @@ void drawHLine(uint32_t x0, uint32_t y, uint32_t x1, uint32_t colour)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void clearFrameBuffer(uint32_t colour)
|
|
|
+void clearFrameBuffer(int32_t colour)
|
|
|
{
|
|
|
uint32_t x, y;
|
|
|
for (y = 0 ; y < windowHeight ; y++)
|
|
@@ -166,7 +170,7 @@ void clearFrameBuffer(uint32_t colour)
|
|
|
|
|
|
void drawGrid(int spacing, uint32_t colour)
|
|
|
{
|
|
|
- uint32_t x, y;
|
|
|
+ int32_t x, y;
|
|
|
for (y = 0 ; y < windowHeight ; y++)
|
|
|
{
|
|
|
for (x = 0 ; x < windowWidth ; x++)
|
|
@@ -179,7 +183,7 @@ void drawGrid(int spacing, uint32_t colour)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void drawRectangle(uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint32_t colour)
|
|
|
+void drawRectangle(int32_t x, int32_t y, int32_t w, uint32_t h, uint32_t colour)
|
|
|
{
|
|
|
uint32_t j;
|
|
|
|
|
@@ -190,11 +194,11 @@ void drawRectangle(uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint32_t colo
|
|
|
}
|
|
|
|
|
|
/* FIXME: Some out of screen line may render weirdly. Will fix that later */
|
|
|
-void drawLine(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t colour)
|
|
|
+void drawLine(int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t colour)
|
|
|
{
|
|
|
int i;
|
|
|
- int32_t deltaX = (int32_t)x1 - (int32_t)x0;
|
|
|
- int32_t deltaY = (int32_t)y1 - (int32_t)y0;
|
|
|
+ int32_t deltaX = x1 - x0;
|
|
|
+ int32_t deltaY = y1 - y0;
|
|
|
|
|
|
int32_t sideLength = ( abs(deltaX) >= abs(deltaY) ) ? abs(deltaX) : abs(deltaY);
|
|
|
|
|
@@ -211,8 +215,8 @@ void drawLine(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t colou
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- double currentX = (int32_t)x0;
|
|
|
- double currentY = (int32_t)y0;
|
|
|
+ double currentX = x0;
|
|
|
+ double currentY = y0;
|
|
|
|
|
|
for (i = 0 ; i < sideLength ; i++)
|
|
|
{
|
|
@@ -223,7 +227,7 @@ void drawLine(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t colou
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void drawTriangle(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t x2, uint32_t y2, uint32_t colour)
|
|
|
+void drawTriangle(int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32_t x2, int32_t y2, uint32_t colour)
|
|
|
{
|
|
|
drawLine(x0, y0, x1, y1, colour);
|
|
|
drawLine(x1, y1, x2, y2, colour);
|