Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Musta 16*16 pala ylänurkassa (SDL)

Touho [27.02.2005 11:54:29]

#

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?

Metabolix [27.02.2005 17:19:38]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta