| 219 | } |
| 220 | |
| 221 | std::unique_ptr<char[]> GetUncompressedBitmap( const Tr2HostBitmap* bitmap ) |
| 222 | { |
| 223 | std::unique_ptr<char[]> bits( new char[bitmap->GetWidth() * bitmap->GetHeight() * 4] ); |
| 224 | switch( bitmap->GetFormat() ) |
| 225 | { |
| 226 | case Tr2RenderContextEnum::PIXEL_FORMAT_BC1_TYPELESS: |
| 227 | case Tr2RenderContextEnum::PIXEL_FORMAT_BC1_UNORM: |
| 228 | case Tr2RenderContextEnum::PIXEL_FORMAT_BC1_UNORM_SRGB: |
| 229 | DecompressBC1( bits.get(), bitmap->GetRawData(), bitmap->GetWidth(), bitmap->GetHeight(), bitmap->GetWidth() * sizeof( uint32_t ) ); |
| 230 | break; |
| 231 | |
| 232 | case Tr2RenderContextEnum::PIXEL_FORMAT_BC2_TYPELESS: |
| 233 | case Tr2RenderContextEnum::PIXEL_FORMAT_BC2_UNORM: |
| 234 | case Tr2RenderContextEnum::PIXEL_FORMAT_BC2_UNORM_SRGB: |
| 235 | DecompressBC2( bits.get(), bitmap->GetRawData(), bitmap->GetWidth(), bitmap->GetHeight(), bitmap->GetWidth() * sizeof( uint32_t ) ); |
| 236 | break; |
| 237 | case Tr2RenderContextEnum::PIXEL_FORMAT_B8G8R8A8_TYPELESS: |
| 238 | case Tr2RenderContextEnum::PIXEL_FORMAT_B8G8R8A8_UNORM: |
| 239 | case Tr2RenderContextEnum::PIXEL_FORMAT_B8G8R8A8_UNORM_SRGB: { |
| 240 | const char* row = bitmap->GetRawData(); |
| 241 | for( uint32_t j = 0; j < bitmap->GetHeight(); ++j ) |
| 242 | { |
| 243 | memcpy( bits.get() + j * bitmap->GetWidth() * 4, row, bitmap->GetWidth() * 4 ); |
| 244 | row += bitmap->GetPitch(); |
| 245 | } |
| 246 | } |
| 247 | break; |
| 248 | default: |
| 249 | return nullptr; |
| 250 | } |
| 251 | return bits; |
| 252 | } |
| 253 | |
| 254 | // -------------------------------------------------------------------------------------- |
| 255 | // Description: |
no test coverage detected