explicit XfbInterleavedShader() {
     #ifndef MAGNUM_TARGET_GLES
     Shader vert(Version::GL300, Shader::Type::Vertex);
     #else
     Shader vert(Version::GLES300, Shader::Type::Vertex);
     Shader frag(Version::GLES300, Shader::Type::Fragment);
     #endif
     CORRADE_INTERNAL_ASSERT_OUTPUT(vert.addSource(
         "in mediump vec2 inputData;\n"
         "out mediump vec2 output1;\n"
         "out mediump float output2;\n"
         "void main() {\n"
         "    output1 = inputData + vec2(1.0, -1.0);\n"
         "    output2 = inputData.x - inputData.y + 5.0;\n"
         "}\n").compile());
     #ifndef MAGNUM_TARGET_GLES
     attachShader(vert);
     #else
     /* ES for some reason needs both vertex and fragment shader */
     CORRADE_INTERNAL_ASSERT_OUTPUT(frag.addSource("void main() {}\n").compile());
     attachShaders({vert, frag});
     #endif
     bindAttributeLocation(Input::Location, "inputData");
     setTransformFeedbackOutputs({"output1", "gl_SkipComponents1", "output2"}, TransformFeedbackBufferMode::InterleavedAttributes);
     CORRADE_INTERNAL_ASSERT_OUTPUT(link());
 }
        explicit MyShader() {
            #ifndef MAGNUM_TARGET_GLES
            Shader vert(Version::GL300, Shader::Type::Vertex);
            #else
            Shader vert(Version::GLES300, Shader::Type::Vertex);
            Shader frag(Version::GLES300, Shader::Type::Fragment);
            #endif

            CORRADE_INTERNAL_ASSERT_OUTPUT(vert.addSource(
                "out mediump vec2 outputData;\n"
                "void main() {\n"
                "    outputData = vec2(1.0, -1.0);\n"
                "}\n").compile());
            #ifndef MAGNUM_TARGET_GLES
            attachShader(vert);
            #else
            /* ES for some reason needs both vertex and fragment shader */
            CORRADE_INTERNAL_ASSERT_OUTPUT(frag.addSource("void main() {}\n").compile());
            attachShaders({vert, frag});
            #endif

            setTransformFeedbackOutputs({"outputData"}, TransformFeedbackBufferMode::SeparateAttributes);
            CORRADE_INTERNAL_ASSERT_OUTPUT(link());
        }