-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTextureHelperExtend.cpp
31 lines (29 loc) · 1.22 KB
/
TextureHelperExtend.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "TextureHelperExtend.h"
Texture::SharedPtr TextureHelperExtend::createTextureFromFile(const std::vector<std::string>& filenames, bool generateMipLevels, bool loadAsSrgb, Texture::BindFlags bindFlags)
{
Texture::SharedPtr pTex;
std::vector<Bitmap::UniqueConstPtr> pBitmaps;
for (auto &filename : filenames) {
pBitmaps.push_back(std::move(Bitmap::createFromFile(filename, true)));
}
auto texCount = uint32_t(filenames.size());
if (pBitmaps.back())
{
ResourceFormat texFormat = pBitmaps.back()->getFormat();
if (loadAsSrgb)
{
texFormat = linearToSrgbFormat(texFormat);
}
size_t eachSize = pBitmaps.back()->getWidth()*pBitmaps.back()->getHeight() * 4;
std::vector<uint8_t> d(eachSize*texCount);
for (uint32_t i = 0; i < texCount; i++) {
std::memcpy(&d[0 + i * eachSize], pBitmaps[i]->getData(), eachSize);
}
pTex = Texture::create2D(pBitmaps.back()->getWidth(), pBitmaps.back()->getHeight(), texFormat, texCount, generateMipLevels ? Texture::kMaxPossible : 1, &d[0], bindFlags);
}
if (pTex != nullptr)
{
pTex->setSourceFilename(stripDataDirectories(filenames[0]));
}
return pTex;
}