From ed043957627522efaf60222d6916ef322b3ab04b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sat, 2 Jan 2016 01:48:35 +0100 Subject: [PATCH] Test compressed array/cube textures also w/o problematic pixel storage. To ensure that the implementation works at least in some cases. (It does.) --- src/Magnum/Test/CubeMapTextureArrayGLTest.cpp | 23 ++++++++++ src/Magnum/Test/CubeMapTextureGLTest.cpp | 34 ++++++++++++++ src/Magnum/Test/TextureArrayGLTest.cpp | 44 +++++++++++++++++++ 3 files changed, 101 insertions(+) diff --git a/src/Magnum/Test/CubeMapTextureArrayGLTest.cpp b/src/Magnum/Test/CubeMapTextureArrayGLTest.cpp index e6e14e5ea..6dc471bb4 100644 --- a/src/Magnum/Test/CubeMapTextureArrayGLTest.cpp +++ b/src/Magnum/Test/CubeMapTextureArrayGLTest.cpp @@ -701,6 +701,29 @@ void CubeMapTextureArrayGLTest::compressedSubImage() { if(!Context::current()->isExtensionSupported()) CORRADE_SKIP(Extensions::GL::EXT::texture_compression_s3tc::string() + std::string(" is not supported.")); + #ifndef MAGNUM_TARGET_GLES + /* Compressed pixel storage for array textures is underspecified. If the + extension is supported, first test with default values to ensure we are + not that far off, then continue as usual */ + if(Context::current()->isExtensionSupported()) { + CubeMapTextureArray texture; + texture.setCompressedImage(0, CompressedImageView3D{CompressedPixelFormat::RGBAS3tcDxt3, + {12, 12, 6}, CompressedZero}); + texture.setCompressedSubImage(0, {4, 4, 1}, CompressedImageView3D{CompressedPixelFormat::RGBAS3tcDxt3, Vector3i{4}, CompressedSubData}); + + MAGNUM_VERIFY_NO_ERROR(); + + CompressedImage3D image = texture.compressedImage(0, {}); + + MAGNUM_VERIFY_NO_ERROR(); + + CORRADE_COMPARE(image.size(), (Vector3i{12, 12, 6})); + CORRADE_COMPARE_AS( + (Containers::ArrayView{image.data(), image.data().size()}), + Containers::ArrayView{CompressedSubDataComplete}, TestSuite::Compare::Container); + } + #endif + CubeMapTextureArray texture; texture.setCompressedImage(0, CompressedImageView3D{CompressedPixelFormat::RGBAS3tcDxt3, {12, 12, 6}, CompressedZero}); diff --git a/src/Magnum/Test/CubeMapTextureGLTest.cpp b/src/Magnum/Test/CubeMapTextureGLTest.cpp index 3e2d39541..06c22c6cd 100644 --- a/src/Magnum/Test/CubeMapTextureGLTest.cpp +++ b/src/Magnum/Test/CubeMapTextureGLTest.cpp @@ -818,6 +818,40 @@ void CubeMapTextureGLTest::compressedSubImage() { CORRADE_SKIP(Extensions::GL::WEBGL::compressed_texture_s3tc::string() + std::string(" is not supported.")); #endif + #ifndef MAGNUM_TARGET_GLES + /* Compressed pixel storage for array textures is underspecified. If the + extension is supported, first test with default values to ensure we are + not that far off, then continue as usual */ + if(Context::current()->isExtensionSupported()) { + CubeMapTexture texture; + texture.setCompressedImage(CubeMapTexture::Coordinate::PositiveX, 0, + CompressedImageView2D{CompressedPixelFormat::RGBAS3tcDxt3, Vector2i{12}, CompressedZero}); + texture.setCompressedImage(CubeMapTexture::Coordinate::NegativeX, 0, + CompressedImageView2D{CompressedPixelFormat::RGBAS3tcDxt3, Vector2i{12}, CompressedZero}); + texture.setCompressedImage(CubeMapTexture::Coordinate::PositiveY, 0, + CompressedImageView2D{CompressedPixelFormat::RGBAS3tcDxt3, Vector2i{12}, CompressedZero}); + texture.setCompressedImage(CubeMapTexture::Coordinate::NegativeY, 0, + CompressedImageView2D{CompressedPixelFormat::RGBAS3tcDxt3, Vector2i{12}, CompressedZero}); + texture.setCompressedImage(CubeMapTexture::Coordinate::PositiveZ, 0, + CompressedImageView2D{CompressedPixelFormat::RGBAS3tcDxt3, Vector2i{12}, CompressedZero}); + texture.setCompressedImage(CubeMapTexture::Coordinate::NegativeZ, 0, + CompressedImageView2D{CompressedPixelFormat::RGBAS3tcDxt3, Vector2i{12}, CompressedZero}); + texture.setCompressedSubImage(CubeMapTexture::Coordinate::PositiveX, 0, Vector2i{4}, CompressedImageView2D{ + CompressedPixelFormat::RGBAS3tcDxt3, Vector2i{4}, CompressedData}); + + MAGNUM_VERIFY_NO_ERROR(); + + CompressedImage2D image = texture.compressedImage(CubeMapTexture::Coordinate::PositiveX, 0, {}); + + MAGNUM_VERIFY_NO_ERROR(); + + CORRADE_COMPARE(image.size(), Vector2i{12}); + CORRADE_COMPARE_AS( + (Containers::ArrayView{image.data(), image.data().size()}), + Containers::ArrayView{CompressedSubDataComplete}, TestSuite::Compare::Container); + } + #endif + CubeMapTexture texture; texture.setCompressedImage(CubeMapTexture::Coordinate::PositiveX, 0, CompressedImageView2D{CompressedPixelFormat::RGBAS3tcDxt3, Vector2i{12}, CompressedZero}); diff --git a/src/Magnum/Test/TextureArrayGLTest.cpp b/src/Magnum/Test/TextureArrayGLTest.cpp index 61d2976fb..5e32ca8a9 100644 --- a/src/Magnum/Test/TextureArrayGLTest.cpp +++ b/src/Magnum/Test/TextureArrayGLTest.cpp @@ -1090,6 +1090,28 @@ void TextureArrayGLTest::compressedSubImage2D() { CORRADE_SKIP(Extensions::GL::WEBGL::compressed_texture_s3tc::string() + std::string(" is not supported.")); #endif + #ifndef MAGNUM_TARGET_GLES + /* Compressed pixel storage for array textures is underspecified. If the + extension is supported, first test with default values to ensure we are + not that far off, then continue as usual */ + if(Context::current()->isExtensionSupported()) { + Texture2DArray texture; + texture.setCompressedImage(0, CompressedImageView3D{CompressedPixelFormat::RGBAS3tcDxt3, + Vector3i{12, 4, 4}, CompressedZero2D}); + texture.setCompressedSubImage(0, {4, 0, 1}, CompressedImageView3D{CompressedPixelFormat::RGBAS3tcDxt3, {4, 4, 2}, CompressedData2D}); + + MAGNUM_VERIFY_NO_ERROR(); + + CompressedImage3D image = texture.compressedImage(0, {}); + + MAGNUM_VERIFY_NO_ERROR(); + + CORRADE_COMPARE(image.size(), (Vector3i{12, 4, 4})); + CORRADE_COMPARE_AS( + Containers::ArrayView(image.data(), image.data().size()), Containers::ArrayView{CompressedSubData2DComplete}, TestSuite::Compare::Container); + } + #endif + Texture2DArray texture; texture.setCompressedImage(0, CompressedImageView3D{CompressedPixelFormat::RGBAS3tcDxt3, Vector3i{12, 4, 4}, CompressedZero2D}); @@ -1151,6 +1173,28 @@ void TextureArrayGLTest::compressedSubImage2DBuffer() { CORRADE_SKIP(Extensions::GL::WEBGL::compressed_texture_s3tc::string() + std::string(" is not supported.")); #endif + #ifndef MAGNUM_TARGET_GLES + /* Compressed pixel storage for array textures is underspecified. If the + extension is supported, first test with default values to ensure we are + not that far off, then continue as usual */ + if(Context::current()->isExtensionSupported()) { + Texture2DArray texture; + texture.setCompressedImage(0, CompressedImageView3D{CompressedPixelFormat::RGBAS3tcDxt3, + Vector3i{12, 4, 4}, CompressedZero2D}); + texture.setCompressedSubImage(0, {4, 0, 1}, CompressedImageView3D{CompressedPixelFormat::RGBAS3tcDxt3, {4, 4, 2}, CompressedData2D}); + + MAGNUM_VERIFY_NO_ERROR(); + + CompressedBufferImage3D image = texture.compressedImage(0, {}, BufferUsage::StaticRead); + const auto imageData = image.buffer().data(); + + MAGNUM_VERIFY_NO_ERROR(); + + CORRADE_COMPARE(image.size(), (Vector3i{12, 4, 4})); + CORRADE_COMPARE_AS(imageData, Containers::ArrayView{CompressedSubData2DComplete}, TestSuite::Compare::Container); + } + #endif + Texture2DArray texture; texture.setCompressedImage(0, CompressedImageView3D{CompressedPixelFormat::RGBAS3tcDxt3, Vector3i{12, 4, 4}, CompressedZero2D});