MCPcopy Create free account
hub / github.com/GPUOpen-LibrariesAndSDKs/Cauldron / Load

Method Load

src/common/Misc/WICLoader.cpp:39–134  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

37}
38
39bool WICLoader::Load(const char *pFilename, float cutOff, IMG_INFO *pInfo)
40{
41#ifdef USE_WIC
42 HRESULT hr = S_OK;
43
44 if (m_pWICFactory == NULL)
45 {
46 hr = CoInitialize(NULL);
47 assert(SUCCEEDED(hr));
48 hr = CoCreateInstance(CLSID_WICImagingFactory, nullptr,CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&m_pWICFactory));
49 assert(SUCCEEDED(hr));
50 }
51
52 IWICStream* pWicStream;
53 hr = m_pWICFactory->CreateStream(&pWicStream);
54 assert(SUCCEEDED(hr));
55
56 wchar_t uniName[1024];
57 swprintf(uniName, 1024, L"%S", pFilename);
58 hr = pWicStream->InitializeFromFilename(uniName, GENERIC_READ);
59 //assert(hr == S_OK);
60 if (FAILED(hr))
61 return false;
62
63 IWICBitmapDecoder *pBitmapDecoder;
64 hr = m_pWICFactory->CreateDecoderFromStream(pWicStream, NULL, WICDecodeMetadataCacheOnDemand, &pBitmapDecoder);
65 assert(SUCCEEDED(hr));
66
67 IWICBitmapFrameDecode *pFrameDecode;
68 hr = pBitmapDecoder->GetFrame(0, &pFrameDecode);
69 assert(SUCCEEDED(hr));
70
71 IWICFormatConverter *pIFormatConverter;
72 hr = m_pWICFactory->CreateFormatConverter(&pIFormatConverter);
73 assert(SUCCEEDED(hr));
74
75 hr = pIFormatConverter->Initialize( pFrameDecode, GUID_WICPixelFormat32bppRGBA, WICBitmapDitherTypeNone, NULL, 100.0, WICBitmapPaletteTypeCustom);
76 assert(SUCCEEDED(hr));
77
78 uint32_t width, height;
79 pFrameDecode->GetSize(&width, &height);
80 pFrameDecode->Release();
81
82 int bufferSize = width * height * 4;
83 m_pData = (char *)malloc(bufferSize);
84 hr = pIFormatConverter->CopyPixels( NULL, width * 4, bufferSize, (BYTE*)m_pData);
85 assert(SUCCEEDED(hr));
86#else
87 int32_t width, height, channels;
88 m_pData = (char*)stbi_load(pFilename, &width, &height, &channels, STBI_rgb_alpha);
89#endif
90
91 // no data, no success.
92 if (!m_pData) return false;
93
94 // compute number of mips
95 //
96 uint32_t mipWidth = width;

Callers

nothing calls this directly

Calls 5

stbi_loadFunction · 0.85
InitializeMethod · 0.80
ReleaseMethod · 0.80
GetSizeMethod · 0.45
CopyPixelsMethod · 0.45

Tested by

no test coverage detected