| 741 | } |
| 742 | |
| 743 | UInt8* Image::GetPixels(unsigned int x, unsigned int y, unsigned int z, UInt8 level) |
| 744 | { |
| 745 | #if NAZARA_UTILITY_SAFE |
| 746 | if (m_sharedImage == &emptyImage) |
| 747 | { |
| 748 | NazaraError("Image must be valid"); |
| 749 | return nullptr; |
| 750 | } |
| 751 | |
| 752 | if (level >= m_sharedImage->levels.size()) |
| 753 | { |
| 754 | NazaraError("Level out of bounds (" + String::Number(level) + " >= " + String::Number(m_sharedImage->levels.size()) + ')'); |
| 755 | return nullptr; |
| 756 | } |
| 757 | #endif |
| 758 | |
| 759 | unsigned int width = GetLevelSize(m_sharedImage->width, level); |
| 760 | #if NAZARA_UTILITY_SAFE |
| 761 | if (x >= width) |
| 762 | { |
| 763 | NazaraError("X value exceeds width (" + String::Number(x) + " >= " + String::Number(width) + ')'); |
| 764 | return nullptr; |
| 765 | } |
| 766 | #endif |
| 767 | |
| 768 | unsigned int height = GetLevelSize(m_sharedImage->height, level); |
| 769 | #if NAZARA_UTILITY_SAFE |
| 770 | if (y >= height) |
| 771 | { |
| 772 | NazaraError("Y value exceeds height (" + String::Number(y) + " >= " + String::Number(height) + ')'); |
| 773 | return nullptr; |
| 774 | } |
| 775 | |
| 776 | unsigned int depth = (m_sharedImage->type == ImageType_Cubemap) ? 6 : GetLevelSize(m_sharedImage->depth, level); |
| 777 | if (z >= depth) |
| 778 | { |
| 779 | NazaraError("Z value exceeds depth (" + String::Number(z) + " >= " + String::Number(depth) + ')'); |
| 780 | return nullptr; |
| 781 | } |
| 782 | |
| 783 | if (level >= m_sharedImage->levels.size()) |
| 784 | { |
| 785 | NazaraError("Level out of bounds (" + String::Number(level) + " >= " + String::Number(m_sharedImage->levels.size()) + ')'); |
| 786 | return nullptr; |
| 787 | } |
| 788 | #endif |
| 789 | |
| 790 | EnsureOwnership(); |
| 791 | |
| 792 | return GetPixelPtr(m_sharedImage->levels[level].get(), PixelFormat::GetBytesPerPixel(m_sharedImage->format), x, y, z, width, height); |
| 793 | } |
| 794 | |
| 795 | Vector3ui Image::GetSize(UInt8 level) const |
| 796 | { |
no test coverage detected