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

Method Load

src/common/Misc/DDSLoader.cpp:109–187  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

107}
108
109bool DDSLoader::Load(const char *pFilename, float cutOff, IMG_INFO *pInfo)
110{
111 typedef enum RESOURCE_DIMENSION
112 {
113 RESOURCE_DIMENSION_UNKNOWN = 0,
114 RESOURCE_DIMENSION_BUFFER = 1,
115 RESOURCE_DIMENSION_TEXTURE1D = 2,
116 RESOURCE_DIMENSION_TEXTURE2D = 3,
117 RESOURCE_DIMENSION_TEXTURE3D = 4
118 } RESOURCE_DIMENSION;
119
120 typedef struct
121 {
122 DXGI_FORMAT dxgiFormat;
123 RESOURCE_DIMENSION resourceDimension;
124 UINT32 miscFlag;
125 UINT32 arraySize;
126 UINT32 reserved;
127 } DDS_HEADER_DXT10;
128
129 if (GetFileAttributesA(pFilename) == 0xFFFFFFFF)
130 return false;
131
132 m_handle = CreateFileA(pFilename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
133 if (m_handle == INVALID_HANDLE_VALUE)
134 {
135 return false;
136 }
137
138 LARGE_INTEGER largeFileSize;
139 GetFileSizeEx(m_handle, &largeFileSize);
140 assert(0 == largeFileSize.HighPart);
141 UINT32 fileSize = largeFileSize.LowPart;
142 UINT32 rawTextureSize = fileSize;
143
144 // read the header
145 char headerData[4 + sizeof(DDS_HEADER) + sizeof(DDS_HEADER_DXT10)];
146 DWORD dwBytesRead = 0;
147 if (ReadFile(m_handle, headerData, 4 + sizeof(DDS_HEADER) + sizeof(DDS_HEADER_DXT10), &dwBytesRead, NULL))
148 {
149 char *pByteData = headerData;
150 UINT32 dwMagic = *reinterpret_cast<UINT32 *>(pByteData);
151 if (dwMagic != ' SDD') // "DDS "
152 {
153 return false;
154 }
155
156 pByteData += 4;
157 rawTextureSize -= 4;
158
159 DDS_HEADER *header = reinterpret_cast<DDS_HEADER *>(pByteData);
160 pByteData += sizeof(DDS_HEADER);
161 rawTextureSize -= sizeof(DDS_HEADER);
162
163 pInfo->width = header->dwWidth;
164 pInfo->height = header->dwHeight;
165 pInfo->depth = header->dwDepth ? header->dwDepth : 1;
166 pInfo->mipMapCount = header->dwMipMapCount ? header->dwMipMapCount : 1;

Callers 2

InitFromFileMethod · 0.45
InitFromFileMethod · 0.45

Calls 3

ReadFileFunction · 0.85
GetDxgiFormatFunction · 0.85
BitsPerPixelFunction · 0.85

Tested by

no test coverage detected