No subject


Wed Jan 24 21:54:03 PST 2007


find any consistent fix or cause. Help!!!

Code Listing
************
#include <stdio.h>
#include <stdlib.h>

#include "SDL/SDL.h"

void DrawPixel(SDL_Surface *screen, int x, int y,
			   Uint8 R, Uint8 G, Uint8 B)
{
	Uint32 color = SDL_MapRGB(screen->format, R, G, B);
	switch (screen->format->BytesPerPixel) {
	case 1: // Assuming 8-bpp
		{
			Uint8 *bufp;
			bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;
			*bufp = color;
		}
		break;
    case 2: // Probably 15-bpp or 16-bpp
		{
			Uint16 *bufp;
			bufp = (Uint16 *)screen->pixels + y*screen->pitch/2 + x;
			*bufp = color;
		}
		break;
    case 3: // Slow 24-bpp mode, usually not used
		{
			Uint8 *bufp;
			bufp = (Uint8 *)screen->pixels + y*screen->pitch + x * 3;
			if (SDL_BYTEORDER == SDL_LIL_ENDIAN) {
				bufp[0] = color;
				bufp[1] = color >> 8;
				bufp[2] = color >> 16;
			} else {
				bufp[2] = color;
				bufp[1] = color >> 8;
				bufp[0] = color >> 16;
			}
		}
		break;
	case 4: // Probably 32-bpp
		{
			Uint32 *bufp;
			bufp = (Uint32 *)screen->pixels + y*screen->pitch/4 + x;
			*bufp = color;
		}
		break;
	}
}

void Slock(SDL_Surface *screen)
{
	if ( SDL_MUSTLOCK(screen) )
		if ( SDL_LockSurface(screen) < 0 )
			return;
}

void Sulock(SDL_Surface *screen)
{
	if ( SDL_MUSTLOCK(screen) )
		SDL_UnlockSurface(screen);
}

void DrawScene(SDL_Surface *screen)
{
	Slock(screen);
	for (int x = 0; x != 640; ++x)
		for (int y = 0; y != 480; ++y)
			DrawPixel(screen, x, y, y/2, y/2, x/3);

	Sulock(screen);
	SDL_Flip(screen);
}

int main(int argc, char *argv[])
{
	// Initialize SDL
	if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) < 0)
		printf("Unable to init SDL: %s\n", SDL_GetError());

	atexit(SDL_Quit);

	SDL_Surface *screen;
	screen = SDL_SetVideoMode(640, 480, 32,
SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
	if (screen = NULL) {
		printf("Unable to set 640x480 video mode: %s\n", SDL_GetError());
		exit(1);
	}

	int nDone = 0;
	while (nDone == 0) {
		SDL_Event event;
		while (SDL_PollEvent(&event)) {
			if (event.type == SDL_QUIT) nDone = 1;
			if (event.type == SDL_KEYDOWN)
				if (event.key.keysym.sym == SDLK_ESCAPE) nDone = 1;
		}

		DrawScene(screen);
	}

	return 0;
}

:: Greg McClure
:: Third Stone Media
:: gmcclure at thirdstone.net
:: http://www.thirdstone.net
:: (949) 719-9678 ph
:: (978) 383-8306 fx
---
Outgoing mail has been checked for viruses by AVG before being sent.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.384 / Virus Database: 216 - Release Date: 8/21/2002





More information about the SDL mailing list