void MultisampleTextureGLTest::bind2DArray() { #ifndef MAGNUM_TARGET_GLES if(!Context::current().isExtensionSupported<Extensions::GL::ARB::texture_multisample>()) CORRADE_SKIP(Extensions::GL::ARB::texture_multisample::string() + std::string(" is not supported.")); #else if(!Context::current().isExtensionSupported<Extensions::GL::OES::texture_storage_multisample_2d_array>()) CORRADE_SKIP(Extensions::GL::OES::texture_storage_multisample_2d_array::string() + std::string(" is not supported.")); #endif MultisampleTexture2DArray texture; texture.bind(15); MAGNUM_VERIFY_NO_ERROR(); AbstractTexture::unbind(15); MAGNUM_VERIFY_NO_ERROR(); AbstractTexture::bind(7, {&texture, nullptr, &texture}); MAGNUM_VERIFY_NO_ERROR(); AbstractTexture::unbind(7, 3); MAGNUM_VERIFY_NO_ERROR(); }
void CubeMapTextureGLTest::subImageBuffer() { constexpr UnsignedByte zero[4*4*4] = {}; constexpr UnsignedByte subData[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; CubeMapTexture texture; texture.setImage(CubeMapTexture::Coordinate::PositiveX, 0, TextureFormat::RGBA8, ImageReference2D(ColorFormat::RGBA, ColorType::UnsignedByte, Vector2i(4), zero)); texture.setSubImage(CubeMapTexture::Coordinate::PositiveX, 0, Vector2i(1), BufferImage2D(ColorFormat::RGBA, ColorType::UnsignedByte, Vector2i(2), subData, BufferUsage::StaticDraw)); MAGNUM_VERIFY_NO_ERROR(); /** @todo How to test this on ES? */ #ifndef MAGNUM_TARGET_GLES BufferImage2D image(ColorFormat::RGBA, ColorType::UnsignedByte); texture.image(CubeMapTexture::Coordinate::PositiveX, 0, image, BufferUsage::StaticRead); MAGNUM_VERIFY_NO_ERROR(); CORRADE_COMPARE(image.size(), Vector2i(4)); const auto imageData = image.buffer().data<UnsignedByte>(); CORRADE_COMPARE_AS(std::vector<UnsignedByte>(imageData.begin(), imageData.end()), (std::vector<UnsignedByte>{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }), TestSuite::Compare::Container); #endif }
void BufferGLTest::map() { #ifdef MAGNUM_TARGET_GLES if(!Context::current()->isExtensionSupported<Extensions::GL::OES::mapbuffer>()) CORRADE_SKIP(Extensions::GL::OES::mapbuffer::string() + std::string(" is not supported")); #endif Buffer buffer; constexpr char data[] = {2, 7, 5, 13, 25}; buffer.setData(data, BufferUsage::StaticDraw); #ifndef MAGNUM_TARGET_GLES char* contents = buffer.map<char>(Buffer::MapAccess::ReadWrite); #else char* contents = buffer.map<char>(Buffer::MapAccess::WriteOnly); #endif MAGNUM_VERIFY_NO_ERROR(); CORRADE_VERIFY(contents); #ifndef MAGNUM_TARGET_GLES2 CORRADE_COMPARE(contents[2], 5); #endif contents[3] = 107; CORRADE_VERIFY(buffer.unmap()); MAGNUM_VERIFY_NO_ERROR(); /** @todo How to verify the contents in ES? */ #ifndef MAGNUM_TARGET_GLES Containers::Array<char> changedContents = buffer.data<char>(); CORRADE_COMPARE(changedContents.size(), 5); CORRADE_COMPARE(changedContents[3], 107); #endif }
void FramebufferGLTest::constructMove() { #ifndef MAGNUM_TARGET_GLES if(!Context::current()->isExtensionSupported<Extensions::GL::ARB::framebuffer_object>()) CORRADE_SKIP(Extensions::GL::ARB::framebuffer_object::string() + std::string(" is not available.")); #endif Framebuffer a({{32, 16}, {128, 256}}); const Int id = a.id(); MAGNUM_VERIFY_NO_ERROR(); CORRADE_VERIFY(id > 0); Framebuffer b(std::move(a)); CORRADE_COMPARE(a.id(), 0); CORRADE_COMPARE(b.id(), id); CORRADE_COMPARE(b.viewport(), Range2Di({32, 16}, {128, 256})); Framebuffer c({{128, 256}, {32, 16}}); const Int cId = c.id(); c = std::move(b); MAGNUM_VERIFY_NO_ERROR(); CORRADE_VERIFY(cId > 0); CORRADE_COMPARE(b.id(), cId); CORRADE_COMPARE(c.id(), id); CORRADE_COMPARE(c.viewport(), Range2Di({32, 16}, {128, 256})); }
void BufferTextureGLTest::bind() { if(!Context::current()->isExtensionSupported<Extensions::GL::ARB::texture_buffer_object>()) CORRADE_SKIP(Extensions::GL::ARB::texture_buffer_object::string() + std::string(" is not supported.")); BufferTexture texture; if(Context::current()->isExtensionSupported<Extensions::GL::ARB::multi_bind>()) { CORRADE_EXPECT_FAIL("With ARB_multi_bind the texture must be associated with given target at least once before binding it"); Buffer buffer; constexpr UnsignedByte data[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; buffer.setData(data, BufferUsage::StaticDraw); texture.setBuffer(BufferTextureFormat::R8UI, buffer); CORRADE_VERIFY(false); } texture.bind(15); MAGNUM_VERIFY_NO_ERROR(); AbstractTexture::unbind(15); MAGNUM_VERIFY_NO_ERROR(); AbstractTexture::bind(7, {&texture, nullptr, &texture}); MAGNUM_VERIFY_NO_ERROR(); }
void MultisampleTextureGLTest::bindImage2D() { #ifndef MAGNUM_TARGET_GLES if(!Context::current().isExtensionSupported<Extensions::GL::ARB::texture_multisample>()) CORRADE_SKIP(Extensions::GL::ARB::texture_multisample::string() + std::string(" is not supported.")); if(!Context::current().isExtensionSupported<Extensions::GL::ARB::shader_image_load_store>()) CORRADE_SKIP(Extensions::GL::ARB::shader_image_load_store::string() + std::string(" is not supported.")); #else if(!Context::current().isExtensionSupported<Extensions::GL::OES::texture_storage_multisample_2d_array>()) CORRADE_SKIP(Extensions::GL::OES::texture_storage_multisample_2d_array::string() + std::string(" is not supported.")); if(!Context::current().isVersionSupported(Version::GLES310)) CORRADE_SKIP("OpenGL ES 3.1 is not supported."); #endif MultisampleTexture2D texture; texture.setStorage(4, TextureFormat::RGBA8, Vector2i{32}) .bindImage(2, ImageAccess::ReadWrite, ImageFormat::RGBA8); MAGNUM_VERIFY_NO_ERROR(); AbstractTexture::unbindImage(2); MAGNUM_VERIFY_NO_ERROR(); #ifndef MAGNUM_TARGET_GLES AbstractTexture::bindImages(1, {&texture, nullptr, &texture}); MAGNUM_VERIFY_NO_ERROR(); AbstractTexture::unbindImages(1, 3); MAGNUM_VERIFY_NO_ERROR(); #endif }
void TextureGLTest::subImageBuffer() { if(!Context::current()->isExtensionSupported<Extensions::GL::ARB::texture_rectangle>()) CORRADE_SKIP(Extensions::GL::ARB::texture_rectangle::string() + std::string(" is not supported.")); constexpr UnsignedByte zero[4*4*4] = {}; constexpr UnsignedByte subData[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; RectangleTexture texture; texture.setImage(TextureFormat::RGBA8, ImageReference2D(ColorFormat::RGBA, ColorType::UnsignedByte, Vector2i(4), zero)); texture.setSubImage(Vector2i(1), BufferImage2D(ColorFormat::RGBA, ColorType::UnsignedByte, Vector2i(2), subData, BufferUsage::StaticDraw)); MAGNUM_VERIFY_NO_ERROR(); BufferImage2D image(ColorFormat::RGBA, ColorType::UnsignedByte); texture.image(image, BufferUsage::StaticRead); const auto imageData = image.buffer().data<UnsignedByte>(); MAGNUM_VERIFY_NO_ERROR(); CORRADE_COMPARE(image.size(), Vector2i(4)); CORRADE_COMPARE_AS(std::vector<UnsignedByte>(imageData.begin(), imageData.end()), (std::vector<UnsignedByte>{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }), TestSuite::Compare::Container); }
void FramebufferGLTest::invalidate() { #ifndef MAGNUM_TARGET_GLES if(!Context::current()->isExtensionSupported<Extensions::GL::ARB::framebuffer_object>()) CORRADE_SKIP(Extensions::GL::ARB::framebuffer_object::string() + std::string(" is not available.")); if(!Context::current()->isExtensionSupported<Extensions::GL::ARB::invalidate_subdata>()) CORRADE_SKIP(Extensions::GL::ARB::invalidate_subdata::string() + std::string(" is not available.")); #elif defined(MAGNUM_TARGET_GLES2) if(!Context::current()->isExtensionSupported<Extensions::GL::EXT::discard_framebuffer>()) CORRADE_SKIP(Extensions::GL::EXT::discard_framebuffer::string() + std::string(" is not available.")); #endif Renderbuffer color; #ifndef MAGNUM_TARGET_GLES2 color.setStorage(RenderbufferFormat::RGBA8, Vector2i(128)); #else color.setStorage(RenderbufferFormat::RGBA4, Vector2i(128)); #endif Renderbuffer stencil; stencil.setStorage(RenderbufferFormat::StencilIndex8, Vector2i(128)); Framebuffer framebuffer({{}, Vector2i(128)}); framebuffer.attachRenderbuffer(Framebuffer::ColorAttachment(0), color) .attachRenderbuffer(Framebuffer::BufferAttachment::Stencil, stencil); MAGNUM_VERIFY_NO_ERROR(); framebuffer.invalidate({Framebuffer::InvalidationAttachment::Depth, Framebuffer::ColorAttachment(0)}); MAGNUM_VERIFY_NO_ERROR(); }
void BufferGLTest::mapRange() { #ifndef MAGNUM_TARGET_GLES if(!Context::current()->isExtensionSupported<Extensions::GL::ARB::map_buffer_range>()) CORRADE_SKIP(Extensions::GL::ARB::map_buffer_range::string() + std::string(" is not supported")); #elif defined(MAGNUM_TARGET_GLES2) if(!Context::current()->isExtensionSupported<Extensions::GL::EXT::map_buffer_range>()) CORRADE_SKIP(Extensions::GL::EXT::map_buffer_range::string() + std::string(" is not supported")); #endif constexpr char data[] = {2, 7, 5, 13, 25}; Buffer buffer; buffer.setData(data, BufferUsage::StaticDraw); char* contents = buffer.map<char>(1, 4, Buffer::MapFlag::Read|Buffer::MapFlag::Write); MAGNUM_VERIFY_NO_ERROR(); CORRADE_VERIFY(contents); CORRADE_COMPARE(contents[2], 13); contents[3] = 107; CORRADE_VERIFY(buffer.unmap()); MAGNUM_VERIFY_NO_ERROR(); /** @todo How to verify the contents in ES? */ #ifndef MAGNUM_TARGET_GLES Containers::Array<char> changedContents = buffer.data<char>(); CORRADE_COMPARE(changedContents.size(), 5); CORRADE_COMPARE(changedContents[4], 107); #endif }
void FramebufferGLTest::invalidateSub() { #ifndef MAGNUM_TARGET_GLES if(!Context::current()->isExtensionSupported<Extensions::GL::ARB::framebuffer_object>()) CORRADE_SKIP(Extensions::GL::ARB::framebuffer_object::string() + std::string(" is not available.")); if(!Context::current()->isExtensionSupported<Extensions::GL::ARB::invalidate_subdata>()) CORRADE_SKIP(Extensions::GL::ARB::invalidate_subdata::string() + std::string(" is not available.")); #elif defined(MAGNUM_TARGET_GLES2) if(!Context::current()->isExtensionSupported<Extensions::GL::EXT::discard_framebuffer>()) CORRADE_SKIP(Extensions::GL::EXT::discard_framebuffer::string() + std::string(" is not available.")); #endif Renderbuffer color; #ifndef MAGNUM_TARGET_GLES2 color.setStorage(RenderbufferFormat::RGBA8, Vector2i(128)); #else color.setStorage(RenderbufferFormat::RGBA4, Vector2i(128)); #endif Renderbuffer depth; depth.setStorage(RenderbufferFormat::DepthComponent16, Vector2i(128)); Framebuffer framebuffer({{}, Vector2i(128)}); framebuffer.attachRenderbuffer(Framebuffer::ColorAttachment(0), color) .attachRenderbuffer(Framebuffer::BufferAttachment::Depth, depth); MAGNUM_VERIFY_NO_ERROR(); CORRADE_COMPARE(framebuffer.checkStatus(FramebufferTarget::ReadDraw), Framebuffer::Status::Complete); framebuffer.invalidate({Framebuffer::InvalidationAttachment::Depth, Framebuffer::ColorAttachment(0)}, {{32, 16}, {79, 64}}); MAGNUM_VERIFY_NO_ERROR(); }
void TransformFeedbackGLTest::attachRange() { XfbShader shader; Buffer input; input.setData(inputData, BufferUsage::StaticDraw); Buffer output; output.setData({nullptr, 512 + 2*sizeof(Vector2)}, BufferUsage::StaticRead); Mesh mesh; mesh.setPrimitive(MeshPrimitive::Points) .addVertexBuffer(input, 0, XfbShader::Input{}) .setCount(2); TransformFeedback feedback; feedback.attachBuffer(0, output, 256, 2*sizeof(Vector2)); MAGNUM_VERIFY_NO_ERROR(); Renderer::enable(Renderer::Feature::RasterizerDiscard); feedback.begin(shader, TransformFeedback::PrimitiveMode::Points); mesh.draw(shader); feedback.end(); MAGNUM_VERIFY_NO_ERROR(); Vector2* data = reinterpret_cast<Vector2*>(output.map(256, 2*sizeof(Vector2), Buffer::MapFlag::Read)); CORRADE_COMPARE(data[0], Vector2(1.0f, -1.0f)); CORRADE_COMPARE(data[1], Vector2(0.0f, 0.0f)); output.unmap(); }
void AbstractQueryGLTest::constructMove() { #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 SampleQuery a; const Int id = a.id(); MAGNUM_VERIFY_NO_ERROR(); CORRADE_VERIFY(id > 0); SampleQuery b(std::move(a)); CORRADE_COMPARE(a.id(), 0); CORRADE_COMPARE(b.id(), id); SampleQuery c; const Int cId = c.id(); c = std::move(b); MAGNUM_VERIFY_NO_ERROR(); CORRADE_VERIFY(cId > 0); CORRADE_COMPARE(b.id(), cId); CORRADE_COMPARE(c.id(), id); }
void MultisampleTextureGLTest::bind2D() { #ifndef MAGNUM_TARGET_GLES if(!Context::current()->isExtensionSupported<Extensions::GL::ARB::texture_multisample>()) CORRADE_SKIP(Extensions::GL::ARB::texture_multisample::string() + std::string(" is not supported.")); #else if(!Context::current()->isVersionSupported(Version::GLES310)) CORRADE_SKIP("OpenGL ES 3.1 is not supported."); #endif MultisampleTexture2D texture; texture.bind(15); MAGNUM_VERIFY_NO_ERROR(); AbstractTexture::unbind(15); MAGNUM_VERIFY_NO_ERROR(); AbstractTexture::bind(7, {&texture, nullptr, &texture}); MAGNUM_VERIFY_NO_ERROR(); AbstractTexture::unbind(7, 3); MAGNUM_VERIFY_NO_ERROR(); }
void SampleQueryGLTest::conditionalRender() { if(!Context::current()->isExtensionSupported<Extensions::GL::NV::conditional_render>()) CORRADE_SKIP(Extensions::GL::NV::conditional_render::string() + std::string(" is not available.")); Renderbuffer renderbuffer; renderbuffer.setStorage(RenderbufferFormat::RGBA8, Vector2i(32)); 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, Attribute<0, Vector2>{}); MyShader shader; framebuffer.bind(); MAGNUM_VERIFY_NO_ERROR(); SampleQuery qYes{SampleQuery::Target::SamplesPassed}, qNo{SampleQuery::Target::SamplesPassed}, q{SampleQuery::Target::SamplesPassed}; /* This should generate some samples */ qYes.begin(); mesh.draw(shader); qYes.end(); /* Thus this should be rendered */ qYes.beginConditionalRender(SampleQuery::ConditionalRenderMode::Wait); q.begin(); mesh.draw(shader); q.end(); qYes.endConditionalRender(); MAGNUM_VERIFY_NO_ERROR(); CORRADE_VERIFY(qYes.result<bool>()); CORRADE_VERIFY(q.result<bool>()); /* This shouldn't generate any samples */ qNo.begin(); qNo.end(); /* Thus this should not be rendered */ qNo.beginConditionalRender(SampleQuery::ConditionalRenderMode::Wait); q.begin(); mesh.draw(shader); q.end(); qNo.endConditionalRender(); MAGNUM_VERIFY_NO_ERROR(); CORRADE_VERIFY(!qNo.result<bool>()); CORRADE_VERIFY(!q.result<bool>()); }
void FramebufferGLTest::attachTexture2D() { #ifndef MAGNUM_TARGET_GLES if(!Context::current()->isExtensionSupported<Extensions::GL::ARB::framebuffer_object>()) CORRADE_SKIP(Extensions::GL::ARB::framebuffer_object::string() + std::string(" is not available.")); #endif MAGNUM_VERIFY_NO_ERROR(); Framebuffer framebuffer({{}, Vector2i(128)}); MAGNUM_VERIFY_NO_ERROR(); Texture2D color; #ifndef MAGNUM_TARGET_GLES2 color.setStorage(1, TextureFormat::RGBA8, Vector2i(128)); #else color.setStorage(1, rgbaFormatES2, Vector2i(128)); #endif MAGNUM_VERIFY_NO_ERROR(); framebuffer.attachTexture(Framebuffer::ColorAttachment(0), color, 0); MAGNUM_VERIFY_NO_ERROR(); #ifdef MAGNUM_TARGET_GLES2 if(Context::current()->isExtensionSupported<Extensions::GL::OES::packed_depth_stencil>()) #endif { #ifdef MAGNUM_TARGET_GLES2 Debug() << "Using" << Extensions::GL::OES::packed_depth_stencil::string(); #endif /** @todo Is there any better way to select proper sized/unsized format on ES2? */ Texture2D depthStencil; #ifndef MAGNUM_TARGET_GLES2 depthStencil.setStorage(1, TextureFormat::Depth24Stencil8, Vector2i(128)); framebuffer.attachTexture(Framebuffer::BufferAttachment::DepthStencil, depthStencil, 0); #else depthStencil.setStorage(1, depthStencilFormatES2, Vector2i(128)); framebuffer.attachTexture(Framebuffer::BufferAttachment::Depth, depthStencil, 0) .attachTexture(Framebuffer::BufferAttachment::Stencil, depthStencil, 0); #endif } #ifdef MAGNUM_TARGET_GLES2 else if(Context::current()->isExtensionSupported<Extensions::GL::OES::depth_texture>()) { Debug() << "Using" << Extensions::GL::OES::depth_texture::string(); Texture2D depth; depth.setStorage(1, TextureFormat::DepthComponent16, Vector2i(128)); framebuffer.attachTexture(Framebuffer::BufferAttachment::Depth, depth, 0); } #endif MAGNUM_VERIFY_NO_ERROR(); CORRADE_COMPARE(framebuffer.checkStatus(FramebufferTarget::ReadDraw), Framebuffer::Status::Complete); }
void BufferGLTest::construct() { Buffer buffer; MAGNUM_VERIFY_NO_ERROR(); CORRADE_COMPARE(buffer.targetHint(), Buffer::Target::Array); CORRADE_COMPARE(buffer.size(), 0); MAGNUM_VERIFY_NO_ERROR(); }
void BufferGLTest::constructNoCreate() { { Buffer buffer{NoCreate}; MAGNUM_VERIFY_NO_ERROR(); CORRADE_COMPARE(buffer.id(), 0); } MAGNUM_VERIFY_NO_ERROR(); }
void AbstractShaderProgramGLTest::construct() { { const MyShader shader; MAGNUM_VERIFY_NO_ERROR(); CORRADE_VERIFY(shader.id() > 0); } MAGNUM_VERIFY_NO_ERROR(); }
void TransformFeedbackGLTest::construct() { { TransformFeedback feedback; MAGNUM_VERIFY_NO_ERROR(); CORRADE_VERIFY(feedback.id() > 0); } MAGNUM_VERIFY_NO_ERROR(); }
void MultisampleTextureGLTest::construct2DArrayNoCreate() { { MultisampleTexture2DArray texture{NoCreate}; MAGNUM_VERIFY_NO_ERROR(); CORRADE_COMPARE(texture.id(), 0); } MAGNUM_VERIFY_NO_ERROR(); }
void CubeMapTextureGLTest::construct() { { CubeMapTexture texture; MAGNUM_VERIFY_NO_ERROR(); CORRADE_VERIFY(texture.id() > 0); } MAGNUM_VERIFY_NO_ERROR(); }
void AbstractTextureGLTest::construct() { { const Texture2D texture; MAGNUM_VERIFY_NO_ERROR(); CORRADE_VERIFY(texture.id() > 0); } 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 }
void BufferGLTest::invalidate() { Buffer buffer; constexpr char data[] = {2, 7, 5, 13, 25}; buffer.setData(data, BufferUsage::StaticDraw); /* Just test that no errors are emitted */ buffer.invalidateSubData(3, 2); MAGNUM_VERIFY_NO_ERROR(); buffer.invalidateData(); MAGNUM_VERIFY_NO_ERROR(); }
void TextureGLTest::storage() { if(!Context::current()->isExtensionSupported<Extensions::GL::ARB::texture_rectangle>()) CORRADE_SKIP(Extensions::GL::ARB::texture_rectangle::string() + std::string(" is not supported.")); RectangleTexture texture; texture.setStorage(TextureFormat::RGBA8, Vector2i(32)); MAGNUM_VERIFY_NO_ERROR(); CORRADE_COMPARE(texture.imageSize(), Vector2i(32)); MAGNUM_VERIFY_NO_ERROR(); }
void MultisampleTextureGLTest::storage2DArray() { if(!Context::current()->isExtensionSupported<Extensions::GL::ARB::texture_multisample>()) CORRADE_SKIP(Extensions::GL::ARB::texture_multisample::string() + std::string(" is not supported.")); MultisampleTexture2DArray texture; texture.setStorage(4, TextureFormat::RGBA8, {16, 16, 5}); MAGNUM_VERIFY_NO_ERROR(); CORRADE_COMPARE(texture.imageSize(), Vector3i(16, 16, 5)); MAGNUM_VERIFY_NO_ERROR(); }
void MultisampleTextureGLTest::construct2DArray() { if(!Context::current()->isExtensionSupported<Extensions::GL::ARB::texture_multisample>()) CORRADE_SKIP(Extensions::GL::ARB::texture_multisample::string() + std::string(" is not supported.")); { MultisampleTexture2DArray texture; MAGNUM_VERIFY_NO_ERROR(); CORRADE_VERIFY(texture.id() > 0); } MAGNUM_VERIFY_NO_ERROR(); }
void BufferTextureGLTest::construct() { if(!Context::current()->isExtensionSupported<Extensions::GL::ARB::texture_buffer_object>()) CORRADE_SKIP(Extensions::GL::ARB::texture_buffer_object::string() + std::string(" is not supported.")); { BufferTexture texture; MAGNUM_VERIFY_NO_ERROR(); CORRADE_VERIFY(texture.id() > 0); } MAGNUM_VERIFY_NO_ERROR(); }
void AbstractQueryGLTest::construct() { #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 { const SampleQuery query; MAGNUM_VERIFY_NO_ERROR(); CORRADE_VERIFY(query.id() > 0); } MAGNUM_VERIFY_NO_ERROR(); }
void BufferGLTest::label() { /* 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"); Buffer buffer; CORRADE_COMPARE(buffer.label(), ""); MAGNUM_VERIFY_NO_ERROR(); buffer.setLabel("MyBuffer"); MAGNUM_VERIFY_NO_ERROR(); CORRADE_COMPARE(buffer.label(), "MyBuffer"); }