#include #include #include #include #include #include #include #define SHAPED_WINDOW_X 150 #define SHAPED_WINDOW_Y 150 #define SHAPED_WINDOW_DIMENSION 640 int main(int argc,char** argv) { if(argc < 2) { printf("SDL_Shape requires at least one bitmap file as argument.\n"); exit(-1); } if(SDL_VideoInit(NULL,0) == -1) { printf("Could not initialize SDL video.\n"); exit(-2); } Uint8 num_pictures = argc - 1; SDL_Surface **pictures = malloc(sizeof(SDL_Surface*)*num_pictures); int i = 0; for(i=0;i 0 ? 1 : 0); pictures[i] = SDL_ConvertSurface(original,&format,0); //We have no more need of the original now that we have our desired format. SDL_FreeSurface(original); if(pictures[i] == NULL) { int j = 0; for(j=0;jpixels; unsigned int pitch = pictures[i]->pitch; int y =0,x = 0; for(y=0;yh;y++) for(x=0;xw;x++) { Uint32* pixel = pixels + y * pitch + x * pictures[i]->format->BytesPerPixel; Uint8 r = 0,g = 0,b = 0; SDL_GetRGB(*pixel,pictures[i]->format,&r,&g,&b); //if(r == g == b == 0xff) // *pixel = SDL_MapRGBA(pictures[i]->format,r,g,b,0); } if(SDL_MUSTLOCK(pictures[i])) SDL_UnlockSurface(pictures[i]); } SDL_Window *window = SDL_CreateShapedWindow("SDL_Shape test",SHAPED_WINDOW_X,SHAPED_WINDOW_Y,SHAPED_WINDOW_DIMENSION,SHAPED_WINDOW_DIMENSION,SDL_WINDOW_RESIZABLE | SDL_WINDOW_SHOWN); if(window == NULL) { for(i=0;i= num_pictures) current_picture = 0; SDL_QueryTexture(textures[current_picture],&format,&access,&texture_dimensions.w,&texture_dimensions.h); SDL_SetWindowSize(window,texture_dimensions.w,texture_dimensions.h); SDL_SetWindowShape(window,pictures[current_picture],&mode); } if(event.type == SDL_QUIT) should_exit = 1; event_pending = 0; } SDL_SelectRenderer(window); //Clear render-target to blue. SDL_SetRenderDrawColor(0x00,0x00,0xff,0xff); SDL_RenderClear(); //Render the texture. SDL_RenderCopy(textures[current_picture],&texture_dimensions,&texture_dimensions); SDL_RenderPresent(); } //Free the textures. for(i=0;i