void AbstractQueryGLTest::label() { #ifdef MAGNUM_TARGET_GLES2 if(!Context::current()->isExtensionSupported<Extensions::GL::EXT::occlusion_query_boolean>()) CORRADE_SKIP(Extensions::GL::EXT::occlusion_query_boolean::string() + std::string(" is not supported.")); #endif /* No-Op version is tested in AbstractObjectGLTest */ if(!Context::current()->isExtensionSupported<Extensions::GL::KHR::debug>() && !Context::current()->isExtensionSupported<Extensions::GL::EXT::debug_label>()) 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"); CORRADE_COMPARE(query.label(), "MyQuery"); MAGNUM_VERIFY_NO_ERROR(); }
void SampleQueryGLTest::querySamplesPassed() { #ifdef MAGNUM_TARGET_GLES2 if(!Context::current()->isExtensionSupported<Extensions::GL::EXT::occlusion_query_boolean>()) CORRADE_SKIP(Extensions::GL::EXT::occlusion_query_boolean::string() + std::string(" is not available.")); #endif Renderbuffer renderbuffer; #ifndef MAGNUM_TARGET_GLES2 renderbuffer.setStorage(RenderbufferFormat::RGBA8, Vector2i(32)); #else renderbuffer.setStorage(RenderbufferFormat::RGBA4, Vector2i(32)); #endif Framebuffer framebuffer({{}, Vector2i(32)}); framebuffer.attachRenderbuffer(Framebuffer::ColorAttachment(0), renderbuffer); Buffer buffer; constexpr Vector2 triangle[] = {{-1.0f, 1.0f}, {-1.0f, -3.0f}, {3.0f, 1.0f}}; buffer.setData(triangle, BufferUsage::StaticDraw); Mesh mesh; mesh.setPrimitive(MeshPrimitive::Triangles) .setCount(3) .addVertexBuffer(buffer, 0, AbstractShaderProgram::Attribute<0, Vector2>()); MyShader shader; MAGNUM_VERIFY_NO_ERROR(); SampleQuery q; #ifndef MAGNUM_TARGET_GLES q.begin(SampleQuery::Target::SamplesPassed); #else q.begin(SampleQuery::Target::AnySamplesPassed); #endif framebuffer.bind(FramebufferTarget::ReadDraw); mesh.draw(shader); q.end(); const bool availableBefore = q.resultAvailable(); const UnsignedInt count = q.result<UnsignedInt>(); const bool availableAfter = q.resultAvailable(); MAGNUM_VERIFY_NO_ERROR(); CORRADE_VERIFY(!availableBefore); CORRADE_VERIFY(availableAfter); #ifndef MAGNUM_TARGET_GLES CORRADE_COMPARE(count, 32*32); #else CORRADE_VERIFY(count > 0); #endif }