MCPcopy Create free account
hub / github.com/KhronosGroup/KTX-Software / transcode

Function transcode

tools/ktx/transcode_utils.h:87–196  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

85
86template <bool TRANSCODE_CMD>
87KTXTexture2 transcode(KTXTexture2&& texture, OptionsTranscodeTarget<TRANSCODE_CMD>& options, Reporter& report) {
88 options.validateTextureTranscode(texture, report);
89
90 auto ret = ktxTexture2_TranscodeBasis(texture, options.transcodeTarget.value(), 0);
91 if (ret != KTX_SUCCESS)
92 report.fatal(rc::INVALID_FILE, "Failed to transcode KTX2 texture: {}", ktxErrorString(ret));
93
94 // Need to perform format conversion and swizzling if needed
95 bool needFormatConversion = false;
96 bool needSwizzle = false;
97 if (options.transcodeSwizzleComponents != 0) {
98 if (options.transcodeSwizzleComponents == 4) {
99 if (options.transcodeSwizzle != "rgba") {
100 needSwizzle = true;
101 }
102 } else {
103 needFormatConversion = true;
104 needSwizzle = true;
105 }
106 }
107
108 KTXTexture2 convertedTexture{nullptr};
109 if (needFormatConversion) {
110 ktxTextureCreateInfo createInfo;
111 std::memset(&createInfo, 0, sizeof(createInfo));
112
113 const bool srgb = (texture->vkFormat == VK_FORMAT_R8G8B8A8_SRGB);
114 switch (options.transcodeSwizzleComponents) {
115 case 1:
116 createInfo.vkFormat = srgb ? VK_FORMAT_R8_SRGB : VK_FORMAT_R8_UNORM;
117 break;
118 case 2:
119 createInfo.vkFormat = srgb ? VK_FORMAT_R8G8_SRGB : VK_FORMAT_R8G8_UNORM;
120 break;
121 case 3:
122 createInfo.vkFormat = srgb ? VK_FORMAT_R8G8B8_SRGB : VK_FORMAT_R8G8B8_UNORM;
123 break;
124 default:
125 assert(false);
126 }
127
128 createInfo.baseWidth = texture->baseWidth;
129 createInfo.baseHeight = texture->baseHeight;
130 createInfo.baseDepth = texture->baseDepth;
131 createInfo.generateMipmaps = texture->generateMipmaps;
132 createInfo.isArray = texture->isArray;
133 createInfo.numDimensions = texture->numDimensions;
134 createInfo.numFaces = texture->numFaces;
135 createInfo.numLayers = texture->numLayers;
136 createInfo.numLevels = texture->numLevels;
137 createInfo.pDfd = nullptr;
138
139 ret = ktxTexture2_Create(&createInfo, KTX_TEXTURE_CREATE_ALLOC_STORAGE, convertedTexture.pHandle());
140 if (KTX_SUCCESS != ret)
141 report.fatal(rc::IO_FAILURE, "Failed to create output texture: {}", ktxErrorString(ret));
142 }
143
144 KTXTexture2& outputTexture = (convertedTexture.handle() != nullptr) ? convertedTexture : texture;

Callers 2

executeTranscodeMethod · 0.70
executeExtractMethod · 0.70

Calls 11

ktxErrorStringFunction · 0.85
assertFunction · 0.85
ktxTexture2_CreateFunction · 0.85
swizzleMethod · 0.80
maxFunction · 0.50
valueMethod · 0.45
fatalMethod · 0.45
pHandleMethod · 0.45
handleMethod · 0.45

Tested by

no test coverage detected