Mercurial > sdl-ios-xcode
changeset 3185:44d5474c2c8a
Continue working on QNX GF and Photon support.
author | Mike Gorchak <lestat@i.com.ua> |
---|---|
date | Wed, 10 Jun 2009 08:09:04 +0000 |
parents | 68d3b48a6002 |
children | 51750b7a966f |
files | src/video/photon/SDL_photon.c src/video/photon/SDL_photon_pixelfmt.c src/video/qnxgf/SDL_gf_pixelfmt.c src/video/qnxgf/SDL_qnxgf.c |
diffstat | 4 files changed, 154 insertions(+), 38 deletions(-) [+] |
line wrap: on
line diff
--- a/src/video/photon/SDL_photon.c Wed Jun 10 05:56:36 2009 +0000 +++ b/src/video/photon/SDL_photon.c Wed Jun 10 08:09:04 2009 +0000 @@ -61,7 +61,7 @@ #endif /* SDL_VIDEO_OPENGL_ES */ /* Low level device graphics driver names, which they are reporting */ -Photon_DeviceCaps photon_devicename[] = { +static const Photon_DeviceCaps photon_devicename[] = { /* ATI Rage 128 graphics driver (devg-ati_rage128) */ {"ati_rage128", SDL_PHOTON_ACCELERATED | SDL_PHOTON_UNACCELERATED_3D} , @@ -384,19 +384,47 @@ /* Query photon about graphics hardware caps and current video mode */ status = PgGetGraphicsHWCaps(&hwcaps); if (status != 0) { - SDL_SetError("Photon: Can't get graphics capabilities"); - SDL_free(didata->cursor); - SDL_free(didata); - return -1; - } + PhRect_t extent; + PdOffscreenContext_t* curctx; + + /* If error happens, this also could mean, that photon is working */ + /* under custom (not listed by photon) video mode */ + status=PhWindowQueryVisible(Ph_QUERY_GRAPHICS, 0, 0, &extent); + if (status != 0) { + SDL_SetError("Photon: Can't get graphics driver region"); + SDL_free(didata->cursor); + SDL_free(didata); + return -1; + } + modeinfo.width=extent.lr.x+1; + modeinfo.height=extent.lr.y+1; + /* Hardcode 60Hz, as the base refresh rate frequency */ + hwcaps.current_rrate=60; + /* Clear current video driver name, no way to get it somehow */ + hwcaps.chip_name[0]=0x00; - /* Get current video mode details */ - status = PgGetVideoModeInfo(hwcaps.current_video_mode, &modeinfo); - if (status != 0) { - SDL_SetError("Photon: Can't get current video mode information"); - SDL_free(didata->cursor); - SDL_free(didata); - return -1; + /* Create offscreen context from video memory, which is currently */ + /* displayed on the screen */ + curctx=PdCreateOffscreenContext(0, 0, 0, Pg_OSC_MAIN_DISPLAY); + if (curctx==NULL) + { + SDL_SetError("Photon: Can't get display area capabilities"); + SDL_free(didata->cursor); + SDL_free(didata); + return -1; + } + /* Retrieve current bpp */ + modeinfo.type=curctx->format; + PhDCRelease(curctx); + } else { + /* Get current video mode details */ + status = PgGetVideoModeInfo(hwcaps.current_video_mode, &modeinfo); + if (status != 0) { + SDL_SetError("Photon: Can't get current video mode information"); + SDL_free(didata->cursor); + SDL_free(didata); + return -1; + } } /* Setup current desktop mode for SDL */ @@ -527,6 +555,27 @@ mode.format = photon_image_to_sdl_pixelformat(modeinfo.type); mode.driverdata = NULL; SDL_AddDisplayMode(_this->current_display, &mode); + + /* If mode is RGBA8888, add the same mode as RGBx888 */ + if (modeinfo.type == Pg_IMAGE_DIRECT_8888) { + mode.w = modeinfo.width; + mode.h = modeinfo.height; + mode.refresh_rate = modeinfo.refresh_rates[jt]; + mode.format = SDL_PIXELFORMAT_RGB888; + mode.driverdata = NULL; + SDL_AddDisplayMode(_this->current_display, &mode); + } + + /* If mode is RGBA1555, add the same mode as RGBx555 */ + if (modeinfo.type == Pg_IMAGE_DIRECT_1555) { + mode.w = modeinfo.width; + mode.h = modeinfo.height; + mode.refresh_rate = modeinfo.refresh_rates[jt]; + mode.format = SDL_PIXELFORMAT_RGB555; + mode.driverdata = NULL; + SDL_AddDisplayMode(_this->current_display, &mode); + } + jt++; } else { break; @@ -1453,7 +1502,7 @@ if (configs == 0) { int32_t it; int32_t jt; - GLint depthbits[4] = { 32, 24, 16, EGL_DONT_CARE }; + static const GLint depthbits[4] = { 32, 24, 16, EGL_DONT_CARE }; for (it = 0; it < 4; it++) { for (jt = 16; jt >= 0; jt--) {
--- a/src/video/photon/SDL_photon_pixelfmt.c Wed Jun 10 05:56:36 2009 +0000 +++ b/src/video/photon/SDL_photon_pixelfmt.c Wed Jun 10 08:09:04 2009 +0000 @@ -72,6 +72,11 @@ return 15; } break; + case SDL_PIXELFORMAT_RGB555: + { + return 15; + } + break; case SDL_PIXELFORMAT_ABGR1555: { return 15; @@ -82,9 +87,14 @@ return 16; } break; + case SDL_PIXELFORMAT_RGB24: + { + return 24; + } + break; case SDL_PIXELFORMAT_RGB888: { - return 24; + return 32; } break; case SDL_PIXELFORMAT_BGRA8888: @@ -133,12 +143,12 @@ break; case Pg_IMAGE_DIRECT_8888: { - return SDL_PIXELFORMAT_BGRA8888; + return SDL_PIXELFORMAT_ARGB8888; } break; case Pg_IMAGE_DIRECT_888: { - return SDL_PIXELFORMAT_RGB888; + return SDL_PIXELFORMAT_RGB24; } break; case Pg_IMAGE_DIRECT_565: @@ -170,12 +180,12 @@ return Pg_IMAGE_PALETTE_BYTE; } break; - case SDL_PIXELFORMAT_BGRA8888: + case SDL_PIXELFORMAT_ARGB8888: { return Pg_IMAGE_DIRECT_8888; } break; - case SDL_PIXELFORMAT_RGB888: + case SDL_PIXELFORMAT_RGB24: { return Pg_IMAGE_DIRECT_888; } @@ -190,6 +200,11 @@ return Pg_IMAGE_DIRECT_1555; } break; + case SDL_PIXELFORMAT_RGB555: + { + return Pg_IMAGE_DIRECT_555; + } + break; } return 0;
--- a/src/video/qnxgf/SDL_gf_pixelfmt.c Wed Jun 10 05:56:36 2009 +0000 +++ b/src/video/qnxgf/SDL_gf_pixelfmt.c Wed Jun 10 08:09:04 2009 +0000 @@ -41,8 +41,9 @@ return GF_FORMAT_PACK_ARGB1555; } break; - case SDL_PIXELFORMAT_ABGR1555: + case SDL_PIXELFORMAT_RGB555: { + /* RGB555 is the same as ARGB1555, but alpha is ignored */ return GF_FORMAT_PACK_ARGB1555; } break; @@ -51,18 +52,33 @@ return GF_FORMAT_PACK_RGB565; } break; - case SDL_PIXELFORMAT_RGB888: + case SDL_PIXELFORMAT_BGR565: { + return GF_FORMAT_PKBE_RGB565; + } + break; + case SDL_PIXELFORMAT_RGB24: + { + /* GF has wrong components order */ return GF_FORMAT_BGR888; } break; - case SDL_PIXELFORMAT_BGRA8888: + case SDL_PIXELFORMAT_RGB888: { + /* The same format as ARGB8888, but with alpha ignored */ + /* and GF has wrong components order */ return GF_FORMAT_BGRA8888; } break; case SDL_PIXELFORMAT_ARGB8888: { + /* GF has wrong components order */ + return GF_FORMAT_BGRA8888; + } + break; + case SDL_PIXELFORMAT_BGRA8888: + { + /* GF has wrong components order */ return GF_FORMAT_ARGB8888; } break; @@ -110,14 +126,9 @@ return SDL_PIXELFORMAT_ARGB1555; } break; - case GF_FORMAT_PKBE_ARGB1555: - { - return SDL_PIXELFORMAT_ABGR1555; - } - break; case GF_FORMAT_PKBE_RGB565: { - return SDL_PIXELFORMAT_RGB565; + return SDL_PIXELFORMAT_BGR565; } break; case GF_FORMAT_PKLE_RGB565: @@ -132,20 +143,22 @@ break; case GF_FORMAT_BGR888: { - return SDL_PIXELFORMAT_RGB888; + /* GF has wrong components order */ + return SDL_PIXELFORMAT_RGB24; } break; case GF_FORMAT_BGRA8888: { - return SDL_PIXELFORMAT_BGRA8888; + /* GF has wrong components order */ + return SDL_PIXELFORMAT_ARGB8888; } break; case GF_FORMAT_ARGB8888: { - return SDL_PIXELFORMAT_ARGB8888; + /* GF has wrong components order */ + return SDL_PIXELFORMAT_BGRA8888; } break; - case GF_FORMAT_PLANAR_YUV_YV12: { return SDL_PIXELFORMAT_YV12;
--- a/src/video/qnxgf/SDL_qnxgf.c Wed Jun 10 05:56:36 2009 +0000 +++ b/src/video/qnxgf/SDL_qnxgf.c Wed Jun 10 08:09:04 2009 +0000 @@ -47,7 +47,7 @@ /* but some drivers are not. Later we can distinguish one driver from another */ /* Feel free to add any new custom graphics mode */ /******************************************************************************/ -static SDL_DisplayMode generic_mode[] = { +static const SDL_DisplayMode generic_mode[] = { {0, 320, 200, 70, NULL}, /* 320x200 modes are 70Hz and 85Hz */ {0, 320, 200, 85, NULL}, {0, 320, 240, 70, NULL}, /* 320x240 modes are 70Hz and 85Hz */ @@ -100,7 +100,7 @@ }; /* Low level device graphics driver names, which they are reporting */ -GF_DeviceCaps gf_devicename[] = { +static const GF_DeviceCaps gf_devicename[] = { /* ATI Rage 128 graphics driver (devg-ati_rage128) */ {"ati_rage128", SDL_GF_ACCELERATED | SDL_GF_NOLOWRESOLUTION | SDL_GF_UNACCELERATED_3D | SDL_GF_VIDEOMEMORY}, @@ -644,6 +644,25 @@ mode.driverdata = NULL; SDL_AddDisplayMode(_this->current_display, &mode); + /* If mode is RGBA8888, add the same mode as RGBx888 */ + if (modeinfo.primary_format==GF_FORMAT_BGRA8888) { + mode.w = generic_mode[jt].w; + mode.h = generic_mode[jt].h; + mode.refresh_rate = generic_mode[jt].refresh_rate; + mode.format = SDL_PIXELFORMAT_RGB888; + mode.driverdata = NULL; + SDL_AddDisplayMode(_this->current_display, &mode); + } + /* If mode is RGBA1555, add the same mode as RGBx555 */ + if (modeinfo.primary_format==GF_FORMAT_PACK_ARGB1555) { + mode.w = generic_mode[jt].w; + mode.h = generic_mode[jt].h; + mode.refresh_rate = generic_mode[jt].refresh_rate; + mode.format = SDL_PIXELFORMAT_RGB555; + mode.driverdata = NULL; + SDL_AddDisplayMode(_this->current_display, &mode); + } + jt++; } while (1); } else { @@ -660,6 +679,26 @@ primary_format); mode.driverdata = NULL; SDL_AddDisplayMode(_this->current_display, &mode); + + /* If mode is RGBA8888, add the same mode as RGBx888 */ + if (modeinfo.primary_format==GF_FORMAT_BGRA8888) { + mode.w = modeinfo.xres; + mode.h = modeinfo.yres; + mode.refresh_rate = modeinfo.refresh[jt]; + mode.format = SDL_PIXELFORMAT_RGB888; + mode.driverdata = NULL; + SDL_AddDisplayMode(_this->current_display, &mode); + } + /* If mode is RGBA1555, add the same mode as RGBx555 */ + if (modeinfo.primary_format==GF_FORMAT_PACK_ARGB1555) { + mode.w = modeinfo.xres; + mode.h = modeinfo.yres; + mode.refresh_rate = modeinfo.refresh[jt]; + mode.format = SDL_PIXELFORMAT_RGB555; + mode.driverdata = NULL; + SDL_AddDisplayMode(_this->current_display, &mode); + } + jt++; } else { break; @@ -823,7 +862,7 @@ /* Mark main display layer is attached */ didata->layer_attached = SDL_TRUE; - /* Set layer source and destination viewport */ + /* Set layer source and destination viewports */ gf_layer_set_src_viewport(didata->layer, 0, 0, mode->w - 1, mode->h - 1); gf_layer_set_dst_viewport(didata->layer, 0, 0, mode->w - 1, mode->h - 1); @@ -1464,7 +1503,7 @@ if (configs == 0) { int32_t it; int32_t jt; - GLint depthbits[4] = { 32, 24, 16, EGL_DONT_CARE }; + static const GLint depthbits[4] = { 32, 24, 16, EGL_DONT_CARE }; for (it = 0; it < 4; it++) { for (jt = 16; jt >= 0; jt--) { @@ -1520,7 +1559,7 @@ SDL_VIDEO_GF_OPENGLES_CONFS, &configs); if (status != EGL_TRUE) { SDL_SetError - ("Photon: Can't find closest configuration for OpenGL ES"); + ("GF: Can't find closest configuration for OpenGL ES"); return NULL; } if (configs != 0) { @@ -1535,7 +1574,7 @@ /* No available configs */ if (configs == 0) { SDL_SetError - ("Photon: Can't find any configuration for OpenGL ES"); + ("GF: Can't find any configuration for OpenGL ES"); return NULL; } }