diff options
author | marxin <mliska@suse.cz> | 2019-01-25 11:49:06 +0100 |
---|---|---|
committer | marxin <mliska@suse.cz> | 2019-01-25 12:41:54 +0100 |
commit | 32713e60ab2c6ae1056e058b9d3a2cacca741595 (patch) | |
tree | 5157b51f28844ee8f4667b7cc37ef5bcca315194 | |
parent | 00ec3e9d2a296903688272aa64190935dcb74897 (diff) |
Use placement new in texture_loader_pvr.cpp (#24417).
Use constructor via placement new and swap colors directly.
-rw-r--r-- | modules/pvr/texture_loader_pvr.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/modules/pvr/texture_loader_pvr.cpp b/modules/pvr/texture_loader_pvr.cpp index d3f2f3c272..01e011e64c 100644 --- a/modules/pvr/texture_loader_pvr.cpp +++ b/modules/pvr/texture_loader_pvr.cpp @@ -33,6 +33,7 @@ #include "RgbaBitmap.h" #include "core/os/file_access.h" #include <string.h> +#include <new> static void _pvrtc_decompress(Image *p_img); @@ -215,12 +216,10 @@ static void _compress_pvrtc4(Image *p_img) { int ofs, size, w, h; img->get_mipmap_offset_size_and_dimensions(i, ofs, size, w, h); Javelin::RgbaBitmap bm(w, h); - copymem(bm.GetData(), &r[ofs], size); - { + for (unsigned j = 0; j < size / 4; j++) { Javelin::ColorRgba<unsigned char> *dp = bm.GetData(); - for (int j = 0; j < size / 4; j++) { - SWAP(dp[j].r, dp[j].b); - } + /* red and Green colors are swapped. */ + new (dp) Javelin::ColorRgba<unsigned char>(r[ofs + 4 * j + 2], r[ofs + 4 * j + 1], r[ofs + 4 * j], r[ofs + 4 * j + 3]); } new_img->get_mipmap_offset_size_and_dimensions(i, ofs, size, w, h); |