Ongelmakoodi:
const int RES_X=600, RES_Y=480; screen = SDL_SetVideoMode(RES_X, RES_Y, 32, SDL_HWSURFACE|SDL_FULLSCREEN); int x, y; Uint32 *bufp; Slock(); for(x=0;x<RES_X;x++) for(y=0;y<RES_Y;y++) { bufp = (Uint32 *)screen->pixels + y*screen->pitch/4+x; *bufp = SDL_MapRGB(screen->format, 200, 180, 80); } Sulock(); SDL_Flip(screen); while(1) { SDL_PollEvent(&event); if ( event.type == SDL_QUIT ) return 0; keys = SDL_GetKeyState(NULL); if ( keys[SDLK_ESCAPE]) break; } Slock(); for(x=0;x<RES_X;x++) for(y=0;y<RES_Y;y++) { bufp = (Uint32 *)screen->pixels + y*screen->pitch/4+x; *bufp = SDL_MapRGB(screen->format, 200, 180, 80); }
Ruudun vasempaan ylänurkkaan jää 16*16 pikselin kokoinen musta pala ensimmäisen for piirron jälkeen. Tota virhettä ei ole, jos ohjelma ei ole fullscreen. While:n jälkeen tuleva koodi taas piirtää tämän mustan palan päälle.
EDIT: Jos SDL_HWSURFACE:n tilalle laitetaan SDL_SWSURFACE, tilanne korjaantuu. Tietäiskö joku, miksi SDL_HWSURFACE:lla tule tommonen bugi ja mitä eroa näillä kahdella on?
Ero on ainakin se, että Hardware Surface on näytönohjaimen muistissa ja Software Surface on RAMissa. Aivan kuin sinulta puuttuisi tuolta SDL_DOUBLEBUF. Kokeilepa sen kanssa uudestaan, jos vaikka auttaisi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.