|
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,22 @@ 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 | + |
| 3402 | +SDL_Surface* bm_to_sdl_surface(int handle) |
| 3403 | +{ |
3401 | 3404 | Assertion(bm_is_valid(handle), "%d is no valid bitmap handle!", handle); |
3402 | 3405 |
|
3403 | | - int w; |
3404 | | - int h; |
| 3406 | + bitmap* bmp = bm_lock(handle, 32, BMP_TEX_XPARENT); |
3405 | 3407 |
|
3406 | | - bm_get_info(handle, &w, &h, nullptr, nullptr); |
3407 | | - Uint32 rmask, gmask, bmask, amask; |
| 3408 | + auto bitmapSurface = SDL_CreateSurface(bmp->w, bmp->h, SDL_PIXELFORMAT_BGRA32); |
3408 | 3409 |
|
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 |
3420 | | - |
3421 | | - SDL_Surface* bitmapSurface = SDL_CreateRGBSurface(0, w, h, 32, rmask, gmask, bmask, amask); |
3422 | | - if (SDL_LockSurface(bitmapSurface) < 0) { |
3423 | | - return nullptr; |
| 3410 | + if (bitmapSurface) { |
| 3411 | + memcpy(bitmapSurface->pixels, reinterpret_cast<void *>(bmp->data), |
| 3412 | + bmp->w * bmp->h * (bmp->bpp >> 3)); |
3424 | 3413 | } |
3425 | | - bitmap* bmp = bm_lock(handle, 32, BMP_TEX_XPARENT); |
3426 | | - |
3427 | | - memcpy(bitmapSurface->pixels, reinterpret_cast<void*>(bmp->data), static_cast<size_t>(w * h * 4)); |
3428 | 3414 |
|
3429 | 3415 | bm_unlock(handle); |
3430 | | - SDL_UnlockSurface(bitmapSurface); |
| 3416 | + bm_unload(handle); |
3431 | 3417 |
|
3432 | 3418 | return bitmapSurface; |
3433 | 3419 |
|
|
0 commit comments