diff options
Diffstat (limited to 'kms++util/src')
| -rw-r--r-- | kms++util/src/color.cpp | 10 | ||||
| -rw-r--r-- | kms++util/src/drawing.cpp | 16 | ||||
| -rw-r--r-- | kms++util/src/testpat.cpp | 2 | 
3 files changed, 28 insertions, 0 deletions
diff --git a/kms++util/src/color.cpp b/kms++util/src/color.cpp index 2e6f217..2a41502 100644 --- a/kms++util/src/color.cpp +++ b/kms++util/src/color.cpp @@ -59,6 +59,16 @@ uint16_t RGB::bgr565() const  	return ((b >> 3) << 11) | ((g >> 2) << 5) | ((r >> 3) << 0);  } +uint16_t RGB::argb4444() const +{ +	return ((a >> 4) << 12) | ((r >> 4) << 8) | ((g >> 4) << 4) | ((b >> 4) << 0); +} + +uint16_t RGB::argb1555() const +{ +	return ((!!a) << 15) | ((r >> 3) << 10) | ((g >> 3) << 5) | ((b >> 3) << 0); +} +  YUV RGB::yuv(YUVType type) const  {  	return YUV(*this, type); diff --git a/kms++util/src/drawing.cpp b/kms++util/src/drawing.cpp index 8885112..9da7a77 100644 --- a/kms++util/src/drawing.cpp +++ b/kms++util/src/drawing.cpp @@ -56,6 +56,18 @@ void draw_rgb_pixel(IFramebuffer& buf, unsigned x, unsigned y, RGB color)  		*p = color.bgr565();  		break;  	} +	case PixelFormat::ARGB4444: +	{ +		uint16_t *p = (uint16_t*)(buf.map(0) + buf.stride(0) * y + x * 2); +		*p = color.argb4444(); +		break; +	} +	case PixelFormat::ARGB1555: +	{ +		uint16_t *p = (uint16_t*)(buf.map(0) + buf.stride(0) * y + x * 2); +		*p = color.argb1555(); +		break; +	}  	default:  		throw std::invalid_argument("invalid pixelformat");  	} @@ -168,6 +180,8 @@ void draw_rect(IFramebuffer &fb, uint32_t x, uint32_t y, uint32_t w, uint32_t h,  	case PixelFormat::BGR888:  	case PixelFormat::RGB565:  	case PixelFormat::BGR565: +	case PixelFormat::ARGB4444: +	case PixelFormat::ARGB1555:  		for (j = 0; j < h; j++) {  			for (i = 0; i < w; i++) {  				draw_rgb_pixel(fb, x + i, y + j, color); @@ -240,6 +254,8 @@ static void draw_char(IFramebuffer& buf, uint32_t xpos, uint32_t ypos, char c, R  	case PixelFormat::BGR888:  	case PixelFormat::RGB565:  	case PixelFormat::BGR565: +	case PixelFormat::ARGB4444: +	case PixelFormat::ARGB1555:  		for (y = 0; y < 8; y++) {  			for (x = 0; x < 8; x++) {  				bool b = get_char_pixel(c, x, y); diff --git a/kms++util/src/testpat.cpp b/kms++util/src/testpat.cpp index 8795cc6..ab197dc 100644 --- a/kms++util/src/testpat.cpp +++ b/kms++util/src/testpat.cpp @@ -114,6 +114,8 @@ static void draw_test_pattern_part(IFramebuffer& fb, unsigned start_y, unsigned  	case PixelFormat::BGR888:  	case PixelFormat::RGB565:  	case PixelFormat::BGR565: +	case PixelFormat::ARGB4444: +	case PixelFormat::ARGB1555:  		for (y = start_y; y < end_y; y++) {  			for (x = 0; x < w; x++) {  				RGB pixel = get_test_pattern_pixel(fb, x, y);  | 
