void Video_Setup(void);
void Video_Update(void);
void Video_FillRect(short X, short Y, short W, short H, uint32_t Color);
+void Video_DrawRect(short X, short Y, short W, short H, uint32_t Color);
// === GLOBALS ===
+ int giVideo_CursorX;
+ int giVideo_CursorY;
// === CODE ===
void Video_Setup(void)
Video_FillRect(X+W-1, Y, 1, H, Color);
}
-/**
- * \brief Draw text to the screen
- */
-void Video_DrawText(short X, short Y, short W, short H, void *Font, int Point, uint32_t Color, char *Text)
-{
- // TODO!
-}
-
/**
* \brief Draw an image to the screen
* \todo Maybe have support for an offset in the image
{
int x, y;
uint8_t *buf = (uint8_t *)(gpScreenBuffer + Y*giScreenWidth + X);
- uint8_t *data = Image->Data;
+ uint8_t *data;
+
+ // Sanity please
+ if( !Image )
+ return ;
// Bounds Check
if( X >= giScreenWidth ) return ;
if( X + W > giScreenWidth ) W = giScreenWidth - X;
if( Y + H > giScreenHeight ) H = giScreenHeight - Y;
+ // Do the render
+ data = Image->Data;
switch( Image->Format )
{
case IMGFMT_BGRA:
{
int r, g, b, a; // New
int or, og, ob; // Original
- for( x = 0; x < W; x ++ ) {
+ for( x = 0; x < W; x ++ )
+ {
b = data[x*4+0]; g = data[x*4+1]; r = data[x*4+2]; a = data[x*4+3];
if( a == 0 ) continue; // 100% transparent
ob = buf[x*4+0]; og = buf[x*4+1]; or = buf[x*4+2];
case IMGFMT_RGB:
for( y = 0; y < H; y ++ )
{
- for( x = 0; x < W; x ++ ) {
+ for( x = 0; x < W; x ++ )
+ {
buf[x*4+0] = data[x*3+2]; // Blue
buf[x*4+1] = data[x*3+1]; // Green
buf[x*4+2] = data[x*3+0]; // Red
buf += giScreenWidth * 4;
}
break;
+ default:
+ _SysDebug("ERROR: Unknown image format %i\n", Image->Format);
+ break;
}
}