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.