Gitweb links:
...log
http://git.netsurf-browser.org/libnsfb.git/shortlog/1983c37933d2a753c4c91...
...commit
http://git.netsurf-browser.org/libnsfb.git/commit/1983c37933d2a753c4c9135...
...tree
http://git.netsurf-browser.org/libnsfb.git/tree/1983c37933d2a753c4c913527...
The branch, master has been updated
via 1983c37933d2a753c4c913527c94392682bf7b98 (commit)
from bde04d10347414251b40af574d1bc94962d23a5a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff
http://git.netsurf-browser.org/libnsfb.git/commitdiff/1983c37933d2a753c4c...
commit 1983c37933d2a753c4c913527c94392682bf7b98
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Improve 8bpp palette: 685 RGB levels instead of 884 RGB levels, with remainder set to
true grays. Previous palette had no true grays. Upshot is much better rendering of
grayscale images and better rendering of blues, with a bit of loss in reds.
diff --git a/src/surface/sdl.c b/src/surface/sdl.c
index 8908a21..d598b8a 100644
--- a/src/surface/sdl.c
+++ b/src/surface/sdl.c
@@ -6,6 +6,7 @@
*
http://www.opensource.org/licenses/mit-license.php
*/
+#include <assert.h>
#include <stdbool.h>
#include <stdlib.h>
#include <SDL/SDL.h>
@@ -355,20 +356,44 @@ set_palette(nsfb_t *nsfb)
int rloop, gloop, bloop;
int loop = 0;
- /* build a linear R:3 G:3 B:2 colour cube palette. */
- for (rloop = 0; rloop < 8; rloop++) {
- for (gloop = 0; gloop < 8; gloop++) {
- for (bloop = 0; bloop < 4; bloop++) {
- palette[loop].r = (rloop << 5) | (rloop << 2) | (rloop
>> 1);
- palette[loop].g = (gloop << 5) | (gloop << 2) | (gloop
>> 1);
- palette[loop].b = (bloop << 6) | (bloop << 4) | (bloop
<< 2) | (bloop);
+ /* Build a linear 6-8-5 levels RGB colour cube palette.
+ * This accounts for 240 colours */
+#define RLIM 6
+#define GLIM 8
+#define BLIM 5
+ for (rloop = 0; rloop < RLIM; rloop++) {
+ for (gloop = 0; gloop < GLIM; gloop++) {
+ for (bloop = 0; bloop < BLIM; bloop++) {
+ palette[loop].r = ((rloop * 255 * 2) + RLIM - 1) / (2 * (RLIM - 1));
+ palette[loop].g = ((gloop * 255 * 2) + GLIM - 1) / (2 * (GLIM - 1));
+ palette[loop].b = ((bloop * 255 * 2) + BLIM - 1) / (2 * (BLIM - 1));
+
nsfb->palette[loop] = palette[loop].r |
- palette[loop].g << 8 |
- palette[loop].b << 16;
+ palette[loop].g << 8 |
+ palette[loop].b << 16;
loop++;
}
}
}
+#undef RLIM
+#undef GLIM
+#undef BLIM
+
+ /* Should have 240 colours set */
+ assert(loop == 240);
+
+ /* Fill index 240 to index 255 with grayscales */
+ /* Note: already have full black and full white from RGB cube */
+ for (; loop < 256; loop++) {
+ int ngray = loop - 240 + 1;
+ palette[loop].r = ngray * 15; /* 17*15 = 255 */
+
+ palette[loop].g = palette[loop].b = palette[loop].r;
+
+ nsfb->palette[loop] = palette[loop].r |
+ palette[loop].g << 8 |
+ palette[loop].b << 16;
+ }
/* Set palette */
SDL_SetColors(sdl_screen, palette, 0, 256);
-----------------------------------------------------------------------
Summary of changes:
src/surface/sdl.c | 43 ++++++++++++++++++++++++++++++++++---------
1 files changed, 34 insertions(+), 9 deletions(-)
diff --git a/src/surface/sdl.c b/src/surface/sdl.c
index 8908a21..d598b8a 100644
--- a/src/surface/sdl.c
+++ b/src/surface/sdl.c
@@ -6,6 +6,7 @@
*
http://www.opensource.org/licenses/mit-license.php
*/
+#include <assert.h>
#include <stdbool.h>
#include <stdlib.h>
#include <SDL/SDL.h>
@@ -355,20 +356,44 @@ set_palette(nsfb_t *nsfb)
int rloop, gloop, bloop;
int loop = 0;
- /* build a linear R:3 G:3 B:2 colour cube palette. */
- for (rloop = 0; rloop < 8; rloop++) {
- for (gloop = 0; gloop < 8; gloop++) {
- for (bloop = 0; bloop < 4; bloop++) {
- palette[loop].r = (rloop << 5) | (rloop << 2) | (rloop
>> 1);
- palette[loop].g = (gloop << 5) | (gloop << 2) | (gloop
>> 1);
- palette[loop].b = (bloop << 6) | (bloop << 4) | (bloop
<< 2) | (bloop);
+ /* Build a linear 6-8-5 levels RGB colour cube palette.
+ * This accounts for 240 colours */
+#define RLIM 6
+#define GLIM 8
+#define BLIM 5
+ for (rloop = 0; rloop < RLIM; rloop++) {
+ for (gloop = 0; gloop < GLIM; gloop++) {
+ for (bloop = 0; bloop < BLIM; bloop++) {
+ palette[loop].r = ((rloop * 255 * 2) + RLIM - 1) / (2 * (RLIM - 1));
+ palette[loop].g = ((gloop * 255 * 2) + GLIM - 1) / (2 * (GLIM - 1));
+ palette[loop].b = ((bloop * 255 * 2) + BLIM - 1) / (2 * (BLIM - 1));
+
nsfb->palette[loop] = palette[loop].r |
- palette[loop].g << 8 |
- palette[loop].b << 16;
+ palette[loop].g << 8 |
+ palette[loop].b << 16;
loop++;
}
}
}
+#undef RLIM
+#undef GLIM
+#undef BLIM
+
+ /* Should have 240 colours set */
+ assert(loop == 240);
+
+ /* Fill index 240 to index 255 with grayscales */
+ /* Note: already have full black and full white from RGB cube */
+ for (; loop < 256; loop++) {
+ int ngray = loop - 240 + 1;
+ palette[loop].r = ngray * 15; /* 17*15 = 255 */
+
+ palette[loop].g = palette[loop].b = palette[loop].r;
+
+ nsfb->palette[loop] = palette[loop].r |
+ palette[loop].g << 8 |
+ palette[loop].b << 16;
+ }
/* Set palette */
SDL_SetColors(sdl_screen, palette, 0, 256);
--
NetSurf Framebuffer library