diff options
Diffstat (limited to 'src/graphics')
| -rw-r--r-- | src/graphics/drawer.c | 3 | ||||
| -rw-r--r-- | src/graphics/lfb.c | 33 | 
2 files changed, 16 insertions, 20 deletions
| diff --git a/src/graphics/drawer.c b/src/graphics/drawer.c index 35aea32..4445919 100644 --- a/src/graphics/drawer.c +++ b/src/graphics/drawer.c @@ -1,9 +1,6 @@  #include <graphics/drawer.h>  #include <graphics/lfb.h> -#define GRAPHICS_DRAWER_C -struct Drawer g_Drawer = {.x = 0, .y = 0}; -  void write_cchar(struct Drawer* d, char s, unsigned int c)  {  	d->x %= GG_MAX_X; diff --git a/src/graphics/lfb.c b/src/graphics/lfb.c index 3ad9917..c3a3cac 100644 --- a/src/graphics/lfb.c +++ b/src/graphics/lfb.c @@ -1,11 +1,10 @@  #include <drivers/uart.h> +#include <globals.h>  #include <graphics/glyphs.h>  #include <graphics/lfb.h>  #include <graphics/mbox.h>  #include <graphics/philosopher_toad.h> -#define GRAPHICS_LFB_C -unsigned int width, height, pitch, isrgb;   /* dimensions and channel order */  unsigned char *lfb;                         /* raw frame buffer address */  #define SCR_WIDTH  1024 @@ -64,10 +63,10 @@ void lfb_init(void)  	//the closest supported resolution instead  	if(mbox_call(MBOX_CH_PROP) && mbox[20]==32 && mbox[28]!=0) {  		mbox[28]&=0x3FFFFFFF;   //convert GPU address to ARM address -		width=mbox[5];          //get actual physical width -		height=mbox[6];         //get actual physical height -		pitch=mbox[33];         //get number of bytes per line -		isrgb=mbox[24];         //get the actual channel order +		gwidth=mbox[5];          //get actual physical width +		gheight=mbox[6];         //get actual physical height +		gpitch=mbox[33];         //get number of bytes per line +		gisrgb=mbox[24];         //get the actual channel order  		lfb=(void*)((unsigned long)mbox[28]);  	} else {  		uart_string("Unable to set screen resolution to 1024x768x32\n"); @@ -77,8 +76,8 @@ void lfb_init(void)  void clear_screen(void)  {  	unsigned char *ptr=lfb; -	for(unsigned int y = 0; y < height; y++) { -		for(unsigned int x = 0; x < width; x++) { +	for(unsigned int y = 0; y < gheight; y++) { +		for(unsigned int x = 0; x < gwidth; x++) {  			*(unsigned int*)ptr = 0x000000;  			ptr += 4;  		} @@ -95,16 +94,16 @@ void lfb_showpicture(void)  	unsigned char *ptr=lfb;  	char *data=toad_data, pixel[4]; -	ptr = lfb + (height-toad_height)*pitch + (width-toad_width)*4; +	ptr = lfb + (gheight-toad_height)*gpitch + (gwidth-toad_width)*4;  	for(y=0;y<toad_height;y++) {  		for(x=0;x<toad_width;x++) {  			HEADER_PIXEL(data, pixel);  			// the image is in RGB. So if we have an RGB framebuffer, we can copy the pixels  			// directly, but for BGR we must swap R (pixel[0]) and B (pixel[2]) channels. -			*((unsigned int*)ptr)=isrgb ? *((unsigned int *)&pixel) : (unsigned int)(pixel[0]<<16 | pixel[1]<<8 | pixel[2]); +			*((unsigned int*)ptr)=gisrgb ? *((unsigned int *)&pixel) : (unsigned int)(pixel[0]<<16 | pixel[1]<<8 | pixel[2]);  			ptr+=4;  		} -		ptr+=pitch-toad_width*4; +		ptr+=gpitch-toad_width*4;  	}  } @@ -112,7 +111,7 @@ void draw_cbyte(unsigned char lx, unsigned char ly, unsigned char letter, unsign  {  	unsigned int x, y;  	unsigned char* ptr = lfb; -	ptr += (pitch*ly*GLYPH_Y+lx*4*GLYPH_X); +	ptr += (gpitch*ly*GLYPH_Y+lx*4*GLYPH_X);  	unsigned char ltr = (letter & 0xF) + 0x30;  	if (ltr > 0x39) {  		ltr += 7; @@ -120,13 +119,13 @@ void draw_cbyte(unsigned char lx, unsigned char ly, unsigned char letter, unsign  	for(y=0; y<GLYPH_Y; y++) {  		for(x=0; x<GLYPH_X; x++) {  			if((0x80 >> ((GLYPH_X-1)-x)) & glyphs[y+GLYPH_Y*(ltr)]) { -				*((unsigned int*)ptr) = isrgb ? (unsigned int)((c&0xFF)<<16 | (c&0xFF00) | (c&0xFF0000)>>16) : c; +				*((unsigned int*)ptr) = gisrgb ? (unsigned int)((c&0xFF)<<16 | (c&0xFF00) | (c&0xFF0000)>>16) : c;  			} else {  				*((unsigned int*)ptr) = 0x000000;  			}  			ptr += 4;  		} -		ptr += pitch - GLYPH_X*4; +		ptr += gpitch - GLYPH_X*4;  	}  } @@ -139,18 +138,18 @@ void draw_cletter(unsigned char lx, unsigned char ly, unsigned char letter, unsi  {  	unsigned int x, y;  	unsigned char* ptr = lfb; -	ptr += (pitch*ly*GLYPH_Y+lx*4*GLYPH_X); +	ptr += (gpitch*ly*GLYPH_Y+lx*4*GLYPH_X);  	unsigned char ltr = letter & 0x7F;  	for(y=0; y<GLYPH_Y; y++) {  		for(x=0; x<GLYPH_X; x++) {  			if((0x80 >> ((GLYPH_X-1)-x)) & glyphs[y+GLYPH_Y*(ltr)]) { -				*((unsigned int*)ptr) = isrgb ? (unsigned int)((c&0xFF)<<16 | (c&0xFF00) | (c&0xFF0000)>>16) : c; +				*((unsigned int*)ptr) = gisrgb ? (unsigned int)((c&0xFF)<<16 | (c&0xFF00) | (c&0xFF0000)>>16) : c;  			} else {  				*((unsigned int*)ptr) = 0x000000;  			}  			ptr += 4;  		} -		ptr += pitch - GLYPH_X*4; +		ptr += gpitch - GLYPH_X*4;  	}  } | 
