|
3 | 3 | #include "RenderUtils.h" |
4 | 4 | #include "detex.h" |
5 | 5 |
|
| 6 | +void ConvertABGR32FToBGRA8(const void* SourcePixelData, void* DestPixelData, int32 NumPixels) { |
| 7 | + const FLinearColor* SourceData = static_cast<const FLinearColor*>(SourcePixelData); |
| 8 | + FColor* DestData = static_cast<FColor*>(DestPixelData); |
| 9 | + |
| 10 | + for (int i = 0; i < NumPixels; i++) { |
| 11 | + //Use a FLinearColor for source data but swizzle the components |
| 12 | + const FLinearColor* CurrentColorFloat = SourceData++; |
| 13 | + FColor* CurrentColor = DestData++; |
| 14 | + FLinearColor LinearColor(CurrentColorFloat->G, |
| 15 | + CurrentColorFloat->B, |
| 16 | + CurrentColorFloat->A, |
| 17 | + CurrentColorFloat->R); |
| 18 | + *CurrentColor = LinearColor.ToFColor(true); |
| 19 | + } |
| 20 | +} |
| 21 | + |
6 | 22 | void ConvertFloatRGBAToBGRA8(const void* SourcePixelData, void* DestPixelData, int32 NumPixels) { |
7 | 23 | const FFloat16Color* SourceData = static_cast<const FFloat16Color*>(SourcePixelData); |
8 | 24 | FColor* DestData = static_cast<FColor*>(DestPixelData); |
@@ -102,10 +118,14 @@ bool FTextureDecompressor::DecompressTextureData(EPixelFormat PixelFormat, const |
102 | 118 | //Convert 16-bit FloatRGBA image to BGRA8 image |
103 | 119 | ConvertFloatRGBAToBGRA8(SourceData, DestData, NumPixels); |
104 | 120 |
|
| 121 | + } else if (PixelFormat == EPixelFormat::PF_A32B32G32R32F) { |
| 122 | + //Convert 32-bit FloatABGR image to BGRA8 image |
| 123 | + ConvertABGR32FToBGRA8(SourceData, DestData, NumPixels); |
| 124 | + |
105 | 125 | } else if (PixelFormat == EPixelFormat::PF_FloatRGB || PixelFormat == EPixelFormat::PF_FloatR11G11B10) { |
106 | 126 | //Convert that weird float low-precision format that nobody is using to BGRA8 image |
107 | 127 | ConvertFloatR11G11B10ToBGRA8(SourceData, DestData, NumPixels); |
108 | | - |
| 128 | + |
109 | 129 | } else { |
110 | 130 | //Well, this format is not supported apparently |
111 | 131 | if (OutErrorMessage) { |
|
0 commit comments