* @memberof ktxTexture * @~English * @brief Create a ktx1 or ktx2 texture according to the stream * data. * * See @ref ktxTexture1::ktxTexture1_CreateFromStream * "ktxTexture1_CreateFromStream" or * @ref ktxTexture2::ktxTexture2_CreateFromStream * "ktxTexture2_CreateFromStream" for details. */
| 315 | * "ktxTexture2_CreateFromStream" for details. |
| 316 | */ |
| 317 | KTX_error_code |
| 318 | ktxTexture_CreateFromStream(ktxStream* pStream, |
| 319 | ktxTextureCreateFlags createFlags, |
| 320 | ktxTexture** newTex) |
| 321 | { |
| 322 | ktxHeaderUnion_ header; |
| 323 | ktxFileType_ fileType; |
| 324 | KTX_error_code result; |
| 325 | ktxTexture* tex; |
| 326 | |
| 327 | result = ktxDetermineFileType_(pStream, &fileType, &header); |
| 328 | if (result != KTX_SUCCESS) |
| 329 | return result; |
| 330 | |
| 331 | if (fileType == KTX1) { |
| 332 | ktxTexture1* tex1 = (ktxTexture1*)malloc(sizeof(ktxTexture1)); |
| 333 | if (tex1 == NULL) |
| 334 | return KTX_OUT_OF_MEMORY; |
| 335 | memset(tex1, 0, sizeof(ktxTexture1)); |
| 336 | result = ktxTexture1_constructFromStreamAndHeader(tex1, pStream, |
| 337 | &header.ktx, |
| 338 | createFlags); |
| 339 | tex = ktxTexture(tex1); |
| 340 | } else { |
| 341 | ktxTexture2* tex2 = (ktxTexture2*)malloc(sizeof(ktxTexture2)); |
| 342 | if (tex2 == NULL) |
| 343 | return KTX_OUT_OF_MEMORY; |
| 344 | memset(tex2, 0, sizeof(ktxTexture2)); |
| 345 | result = ktxTexture2_constructFromStreamAndHeader(tex2, pStream, |
| 346 | &header.ktx2, |
| 347 | createFlags); |
| 348 | tex = ktxTexture(tex2); |
| 349 | } |
| 350 | |
| 351 | if (result == KTX_SUCCESS) |
| 352 | *newTex = (ktxTexture*)tex; |
| 353 | else { |
| 354 | free(tex); |
| 355 | *newTex = NULL; |
| 356 | } |
| 357 | return result; |
| 358 | } |
| 359 | |
| 360 | /** |
| 361 | * @memberof ktxTexture |