comparison src/SDL_compat.c @ 3685:64ce267332c6

Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
author Sam Lantinga <slouken@libsdl.org>
date Thu, 21 Jan 2010 06:21:52 +0000
parents 25dc4a86132c
children f7b03b6838cb
comparison
equal deleted inserted replaced
3684:cc564f08884f 3685:64ce267332c6
28 28
29 #include "video/SDL_sysvideo.h" 29 #include "video/SDL_sysvideo.h"
30 #include "video/SDL_pixels_c.h" 30 #include "video/SDL_pixels_c.h"
31 #include "video/SDL_yuv_sw_c.h" 31 #include "video/SDL_yuv_sw_c.h"
32 32
33 static SDL_WindowID SDL_VideoWindow = 0; 33 static SDL_Window *SDL_VideoWindow = NULL;
34 static SDL_RendererInfo SDL_VideoRendererInfo; 34 static SDL_RendererInfo SDL_VideoRendererInfo;
35 static SDL_TextureID SDL_VideoTexture = 0; 35 static SDL_Texture *SDL_VideoTexture = NULL;
36 static SDL_Surface *SDL_VideoSurface = NULL; 36 static SDL_Surface *SDL_VideoSurface = NULL;
37 static SDL_Surface *SDL_ShadowSurface = NULL; 37 static SDL_Surface *SDL_ShadowSurface = NULL;
38 static SDL_Surface *SDL_PublicSurface = NULL; 38 static SDL_Surface *SDL_PublicSurface = NULL;
39 static SDL_GLContext *SDL_VideoContext = NULL; 39 static SDL_GLContext *SDL_VideoContext = NULL;
40 static Uint32 SDL_VideoFlags = 0; 40 static Uint32 SDL_VideoFlags = 0;
292 button = SDL_BUTTON_WHEELUP; 292 button = SDL_BUTTON_WHEELUP;
293 } else { 293 } else {
294 button = SDL_BUTTON_WHEELDOWN; 294 button = SDL_BUTTON_WHEELDOWN;
295 } 295 }
296 296
297 fake.button.which = event->wheel.windowID; 297 fake.button.which = event->wheel.which;
298 fake.button.button = button; 298 fake.button.button = button;
299 fake.button.x = x; 299 fake.button.x = x;
300 fake.button.y = y; 300 fake.button.y = y;
301 fake.button.windowID = event->wheel.windowID; 301 fake.button.windowID = event->wheel.windowID;
302 302
355 *y = (mode.h - h) / 2; 355 *y = (mode.h - h) / 2;
356 } 356 }
357 } 357 }
358 358
359 static SDL_Surface * 359 static SDL_Surface *
360 CreateVideoSurface(SDL_TextureID textureID) 360 CreateVideoSurface(SDL_Texture * texture)
361 { 361 {
362 SDL_Surface *surface; 362 SDL_Surface *surface;
363 Uint32 format; 363 Uint32 format;
364 int w, h; 364 int w, h;
365 int bpp; 365 int bpp;
366 Uint32 Rmask, Gmask, Bmask, Amask; 366 Uint32 Rmask, Gmask, Bmask, Amask;
367 void *pixels; 367 void *pixels;
368 int pitch; 368 int pitch;
369 369
370 if (SDL_QueryTexture(textureID, &format, NULL, &w, &h) < 0) { 370 if (SDL_QueryTexture(texture, &format, NULL, &w, &h) < 0) {
371 return NULL; 371 return NULL;
372 } 372 }
373 373
374 if (!SDL_PixelFormatEnumToMasks 374 if (!SDL_PixelFormatEnumToMasks
375 (format, &bpp, &Rmask, &Gmask, &Bmask, &Amask)) { 375 (format, &bpp, &Rmask, &Gmask, &Bmask, &Amask)) {
376 SDL_SetError("Unknown texture format"); 376 SDL_SetError("Unknown texture format");
377 return NULL; 377 return NULL;
378 } 378 }
379 379
380 if (SDL_QueryTexturePixels(textureID, &pixels, &pitch) == 0) { 380 if (SDL_QueryTexturePixels(texture, &pixels, &pitch) == 0) {
381 surface = 381 surface =
382 SDL_CreateRGBSurfaceFrom(pixels, w, h, bpp, pitch, Rmask, Gmask, 382 SDL_CreateRGBSurfaceFrom(pixels, w, h, bpp, pitch, Rmask, Gmask,
383 Bmask, Amask); 383 Bmask, Amask);
384 } else { 384 } else {
385 surface = 385 surface =
1502 Uint16 pitches[3]; 1502 Uint16 pitches[3];
1503 Uint8 *planes[3]; 1503 Uint8 *planes[3];
1504 1504
1505 SDL_SW_YUVTexture *sw; 1505 SDL_SW_YUVTexture *sw;
1506 1506
1507 SDL_TextureID textureID; 1507 SDL_Texture *texture;
1508 Uint32 texture_format; 1508 Uint32 texture_format;
1509 }; 1509 };
1510 1510
1511 SDL_Overlay * 1511 SDL_Overlay *
1512 SDL_CreateYUVOverlay(int w, int h, Uint32 format, SDL_Surface * display) 1512 SDL_CreateYUVOverlay(int w, int h, Uint32 format, SDL_Surface * display)
1583 case SDL_YVYU_OVERLAY: 1583 case SDL_YVYU_OVERLAY:
1584 overlay->pitches[0] = overlay->w * 2; 1584 overlay->pitches[0] = overlay->w * 2;
1585 break; 1585 break;
1586 } 1586 }
1587 1587
1588 overlay->hwdata->textureID = 1588 overlay->hwdata->texture =
1589 SDL_CreateTexture(texture_format, SDL_TEXTUREACCESS_STREAMING, w, h); 1589 SDL_CreateTexture(texture_format, SDL_TEXTUREACCESS_STREAMING, w, h);
1590 if (overlay->hwdata->textureID) { 1590 if (overlay->hwdata->texture) {
1591 overlay->hwdata->sw = NULL; 1591 overlay->hwdata->sw = NULL;
1592 } else { 1592 } else {
1593 SDL_DisplayMode current_mode; 1593 SDL_DisplayMode current_mode;
1594 1594
1595 overlay->hwdata->sw = SDL_SW_CreateYUVTexture(texture_format, w, h); 1595 overlay->hwdata->sw = SDL_SW_CreateYUVTexture(texture_format, w, h);
1599 } 1599 }
1600 1600
1601 /* Create a supported RGB format texture for display */ 1601 /* Create a supported RGB format texture for display */
1602 SDL_GetCurrentDisplayMode(&current_mode); 1602 SDL_GetCurrentDisplayMode(&current_mode);
1603 texture_format = current_mode.format; 1603 texture_format = current_mode.format;
1604 overlay->hwdata->textureID = 1604 overlay->hwdata->texture =
1605 SDL_CreateTexture(texture_format, 1605 SDL_CreateTexture(texture_format,
1606 SDL_TEXTUREACCESS_STREAMING, w, h); 1606 SDL_TEXTUREACCESS_STREAMING, w, h);
1607 } 1607 }
1608 if (!overlay->hwdata->textureID) { 1608 if (!overlay->hwdata->texture) {
1609 SDL_FreeYUVOverlay(overlay); 1609 SDL_FreeYUVOverlay(overlay);
1610 return NULL; 1610 return NULL;
1611 } 1611 }
1612 overlay->hwdata->texture_format = texture_format; 1612 overlay->hwdata->texture_format = texture_format;
1613 1613
1629 < 0) { 1629 < 0) {
1630 return -1; 1630 return -1;
1631 } 1631 }
1632 } else { 1632 } else {
1633 if (SDL_LockTexture 1633 if (SDL_LockTexture
1634 (overlay->hwdata->textureID, NULL, 1, &pixels, &pitch) 1634 (overlay->hwdata->texture, NULL, 1, &pixels, &pitch)
1635 < 0) { 1635 < 0) {
1636 return -1; 1636 return -1;
1637 } 1637 }
1638 } 1638 }
1639 overlay->pixels[0] = (Uint8 *) pixels; 1639 overlay->pixels[0] = (Uint8 *) pixels;
1664 } 1664 }
1665 if (overlay->hwdata->sw) { 1665 if (overlay->hwdata->sw) {
1666 void *pixels; 1666 void *pixels;
1667 int pitch; 1667 int pitch;
1668 if (SDL_LockTexture 1668 if (SDL_LockTexture
1669 (overlay->hwdata->textureID, NULL, 1, &pixels, &pitch) == 0) { 1669 (overlay->hwdata->texture, NULL, 1, &pixels, &pitch) == 0) {
1670 SDL_Rect srcrect; 1670 SDL_Rect srcrect;
1671 1671
1672 srcrect.x = 0; 1672 srcrect.x = 0;
1673 srcrect.y = 0; 1673 srcrect.y = 0;
1674 srcrect.w = overlay->w; 1674 srcrect.w = overlay->w;
1675 srcrect.h = overlay->h; 1675 srcrect.h = overlay->h;
1676 SDL_SW_CopyYUVToRGB(overlay->hwdata->sw, &srcrect, 1676 SDL_SW_CopyYUVToRGB(overlay->hwdata->sw, &srcrect,
1677 overlay->hwdata->texture_format, 1677 overlay->hwdata->texture_format,
1678 overlay->w, overlay->h, pixels, pitch); 1678 overlay->w, overlay->h, pixels, pitch);
1679 SDL_UnlockTexture(overlay->hwdata->textureID); 1679 SDL_UnlockTexture(overlay->hwdata->texture);
1680 } 1680 }
1681 } else { 1681 } else {
1682 SDL_UnlockTexture(overlay->hwdata->textureID); 1682 SDL_UnlockTexture(overlay->hwdata->texture);
1683 } 1683 }
1684 } 1684 }
1685 1685
1686 int 1686 int
1687 SDL_DisplayYUVOverlay(SDL_Overlay * overlay, SDL_Rect * dstrect) 1687 SDL_DisplayYUVOverlay(SDL_Overlay * overlay, SDL_Rect * dstrect)
1688 { 1688 {
1689 if (!overlay || !dstrect) { 1689 if (!overlay || !dstrect) {
1690 SDL_SetError("Passed a NULL overlay or dstrect"); 1690 SDL_SetError("Passed a NULL overlay or dstrect");
1691 return -1; 1691 return -1;
1692 } 1692 }
1693 if (SDL_RenderCopy(overlay->hwdata->textureID, NULL, dstrect) < 0) { 1693 if (SDL_RenderCopy(overlay->hwdata->texture, NULL, dstrect) < 0) {
1694 return -1; 1694 return -1;
1695 } 1695 }
1696 SDL_RenderPresent(); 1696 SDL_RenderPresent();
1697 return 0; 1697 return 0;
1698 } 1698 }
1702 { 1702 {
1703 if (!overlay) { 1703 if (!overlay) {
1704 return; 1704 return;
1705 } 1705 }
1706 if (overlay->hwdata) { 1706 if (overlay->hwdata) {
1707 if (overlay->hwdata->textureID) { 1707 if (overlay->hwdata->texture) {
1708 SDL_DestroyTexture(overlay->hwdata->textureID); 1708 SDL_DestroyTexture(overlay->hwdata->texture);
1709 } 1709 }
1710 SDL_free(overlay->hwdata); 1710 SDL_free(overlay->hwdata);
1711 } 1711 }
1712 SDL_free(overlay); 1712 SDL_free(overlay);
1713 } 1713 }