Skip to content

Commit 4f8c7da

Browse files
vtfpp: do not invalidate const guarantees
1 parent 238c070 commit 4f8c7da

2 files changed

Lines changed: 37 additions & 6 deletions

File tree

include/vtfpp/VTF.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,9 @@ class VTF {
407407

408408
[[nodiscard]] bool hasImageData() const;
409409

410-
[[nodiscard]] std::span<std::byte> getImageDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0) const;
410+
[[nodiscard]] std::span<const std::byte> getImageDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0) const;
411+
412+
[[nodiscard]] std::span<std::byte> getImageDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0);
411413

412414
[[nodiscard]] std::vector<std::byte> getImageDataAs(ImageFormat newFormat, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0) const;
413415

@@ -423,7 +425,9 @@ class VTF {
423425

424426
[[nodiscard]] bool hasThumbnailData() const;
425427

426-
[[nodiscard]] std::span<std::byte> getThumbnailDataRaw() const;
428+
[[nodiscard]] std::span<const std::byte> getThumbnailDataRaw() const;
429+
430+
[[nodiscard]] std::span<std::byte> getThumbnailDataRaw();
427431

428432
[[nodiscard]] std::vector<std::byte> getThumbnailDataAs(ImageFormat newFormat) const;
429433

@@ -443,7 +447,9 @@ class VTF {
443447

444448
[[nodiscard]] bool hasFallbackData() const;
445449

446-
[[nodiscard]] std::span<std::byte> getFallbackDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0) const;
450+
[[nodiscard]] std::span<const std::byte> getFallbackDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0) const;
451+
452+
[[nodiscard]] std::span<std::byte> getFallbackDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0);
447453

448454
[[nodiscard]] std::vector<std::byte> getFallbackDataAs(ImageFormat newFormat, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0) const;
449455

src/vtfpp/VTF.cpp

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1927,7 +1927,16 @@ bool VTF::hasImageData() const {
19271927
return this->format != ImageFormat::EMPTY && this->width > 0 && this->height > 0;
19281928
}
19291929

1930-
std::span<std::byte> VTF::getImageDataRaw(uint8_t mip, uint16_t frame, uint8_t face, uint16_t slice) const {
1930+
std::span<const std::byte> VTF::getImageDataRaw(uint8_t mip, uint16_t frame, uint8_t face, uint16_t slice) const {
1931+
if (const auto imageResource = this->getResource(Resource::TYPE_IMAGE_DATA)) {
1932+
if (uint32_t offset, length; ImageFormatDetails::getDataPosition(offset, length, this->format, mip, this->mipCount, frame, this->frameCount, face, this->getFaceCount(), this->width, this->height, slice, this->depth)) {
1933+
return imageResource->data.subspan(offset, length);
1934+
}
1935+
}
1936+
return {};
1937+
}
1938+
1939+
std::span<std::byte> VTF::getImageDataRaw(uint8_t mip, uint16_t frame, uint8_t face, uint16_t slice) {
19311940
if (const auto imageResource = this->getResource(Resource::TYPE_IMAGE_DATA)) {
19321941
if (uint32_t offset, length; ImageFormatDetails::getDataPosition(offset, length, this->format, mip, this->mipCount, frame, this->frameCount, face, this->getFaceCount(), this->width, this->height, slice, this->depth)) {
19331942
return imageResource->data.subspan(offset, length);
@@ -2057,7 +2066,14 @@ bool VTF::hasThumbnailData() const {
20572066
return this->thumbnailFormat != ImageFormat::EMPTY && this->thumbnailWidth > 0 && this->thumbnailHeight > 0;
20582067
}
20592068

2060-
std::span<std::byte> VTF::getThumbnailDataRaw() const {
2069+
std::span<const std::byte> VTF::getThumbnailDataRaw() const {
2070+
if (const auto thumbnailResource = this->getResource(Resource::TYPE_THUMBNAIL_DATA)) {
2071+
return thumbnailResource->data;
2072+
}
2073+
return {};
2074+
}
2075+
2076+
std::span<std::byte> VTF::getThumbnailDataRaw() {
20612077
if (const auto thumbnailResource = this->getResource(Resource::TYPE_THUMBNAIL_DATA)) {
20622078
return thumbnailResource->data;
20632079
}
@@ -2153,7 +2169,16 @@ bool VTF::hasFallbackData() const {
21532169
return this->fallbackWidth > 0 && this->fallbackHeight > 0 && this->fallbackMipCount > 0;
21542170
}
21552171

2156-
std::span<std::byte> VTF::getFallbackDataRaw(uint8_t mip, uint16_t frame, uint8_t face) const {
2172+
std::span<const std::byte> VTF::getFallbackDataRaw(uint8_t mip, uint16_t frame, uint8_t face) const {
2173+
if (const auto fallbackResource = this->getResource(Resource::TYPE_FALLBACK_DATA)) {
2174+
if (uint32_t offset, length; ImageFormatDetails::getDataPosition(offset, length, this->format, mip, this->fallbackMipCount, frame, this->frameCount, face, this->getFaceCount(), this->fallbackWidth, this->fallbackHeight)) {
2175+
return fallbackResource->data.subspan(offset, length);
2176+
}
2177+
}
2178+
return {};
2179+
}
2180+
2181+
std::span<std::byte> VTF::getFallbackDataRaw(uint8_t mip, uint16_t frame, uint8_t face) {
21572182
if (const auto fallbackResource = this->getResource(Resource::TYPE_FALLBACK_DATA)) {
21582183
if (uint32_t offset, length; ImageFormatDetails::getDataPosition(offset, length, this->format, mip, this->fallbackMipCount, frame, this->frameCount, face, this->getFaceCount(), this->fallbackWidth, this->fallbackHeight)) {
21592184
return fallbackResource->data.subspan(offset, length);

0 commit comments

Comments
 (0)