|
13 | 13 | #define WIN32_LEAN_AND_MEAN |
14 | 14 | #define BMPMAN_INTERNAL |
15 | 15 |
|
| 16 | +#include "globalincs/pstypes.h" |
16 | 17 | #include "anim/animplay.h" |
17 | 18 | #include "anim/packunpack.h" |
18 | 19 | #include "bmpman/bm_internal.h" |
@@ -3397,37 +3398,18 @@ bool bm_validate_filename(const SCP_string& file, bool single_frame, bool animat |
3397 | 3398 | } |
3398 | 3399 | return false; |
3399 | 3400 | } |
3400 | | -SDL_Surface* bm_to_sdl_surface(int handle) { |
3401 | | - Assertion(bm_is_valid(handle), "%d is no valid bitmap handle!", handle); |
3402 | | - |
3403 | | - int w; |
3404 | | - int h; |
3405 | | - |
3406 | | - bm_get_info(handle, &w, &h, nullptr, nullptr); |
3407 | | - Uint32 rmask, gmask, bmask, amask; |
3408 | 3401 |
|
3409 | | -#if SDL_BYTEORDER == SDL_BIG_ENDIAN |
3410 | | - rmask = 0x0000ff00; |
3411 | | - gmask = 0x00ff0000; |
3412 | | - bmask = 0xff000000; |
3413 | | - amask = 0x000000ff; |
3414 | | -#else |
3415 | | - rmask = 0x00ff0000; |
3416 | | - gmask = 0x0000ff00; |
3417 | | - bmask = 0x000000ff; |
3418 | | - amask = 0xff000000; |
3419 | | -#endif |
| 3402 | +SDL_Surface* bm_to_sdl_surface(int handle) |
| 3403 | +{ |
| 3404 | + Assertion(bm_is_valid(handle), "%d is no valid bitmap handle!", handle); |
3420 | 3405 |
|
3421 | | - SDL_Surface* bitmapSurface = SDL_CreateRGBSurface(0, w, h, 32, rmask, gmask, bmask, amask); |
3422 | | - if (SDL_LockSurface(bitmapSurface) < 0) { |
3423 | | - return nullptr; |
3424 | | - } |
3425 | 3406 | bitmap* bmp = bm_lock(handle, 32, BMP_TEX_XPARENT); |
3426 | 3407 |
|
3427 | | - memcpy(bitmapSurface->pixels, reinterpret_cast<void*>(bmp->data), static_cast<size_t>(w * h * 4)); |
| 3408 | + auto bitmapSurface = SDL_CreateSurfaceFrom(bmp->w, bmp->h, SDL_PIXELFORMAT_BGRA32, |
| 3409 | + reinterpret_cast<void *>(bmp->data), |
| 3410 | + bmp->rowsize * (bmp->bpp >> 3)); |
3428 | 3411 |
|
3429 | 3412 | bm_unlock(handle); |
3430 | | - SDL_UnlockSurface(bitmapSurface); |
3431 | 3413 |
|
3432 | 3414 | return bitmapSurface; |
3433 | 3415 |
|
|
0 commit comments