Mercurial > public > ostc4
diff Discovery/Src/gfx_engine.c @ 121:0d97971b771b FlipDisplay
Use 32bit operations for buffer fills
author | Ideenmodellierer |
---|---|
date | Sun, 13 Jan 2019 18:58:23 +0100 |
parents | 76fa42fc0b20 |
children | 87f83879cecb |
line wrap: on
line diff
--- a/Discovery/Src/gfx_engine.c Tue Jan 08 22:31:17 2019 +0100 +++ b/Discovery/Src/gfx_engine.c Sun Jan 13 18:58:23 2019 +0100 @@ -813,17 +813,13 @@ void GFX_clear_frame_immediately(uint32_t pDestination) { uint32_t i; + uint32_t* pfill = (uint32_t*) pDestination; + for(i = 200*480; i > 0; i--) { - *(__IO uint16_t*)pDestination = 0; - pDestination += 2; - *(__IO uint16_t*)pDestination = 0; - pDestination += 2; - *(__IO uint16_t*)pDestination = 0; - pDestination += 2; - *(__IO uint16_t*)pDestination = 0; - pDestination += 2; + *pfill++ = 0; + *pfill++ = 0; } } @@ -872,22 +868,23 @@ void GFX_fill_buffer(uint32_t pDestination, uint8_t alpha, uint8_t color) { - union al88_u + union al88_u { uint8_t al8[2]; uint16_t al88; }; - union al88_u colorcombination; uint32_t i; + uint32_t* pfill = (uint32_t*) pDestination; + uint32_t fillpattern; colorcombination.al8[0] = color; colorcombination.al8[1] = alpha; - for(i = 800*480; i > 0; i--) + fillpattern = (colorcombination.al88 << 16) | colorcombination.al88; + for(i = 800*480/2; i > 0; i--) { - *(__IO uint16_t*)pDestination = colorcombination.al88; - pDestination += 2; + *pfill++ = fillpattern; } } @@ -1143,7 +1140,6 @@ for(int yy = start.y; yy < stop.y; yy++) { - // *(__IO uint16_t*)pDestination-- = image->data[j++] << 8 | 0xFF; *(__IO uint16_t*)pDestination-- = 0xFF << 8 | image->data[j++]; } } @@ -2967,7 +2963,6 @@ uint32_t width, height; uint32_t found; uint16_t* pDestination; - uint16_t* pDestination2; uint32_t pSource; uint32_t OffsetDestination; uint32_t width_left; @@ -2975,6 +2970,7 @@ uint32_t char_truncated_WidthFlag; uint32_t char_truncated_Height; uint8_t fill; + uint32_t fillpattern; int16_t stepdir; SSettings* pSettings; @@ -3117,17 +3113,18 @@ else /* empty line => fast fill */ { pSource++; + fillpattern = (( 0xFF << 8 | cfg->color) << 16) | ( 0xFF << 8 | cfg->color); + if(pSettings->FlipDisplay) pDestination--; /* address fill from high to low */ for (j = height; j > 0; j--) { - *(__IO uint16_t*)pDestination = 0xFF << 8 | cfg->color; + *(__IO uint32_t*)pDestination = fillpattern; pDestination += stepdir; - *(__IO uint16_t*)pDestination = 0xFF << 8 | cfg->color; pDestination += stepdir; - *(__IO uint16_t*)pDestination = 0xFF << 8 | cfg->color; + *(__IO uint32_t*)pDestination = fillpattern; pDestination += stepdir; - *(__IO uint16_t*)pDestination = 0xFF << 8 | cfg->color; pDestination += stepdir; } + if(pSettings->FlipDisplay) pDestination++; } pDestination += stepdir * OffsetDestination; } @@ -3185,22 +3182,25 @@ *(__IO uint16_t*)pDestination = ( *(uint8_t*)pSource++ << 8) | (cfg->color); pDestination += stepdir; } + pSource += char_truncated_Height; } else /* clear line */ { pSource++; + fillpattern = (cfg->color << 16) | cfg->color; + if(pSettings->FlipDisplay) pDestination--; /* address fill from high to low */ + for (j = height; j > 0; j--) { - *(__IO uint16_t*)pDestination = cfg->color; + *(__IO uint32_t*)pDestination = fillpattern; pDestination += stepdir; - *(__IO uint16_t*)pDestination = cfg->color; pDestination += stepdir; - *(__IO uint16_t*)pDestination = cfg->color; + *(__IO uint32_t*)pDestination = fillpattern; pDestination += stepdir; - *(__IO uint16_t*)pDestination = cfg->color; pDestination += stepdir; } + if(pSettings->FlipDisplay) pDestination++; } pDestination += stepdir * OffsetDestination; }