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()); }