| 578 | } |
| 579 | |
| 580 | ref<Texture> ImageIO::loadTextureFromDDS(ref<Device> pDevice, const std::filesystem::path& path, bool loadAsSrgb) |
| 581 | { |
| 582 | ImportData data; |
| 583 | try |
| 584 | { |
| 585 | loadDDS(path, loadAsSrgb, data); |
| 586 | } |
| 587 | catch (const RuntimeError& e) |
| 588 | { |
| 589 | logWarning("Failed to load DDS image from '{}': {}", path, e.what()); |
| 590 | return nullptr; |
| 591 | } |
| 592 | |
| 593 | ref<Texture> pTex; |
| 594 | // TODO: Automatic mip generation |
| 595 | switch (data.type) |
| 596 | { |
| 597 | case Resource::Type::Texture1D: |
| 598 | pTex = pDevice->createTexture1D(data.width, data.format, data.arraySize, data.mipLevels, data.imageData.data()); |
| 599 | break; |
| 600 | case Resource::Type::Texture2D: |
| 601 | pTex = pDevice->createTexture2D(data.width, data.height, data.format, data.arraySize, data.mipLevels, data.imageData.data()); |
| 602 | break; |
| 603 | case Resource::Type::TextureCube: |
| 604 | pTex = pDevice->createTextureCube(data.width, data.height, data.format, data.arraySize / 6, data.mipLevels, data.imageData.data()); |
| 605 | break; |
| 606 | case Resource::Type::Texture3D: |
| 607 | pTex = pDevice->createTexture3D(data.width, data.height, data.depth, data.format, data.mipLevels, data.imageData.data()); |
| 608 | break; |
| 609 | default: |
| 610 | logWarning("Failed to load DDS image from '{}': Unrecognized texture type.", path); |
| 611 | return nullptr; |
| 612 | } |
| 613 | |
| 614 | if (pTex != nullptr) |
| 615 | { |
| 616 | pTex->setSourcePath(path); |
| 617 | } |
| 618 | |
| 619 | return pTex; |
| 620 | } |
| 621 | |
| 622 | void ImageIO::saveToDDS(const std::filesystem::path& path, const Bitmap& bitmap, CompressionMode mode, bool generateMips) |
| 623 | { |
nothing calls this directly
no test coverage detected