Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@member.fsf.org>2009-02-20 06:17:19 (GMT)
committer Aleksey Lim <alsroot@member.fsf.org>2009-02-20 06:17:19 (GMT)
commitb6e61a21abf6c1845b4e94daa776d6494104bb1c (patch)
treead3298825bf94b5596888705b1394a706923c56e
parente0fa9a44126148264e3c1028f90aefc8e7679d1f (diff)
Fix colors in 24/32 depth
-rw-r--r--pongc/pongc.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/pongc/pongc.cpp b/pongc/pongc.cpp
index 536285d..791a9ac 100644
--- a/pongc/pongc.cpp
+++ b/pongc/pongc.cpp
@@ -40,13 +40,14 @@ void clear_image(GdkImage* img)
inline
void to_pixel(depth16_t *pixel, uint16_t c)
{
- *pixel = c | c<<6 | c<<11;
+ *pixel = (c>>3) | (c>>2)<<5 | (c>>3)<<11;
}
inline
void to_pixel(depth24_t *pixel, uint16_t c)
{
- *pixel = c | c<<8 | c<<16;
+ depth24_t p = 0xff & c;
+ *pixel = p | p<<8 | p<<16;
}
template <typename pixel_t> inline
@@ -54,12 +55,12 @@ void _draw_point_2x(GdkImage* img, int x, int y, uint16_t c)
{
if (x < 0 || y < 0 || x >= img->width/2-1 || y >= img->height/2-1)
return;
- c >>= 3;
+
pixel_t* pixels = (pixel_t*)img->mem;
int pitch = img->bpl/sizeof(pixel_t);
int ofs = pitch*y*2+x*2;
- uint16_t pix;
+ pixel_t pix;
to_pixel(&pix, c);
pixels[ofs] = pix;