# HG changeset patch # User Sam Lantinga # Date 1022614292 0 # Node ID bce7171e7a85272376ab71c2b15e0e21d06a3705 # Parent 11c8a7684f743f463a318a92e2d36d8ee9d052d1 Date: Wed, 22 May 2002 22:30:58 +0300 From: "Mike Gorchak" Subject: One more QNX patch Hi ! - Fixed graywin test application. Added properly support for window size not equal to 640x480. - Added support for not aligned pitch of image in SDL_SWSURFACE and SDL_HWSURFACE. Using Photon builtin alignes. - Added memory clear after each malloc to avoid problems in the future :) - Removed unused variables and static variables, fixed some warnings. - Updated readme.QNX file. diff -r 11c8a7684f74 -r bce7171e7a85 README.QNX --- a/README.QNX Tue May 28 19:24:11 2002 +0000 +++ b/README.QNX Tue May 28 19:31:32 2002 +0000 @@ -1,4 +1,4 @@ -README by Mike Gorchak +README by Mike Gorchak , OpenGL in window mode works well and stable, in fullscreen mode too, but fullscreen mode has not been heavily tested. @@ -16,6 +16,9 @@ videomode has. 3. No shared libraries yet. We need manually set flag to 'configure' --disable-shared. +4. Due to Photon API limitation, flag SDL_HWSURFACE supported on- + ly in case of desktop bpp is equal requested bpp in window mo- + de. Some building issues: diff -r 11c8a7684f74 -r bce7171e7a85 src/video/photon/SDL_ph_image.c --- a/src/video/photon/SDL_ph_image.c Tue May 28 19:24:11 2002 +0000 +++ b/src/video/photon/SDL_ph_image.c Tue May 28 19:31:32 2002 +0000 @@ -38,11 +38,14 @@ int ph_SetupImage(_THIS, SDL_Surface *screen) { + PgColor_t* palette=NULL; int type=0; - PgColor_t* palette=NULL; + int bpp; + + bpp=screen->format->BitsPerPixel; /* Determine image type */ - switch(screen->format->BitsPerPixel) + switch(bpp) { case 8:{ type = Pg_IMAGE_PALETTE_BYTE; @@ -65,14 +68,14 @@ } break; default:{ - fprintf(stderr,"ph_SetupImage(): unsupported bbp = %d\n", screen->format->BitsPerPixel); + fprintf(stderr,"ph_SetupImage(): unsupported bbp = %d\n", bpp); return -1; } break; } /* palette emulation code */ - if ((screen->format->BitsPerPixel==8) && (desktoppal==SDLPH_PAL_EMULATE)) + if ((bpp==8) && (desktoppal==SDLPH_PAL_EMULATE)) { /* creating image palette */ palette=malloc(_Pg_MAX_PALETTE*sizeof(PgColor_t)); @@ -81,7 +84,7 @@ /* using shared memory for speed (set last param to 1) */ if ((SDL_Image = PhCreateImage(NULL, screen->w, screen->h, type, palette, _Pg_MAX_PALETTE, 1)) == NULL) { - fprintf(stderr,"ph_SetupImage: PhCreateImage failed for bpp=8.\n"); + fprintf(stderr,"ph_SetupImage(): PhCreateImage failed for bpp=8.\n"); return -1; } } @@ -94,8 +97,9 @@ return -1; } } - + screen->pixels = SDL_Image->image; + screen->pitch = SDL_Image->bpl; /* Recalculated pitch, created by PhCreateImage */ this->UpdateRects = ph_NormalUpdate; @@ -105,9 +109,12 @@ int ph_SetupOCImage(_THIS, SDL_Surface *screen) { int type = 0; + int bpp; + + bpp=screen->format->BitsPerPixel; /* Determine image type */ - switch(screen->format->BitsPerPixel) + switch(bpp) { case 8: { type = Pg_IMAGE_PALETTE_BYTE; @@ -130,7 +137,7 @@ } break; default:{ - fprintf(stderr,"ph_SetupOCImage(): unsupported bpp = %d\n", screen->format->BitsPerPixel); + fprintf(stderr,"ph_SetupOCImage(): unsupported bpp = %d\n", bpp); return -1; } break; @@ -138,6 +145,8 @@ OCImage.FrameData0 = (FRAMEDATA *) malloc((size_t)(sizeof(FRAMEDATA))); OCImage.FrameData1 = (FRAMEDATA *) malloc((size_t)(sizeof(FRAMEDATA))); + memset(OCImage.FrameData0, 0x00, (size_t)(sizeof(FRAMEDATA))); + memset(OCImage.FrameData1, 0x00, (size_t)(sizeof(FRAMEDATA))); if(OCImage.direct_context == NULL) { @@ -152,7 +161,7 @@ return -1; } - OCImage.Stride = OCImage.offscreen_context->pitch; + screen->pitch = OCImage.offscreen_context->pitch; /* Recalculated pitch */ if (OCImage.flags & SDL_DOUBLEBUF) { @@ -269,10 +278,6 @@ return; } -static PhPoint_t ph_pos; -static PhRect_t ph_rect; -static int i; - void ph_OpenGLUpdate(_THIS, int numrects, SDL_Rect* rects) { this->GL_SwapBuffers(this); @@ -282,7 +287,11 @@ void ph_NormalUpdate(_THIS, int numrects, SDL_Rect *rects) { - for ( i=0; iCreateWMCursor(this, blank_cdata, blank_cmask, @@ -200,17 +201,17 @@ if (SDL_BlankCursor == NULL) { - printf("ph_VideoInit: could not create blank cursor\n"); + printf("ph_VideoInit(): could not create blank cursor !\n"); } if (PgGetGraphicsHWCaps(&my_hwcaps) < 0) { - fprintf(stderr,"ph_VideoInit: GetGraphicsHWCaps failed!! \n"); + fprintf(stderr,"ph_VideoInit(): GetGraphicsHWCaps failed !\n"); } if (PgGetVideoModeInfo(my_hwcaps.current_video_mode, &my_mode_info) < 0) { - fprintf(stderr,"ph_VideoInit: PgGetVideoModeInfo failed\n"); + fprintf(stderr,"ph_VideoInit(): PgGetVideoModeInfo failed !\n"); } /* We need to return BytesPerPixel as it in used by CreateRGBsurface */ diff -r 11c8a7684f74 -r bce7171e7a85 src/video/photon/SDL_ph_video.h --- a/src/video/photon/SDL_ph_video.h Tue May 28 19:24:11 2002 +0000 +++ b/src/video/photon/SDL_ph_video.h Tue May 28 19:31:32 2002 +0000 @@ -75,7 +75,6 @@ FRAMEDATA *FrameData0; FRAMEDATA *FrameData1; int current; - long Stride; long flags; } ocimage; diff -r 11c8a7684f74 -r bce7171e7a85 src/video/photon/SDL_phyuv.c --- a/src/video/photon/SDL_phyuv.c Tue May 28 19:24:11 2002 +0000 +++ b/src/video/photon/SDL_phyuv.c Tue May 28 19:31:32 2002 +0000 @@ -210,8 +210,10 @@ overlay->hwdata->screen_width = 1024; overlay->hwdata->screen_height = 768; - overlay->hwdata->FrameData0 = (FRAMEDATA *) malloc((size_t)(sizeof( FRAMEDATA))); - overlay->hwdata->FrameData1 = (FRAMEDATA *) malloc((size_t)(sizeof( FRAMEDATA))); + overlay->hwdata->FrameData0 = (FRAMEDATA *) malloc((size_t)(sizeof(FRAMEDATA))); + overlay->hwdata->FrameData1 = (FRAMEDATA *) malloc((size_t)(sizeof(FRAMEDATA))); + memset(overlay->hwdata->FrameData0, 0x00, (size_t)(sizeof(FRAMEDATA))); + memset(overlay->hwdata->FrameData1, 0x00, (size_t)(sizeof(FRAMEDATA))); overlay->hwdata->caps.size = sizeof(overlay->hwdata->caps); @@ -493,7 +495,7 @@ //Lock gets the pointer and passes it to the app. The app writes all yuv data into overlay->pixels //Note this is defined as Uint8 **pixels; /* Read-write */ overlay->pixels = &overlay->hwdata->CurrentFrameData->Y; - overlay->pitches = &overlay->hwdata->YStride; + overlay->pitches = (Uint16*) &(overlay->hwdata->YStride); return(0); } diff -r 11c8a7684f74 -r bce7171e7a85 test/graywin.c --- a/test/graywin.c Tue May 28 19:24:11 2002 +0000 +++ b/test/graywin.c Tue May 28 19:31:32 2002 +0000 @@ -15,7 +15,7 @@ #endif /* Draw a randomly sized and colored box centered about (X,Y) */ -void DrawBox(SDL_Surface *screen, int X, int Y) +void DrawBox(SDL_Surface *screen, int X, int Y, int width, int height) { static unsigned int seeded = 0; SDL_Rect area; @@ -28,8 +28,8 @@ } /* Get the bounds of the rectangle */ - area.w = (rand()%640); - area.h = (rand()%480); + area.w = (rand()%width); + area.h = (rand()%height); area.x = X-(area.w/2); area.y = Y-(area.h/2); color = (rand()%NUM_COLORS); @@ -72,7 +72,7 @@ } buffer = (Uint8 *)screen->pixels; for ( i=0; ih; ++i ) { - memset(buffer,(i*(NUM_COLORS-1))/screen->h, screen->w); + memset(buffer,(i*(NUM_COLORS-1))/screen->h, screen->w * screen->format->BytesPerPixel); buffer += screen->pitch; } SDL_UnlockSurface(screen); @@ -126,7 +126,7 @@ if ( argv[argc] && (strcmp(argv[argc], "-fullscreen") == 0) ) { videoflags |= SDL_FULLSCREEN; } else { - fprintf(stderr, "Usage: %s [-warp] [-fullscreen]\n", + fprintf(stderr, "Usage: %s [-width] [-height] [-bpp] [-hw] [-hwpalette] [-noframe] [-fullscreen]\n", argv[0]); exit(1); } @@ -143,7 +143,7 @@ while ( !done && SDL_WaitEvent(&event) ) { switch (event.type) { case SDL_MOUSEBUTTONDOWN: - DrawBox(screen, event.button.x, event.button.y); + DrawBox(screen, event.button.x, event.button.y, width, height); break; case SDL_KEYDOWN: /* Ignore ALT-TAB for windows */ @@ -153,7 +153,7 @@ } /* Center the mouse on */ if ( event.key.keysym.sym == SDLK_SPACE ) { - SDL_WarpMouse(640/2, 480/2); + SDL_WarpMouse(width/2, height/2); break; } /* Toggle fullscreen mode on */