From 0dfbc6f8334b5c9e49e98a32f0df023dceb0917b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 24 Jul 2014 21:02:34 +0200 Subject: [PATCH] Use object at least once before testing its label. Otherwise my NVidia emits GL_INVALID_VALUE with message "that is not valid object", which isn't in the specs. I hate this "deferred everything" approach in GL. Is this even legal optimization? --- src/Magnum/Test/AbstractQueryGLTest.cpp | 8 ++++++++ src/Magnum/Test/AbstractTextureGLTest.cpp | 7 +++++++ src/Magnum/Test/BufferGLTest.cpp | 7 +++++++ src/Magnum/Test/FramebufferGLTest.cpp | 12 ++++++++++++ src/Magnum/Test/MeshGLTest.cpp | 8 ++++++++ src/Magnum/Test/RenderbufferGLTest.cpp | 11 +++++++++++ 6 files changed, 53 insertions(+) diff --git a/src/Magnum/Test/AbstractQueryGLTest.cpp b/src/Magnum/Test/AbstractQueryGLTest.cpp index 48b095604..0706be23c 100644 --- a/src/Magnum/Test/AbstractQueryGLTest.cpp +++ b/src/Magnum/Test/AbstractQueryGLTest.cpp @@ -106,7 +106,15 @@ void AbstractQueryGLTest::label() { !Context::current()->isExtensionSupported()) CORRADE_SKIP("Required extension is not available"); + { + /** @todo Is this even legal optimization? */ + CORRADE_EXPECT_FAIL("The object must be used at least once before setting/querying label."); + CORRADE_VERIFY(false); + } SampleQuery query; + query.begin(SampleQuery::Target::AnySamplesPassed); + query.end(); + CORRADE_COMPARE(query.label(), ""); query.setLabel("MyQuery"); diff --git a/src/Magnum/Test/AbstractTextureGLTest.cpp b/src/Magnum/Test/AbstractTextureGLTest.cpp index 57e5af65b..e5e6f39fe 100644 --- a/src/Magnum/Test/AbstractTextureGLTest.cpp +++ b/src/Magnum/Test/AbstractTextureGLTest.cpp @@ -93,7 +93,14 @@ void AbstractTextureGLTest::label() { !Context::current()->isExtensionSupported()) CORRADE_SKIP("Required extension is not available"); + { + /** @todo Is this even legal optimization? */ + CORRADE_EXPECT_FAIL("The object must be used at least once before setting/querying label."); + CORRADE_VERIFY(false); + } Texture2D texture; + texture.setMinificationFilter(Sampler::Filter::Linear); + CORRADE_COMPARE(texture.label(), ""); texture.setLabel("MyTexture"); diff --git a/src/Magnum/Test/BufferGLTest.cpp b/src/Magnum/Test/BufferGLTest.cpp index 58776d116..4358835bd 100644 --- a/src/Magnum/Test/BufferGLTest.cpp +++ b/src/Magnum/Test/BufferGLTest.cpp @@ -118,7 +118,14 @@ void BufferGLTest::label() { !Context::current()->isExtensionSupported()) CORRADE_SKIP("Required extension is not available"); + { + /** @todo Is this even legal optimization? */ + CORRADE_EXPECT_FAIL("The object must be used at least once before setting/querying label."); + CORRADE_VERIFY(false); + } Buffer buffer; + buffer.setData({nullptr, 3}, BufferUsage::StaticDraw); + CORRADE_COMPARE(buffer.label(), ""); buffer.setLabel("MyBuffer"); diff --git a/src/Magnum/Test/FramebufferGLTest.cpp b/src/Magnum/Test/FramebufferGLTest.cpp index 74537139c..2df5a8bd7 100644 --- a/src/Magnum/Test/FramebufferGLTest.cpp +++ b/src/Magnum/Test/FramebufferGLTest.cpp @@ -199,7 +199,19 @@ void FramebufferGLTest::label() { !Context::current()->isExtensionSupported()) CORRADE_SKIP("Required extension is not available"); + { + /** @todo Is this even legal optimization? */ + CORRADE_EXPECT_FAIL("The object must be used at least once before setting/querying label."); + CORRADE_VERIFY(false); + } + Renderbuffer renderbuffer; + #ifndef MAGNUM_TARGET_GLES2 + renderbuffer.setStorage(RenderbufferFormat::RGBA8, {128, 128}); + #else + renderbuffer.setStorage(RenderbufferFormat::RGBA4, {128, 128}); + #endif Framebuffer framebuffer({{}, Vector2i(32)}); + framebuffer.attachRenderbuffer(Framebuffer::BufferAttachment(Framebuffer::BufferAttachment::Depth), renderbuffer); CORRADE_COMPARE(framebuffer.label(), ""); MAGNUM_VERIFY_NO_ERROR(); diff --git a/src/Magnum/Test/MeshGLTest.cpp b/src/Magnum/Test/MeshGLTest.cpp index 48faa22a7..cb768dd4a 100644 --- a/src/Magnum/Test/MeshGLTest.cpp +++ b/src/Magnum/Test/MeshGLTest.cpp @@ -295,7 +295,15 @@ void MeshGLTest::label() { !Context::current()->isExtensionSupported()) CORRADE_SKIP("Required extension is not available"); + { + /** @todo Is this even legal optimization? */ + CORRADE_EXPECT_FAIL("The object must be used at least once before setting/querying label."); + CORRADE_VERIFY(false); + } + Buffer buffer{Buffer::Target::ElementArray}; Mesh mesh; + mesh.setIndexBuffer(buffer, 0, Mesh::IndexType::UnsignedShort); + CORRADE_COMPARE(mesh.label(), ""); mesh.setLabel("MyMesh"); diff --git a/src/Magnum/Test/RenderbufferGLTest.cpp b/src/Magnum/Test/RenderbufferGLTest.cpp index 89b54e0bb..a19a0a23f 100644 --- a/src/Magnum/Test/RenderbufferGLTest.cpp +++ b/src/Magnum/Test/RenderbufferGLTest.cpp @@ -116,7 +116,18 @@ void RenderbufferGLTest::label() { !Context::current()->isExtensionSupported()) CORRADE_SKIP("Required extension is not available"); + { + /** @todo Is this even legal optimization? */ + CORRADE_EXPECT_FAIL("The object must be used at least once before setting/querying label."); + CORRADE_VERIFY(false); + } Renderbuffer renderbuffer; + #ifndef MAGNUM_TARGET_GLES2 + renderbuffer.setStorage(RenderbufferFormat::RGBA8, {128, 128}); + #else + renderbuffer.setStorage(RenderbufferFormat::RGBA4, {128, 128}); + #endif + CORRADE_COMPARE(renderbuffer.label(), ""); renderbuffer.setLabel("MyRenderbuffer");