1
0
Fork 0

Adds draw mode

This commit is contained in:
Pedro de Oliveira 2017-03-25 00:51:44 +00:00
parent 0f540211f6
commit fbb34c1b5a
2 changed files with 19 additions and 7 deletions

View File

@ -108,6 +108,7 @@ int main(void)
/* USER CODE BEGIN 3 */
ssd1306_Fill(Black);
//ssd1306_Fill(White);
/*
int x, msg;

View File

@ -65,20 +65,31 @@ void ssd1306_LoadImage(void) {
fastlz_decompress(image, 1024, SSD1306_Buffer, 1024);
}
void ssd1306_DrawSprite(SpriteDef *sprite, int8_t x, int8_t y) {
void ssd1306_DrawSprite(SpriteDef *sprite, int x, int y, int mode) {
int spriteAddr = 0;
int currX, currY = 0;
int currX, currY = y;
for(int bank = y / 8; bank < sprite->height / 8; bank++) {
int start = (bank * sprite->width) + (bank * sprite->height) + (x);
currX = x;
int end = start + sprite->width;
for(int addr = start; addr < end; addr++) {
if (currX > 0 && currY > 0 && currX < SSD1306_WIDTH && currY < SSD1306_HEIGHT) {
SSD1306_Buffer[addr] = sprite->buffer[spriteAddr];
if (currX >= 0 && currY >= 0 && currX < SSD1306_WIDTH && currY < SSD1306_HEIGHT) {
switch(mode) {
case 0:
SSD1306_Buffer[addr] = sprite->buffer[spriteAddr];
break;
case 1:
SSD1306_Buffer[addr] |= sprite->buffer[spriteAddr];
break;
case 2:
SSD1306_Buffer[addr] &= sprite->buffer[spriteAddr];
break;
case 3:
SSD1306_Buffer[addr] ^= sprite->buffer[spriteAddr];
break;
}
}
spriteAddr++;
currX++;
}
@ -107,7 +118,7 @@ void ssd1306_Anim(void) {
break;
}
ssd1306_DrawSprite(sprite, x, 0);
ssd1306_DrawSprite(sprite, x, 0, 1);
anim++;
x += 15;