Hi All, I am using DirectFB 1.0.1, and trying to run the following code. This code is the df_palette.c code that comes with the DirectFB Examples, which i have modified a bit for seeing the use of SetColorIndex. Can anyone tell me what is wrong in this code, and if nothing is wrong then why i am getting the error. "SetColorIndex not supported."
What is the use of SetColorIndex? How can this code be modified to use SetColorIndex. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <directfb.h> /* the super interface */ static IDirectFB *dfb; /* the primary surface (surface of primary layer) */ static IDirectFBSurface *primary; static IDirectFBPalette *palette; /* Input interfaces: device and its buffer */ static IDirectFBEventBuffer *events; static int screen_width, screen_height; /* macro for a safe call to DirectFB functions */ #define DFBCHECK(x...) \ { \ err = x; \ if (err != DFB_OK) { \ fprintf( stderr, "%s <%d>:\n\t", __FILE__, __LINE__ ); \ DirectFBErrorFatal( #x, err ); \ } \ } static void generate_palette() { int i; DFBResult err; DFBColor colors[256]; for (i=0; i<256; i++) { colors[i].a = 0xff; colors[i].r = i + 85; colors[i].g = i; colors[i].b = i + 171; } DFBCHECK(palette->SetEntries( palette, colors, 256, 0 )); } static void rotate_palette() { DFBResult err; DFBColor colors[256]; DFBCHECK(palette->GetEntries( palette, colors, 256, 0 )); DFBCHECK(palette->SetEntries( palette, colors + 1, 255, 0 )); colors[0].r += 17; colors[0].g += 31; colors[0].b += 29; DFBCHECK(palette->SetEntries( palette, colors, 1, 255 )); } static void fill_surface( IDirectFBSurface *surface ) { DFBResult err; int x; int y; void *ptr; int pitch; u8 *dst; DFBCHECK(surface->Lock( surface, DSLF_WRITE, &ptr, &pitch )); for (y=0; y<screen_height; y++) { dst = ptr + y * pitch; for (x=0; x<screen_width; x++) dst[x] = (x*x + y) / (y+1); } DFBCHECK(surface->Unlock( surface )); } int main( int argc, char *argv[] ) { int quit = 0; DFBResult err; DFBSurfaceDescription sdsc; DFBColor colors[256]; int i; colors[0].a = 0xff; colors[0].r = 0xff; colors[0].g = 0xff; colors[0].b = 0x00; for (i=1; i<256; i++) { colors[i].a = 0xff; colors[i].r = i + 85; colors[i].g = i; colors[i].b = i + 171; } DFBCHECK(DirectFBInit( &argc, &argv )); /* create the super interface */ DFBCHECK(DirectFBCreate( &dfb )); /* create an event buffer for all devices */ DFBCHECK(dfb->CreateInputEventBuffer( dfb, DICAPS_ALL, DFB_FALSE, &events )); /* set our cooperative level to DFSCL_FULLSCREEN for exclusive access to the primary layer */ dfb->SetCooperativeLevel( dfb, DFSCL_FULLSCREEN ); /* get the primary surface, i.e. the surface of the primary layer we have exclusive access to */ sdsc.flags = DSDESC_CAPS | DSDESC_PIXELFORMAT | DSDESC_PALETTE; sdsc.caps = DSCAPS_PRIMARY; sdsc.pixelformat = DSPF_LUT8; sdsc.palette.entries = colors; sdsc.palette.size = 256; DFBCHECK(dfb->CreateSurface( dfb, &sdsc, &primary )); primary->Clear( primary, 0, 0, 0, 0 ); primary->GetSize( primary, &screen_width, &screen_height ); /* get access to the palette */ DFBCHECK(primary->GetPalette( primary, &palette )); generate_palette(); fill_surface( primary ); DFBCHECK(primary->SetColorIndex(primary, 0)); primary->FillRectangle (primary, 10, 10, 240, 320); primary->Flip (primary, NULL, 0); while (!quit) { DFBInputEvent evt; while (events->GetEvent( events, DFB_EVENT(&evt) ) == DFB_OK) { switch (evt.type) { case DIET_KEYPRESS: switch (evt.key_symbol) { case DIKS_ESCAPE: quit = 1; break; default: ; } default: ; } } } /* release our interfaces to shutdown DirectFB */ palette->Release( palette ); primary->Release( primary ); events->Release( events ); dfb->Release( dfb ); return 0; } And one more doubt, In the documentation given in the following link. http://www.directfb.org/docs/DirectFB_Reference/types.html#DFBSurfaceDescription The DFBSurfaceDescription, structure is having the following field, but in the actual code, const DFBColor *entries; unsigned int size ; are part of the palette structure as you can seen in the above code: sdsc.palette.entries = colors; sdsc.palette.size = 256; Why is this ambiguity? regards Animesh _______________________________________________ directfb-users mailing list directfb-users@directfb.org http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-users