diff --git a/scwx-qt/source/scwx/qt/manager/resource_manager.cpp b/scwx-qt/source/scwx/qt/manager/resource_manager.cpp index 19d5c50f..aba8c918 100644 --- a/scwx-qt/source/scwx/qt/manager/resource_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/resource_manager.cpp @@ -92,7 +92,7 @@ void LoadImageResources(const std::vector& urlStrings) if (textureCached) { util::TextureAtlas& textureAtlas = util::TextureAtlas::Instance(); - textureAtlas.BuildAtlas(1024, 1024); + textureAtlas.BuildAtlas(2048, 2048); } } @@ -119,7 +119,7 @@ static void LoadTextures() ":/res/textures/lines/default-1x7.png"); textureAtlas.RegisterTexture("lines/test-pattern", ":/res/textures/lines/test-pattern.png"); - textureAtlas.BuildAtlas(1024, 1024); + textureAtlas.BuildAtlas(2048, 2048); } } // namespace ResourceManager diff --git a/scwx-qt/source/scwx/qt/util/texture_atlas.cpp b/scwx-qt/source/scwx/qt/util/texture_atlas.cpp index a23a119c..0b272a3f 100644 --- a/scwx-qt/source/scwx/qt/util/texture_atlas.cpp +++ b/scwx-qt/source/scwx/qt/util/texture_atlas.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -404,18 +405,31 @@ TextureAtlas::Impl::LoadImage(const std::string& imagePath) } // Create a view pointing to the STB image data - auto imageView = boost::gil::interleaved_view( + auto stbView = boost::gil::interleaved_view( width, height, reinterpret_cast(pixelData), width * desiredChannels); // Copy the view to the destination image - image = boost::gil::rgba8_image_t(imageView); + image = boost::gil::rgba8_image_t(stbView); + auto& view = boost::gil::view(image); + // If no alpha channel, replace black with transparent if (numChannels == 3) { - // TODO: If no alpha channel, replace black with transparent + std::for_each( + std::execution::par_unseq, + view.begin(), + view.end(), + [](boost::gil::rgba8_pixel_t& pixel) + { + static const boost::gil::rgba8_pixel_t kBlack {0, 0, 0, 255}; + if (pixel == kBlack) + { + pixel[3] = 0; + } + }); } stbi_image_free(pixelData);