Another effect with palette: fade in/out. We can - in addition to rotating the entries - modify the palette entry RGB values on the fly and make the pixels drawn in this color to fade in or out.
Draw some background stuff (blue and white checkerboard), a black block to hold the actual piece and something to fade:
And then modify the associated palette entry:
Compile with 'gcc -o fbtest5z fbtest5z.c' and run with './fbtest5y'. The yellow bars should fade out and back in:
...imagine for example black background and white text fading in and out... movie titles :D
...
#define DEF_COLOR 14
#define MOD_COLOR (16 + DEF_COLOR)
...
int x, y;
int t = vinfo.xres / 24;
// t x t pix black and white checkerboard
for (y = 0; y < vinfo.yres; y++) {
int xoffset = y / t % 2;
for (x = 0; x < vinfo.xres; x++) {
// color based on the tile
int c = (((x / t + xoffset) % 2) == 0) ? 1 : 15;
// draw pixel
put_pixel(x, y, c);
}
}
// black block in the middle
for (y = (vinfo.yres / 2); y < (vinfo.yres / 2 + t); y++) {
for (x = (vinfo.xres / 4 - t / 2);
x < (vinfo.xres / 4 * 3 + t / 2); x++)
{
put_pixel(x, y, 0);
}
}
// something in the color in the extended palette
for (y = (vinfo.yres / 2 + t / 4);
y < (vinfo.yres / 2 + t - t / 4); y++)
{
int n = 0;
for (x = (vinfo.xres / 4); x < (vinfo.xres / 4 * 3); x++) {
if (n % (t / 4)) {
put_pixel(x, y, MOD_COLOR);
}
n++;
}
}
...
...
// fade palette entry out (to black)" and back in
int j;
int fps = 60; // frames per second
int f = 255;
int fd = -2;
while (f < 256) {
r[DEF_COLOR] = (def_r[14] & f) << 8;
g[DEF_COLOR] = (def_g[14] & f) << 8;
b[DEF_COLOR] = (def_b[14] & f) << 8;
// change fade
f += fd;
// check bounds
if (f < 0) {
// change direction
fd *= -1;
f += fd;
}
// Note that we set up the 'pal' structure earlier
// and it still points to the r, g, b arrays,
// so we can just reuse 'pal' here
if (ioctl(fbfd, FBIOPUTCMAP, &pal) != 0) {
printf("Error setting palette.\n");
}
usleep(1000000 / fps);
}
...
Full code available in GitHub.



No comments:
Post a Comment
Note: only a member of this blog may post a comment.