From 2e6e53b552bf7800eee262154d05fe2c1d7623e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 7 Jan 2016 09:16:30 +0100 Subject: [PATCH] Don't use GLSL < 130 in GL tests on OSX. OSX doesn't support anything below what's in GL 3.1 when using core contexts. --- .../Test/AbstractShaderProgramGLTest.cpp | 89 ++++++++++-- .../MyShader.frag | 10 +- .../MyShader.vert | 6 +- src/Magnum/Test/MeshGLTest.cpp | 127 ++++++++++++------ src/Magnum/Test/PrimitiveQueryGLTest.cpp | 22 ++- src/Magnum/Test/SampleQueryGLTest.cpp | 28 +++- src/Magnum/Test/ShaderGLTest.cpp | 8 +- src/Magnum/Test/TransformFeedbackGLTest.cpp | 24 +++- 8 files changed, 249 insertions(+), 65 deletions(-) diff --git a/src/Magnum/Test/AbstractShaderProgramGLTest.cpp b/src/Magnum/Test/AbstractShaderProgramGLTest.cpp index bda6908c2..e3f97fc7f 100644 --- a/src/Magnum/Test/AbstractShaderProgramGLTest.cpp +++ b/src/Magnum/Test/AbstractShaderProgramGLTest.cpp @@ -155,7 +155,13 @@ void AbstractShaderProgramGLTest::create() { Utility::Resource rs("AbstractShaderProgramGLTest"); #ifndef MAGNUM_TARGET_GLES - Shader vert(Version::GL210, Shader::Type::Vertex); + Shader vert( + #ifndef CORRADE_TARGET_APPLE + Version::GL210 + #else + Version::GL310 + #endif + , Shader::Type::Vertex); #else Shader vert(Version::GLES200, Shader::Type::Vertex); #endif @@ -163,7 +169,13 @@ void AbstractShaderProgramGLTest::create() { const bool vertCompiled = vert.compile(); #ifndef MAGNUM_TARGET_GLES - Shader frag(Version::GL210, Shader::Type::Fragment); + Shader frag( + #ifndef CORRADE_TARGET_APPLE + Version::GL210 + #else + Version::GL310 + #endif + , Shader::Type::Fragment); #else Shader frag(Version::GLES200, Shader::Type::Fragment); #endif @@ -203,11 +215,23 @@ void AbstractShaderProgramGLTest::createMultipleOutputs() { #ifndef MAGNUM_TARGET_GLES Utility::Resource rs("AbstractShaderProgramGLTest"); - Shader vert(Version::GL210, Shader::Type::Vertex); + Shader vert( + #ifndef CORRADE_TARGET_APPLE + Version::GL210 + #else + Version::GL310 + #endif + , Shader::Type::Vertex); vert.addSource(rs.get("MyShader.vert")); const bool vertCompiled = vert.compile(); - Shader frag(Version::GL300, Shader::Type::Fragment); + Shader frag( + #ifndef CORRADE_TARGET_APPLE + Version::GL300 + #else + Version::GL310 + #endif + , Shader::Type::Fragment); frag.addSource(rs.get("MyShaderFragmentOutputs.frag")); const bool fragCompiled = frag.compile(); @@ -240,11 +264,23 @@ void AbstractShaderProgramGLTest::createMultipleOutputs() { void AbstractShaderProgramGLTest::createMultipleOutputsIndexed() { Utility::Resource rs("AbstractShaderProgramGLTest"); - Shader vert(Version::GL210, Shader::Type::Vertex); + Shader vert( + #ifndef CORRADE_TARGET_APPLE + Version::GL210 + #else + Version::GL310 + #endif + , Shader::Type::Vertex); vert.addSource(rs.get("MyShader.vert")); const bool vertCompiled = vert.compile(); - Shader frag(Version::GL300, Shader::Type::Fragment); + Shader frag( + #ifndef CORRADE_TARGET_APPLE + Version::GL300 + #else + Version::GL310 + #endif + , Shader::Type::Fragment); frag.addSource(rs.get("MyShaderFragmentOutputs.frag")); const bool fragCompiled = frag.compile(); @@ -273,14 +309,33 @@ void AbstractShaderProgramGLTest::uniformLocationOptimizedOut() { MyPublicShader program; #ifndef MAGNUM_TARGET_GLES - Shader vert(Version::GL210, Shader::Type::Vertex); - Shader frag(Version::GL210, Shader::Type::Fragment); + Shader vert( + #ifndef CORRADE_TARGET_APPLE + Version::GL210 + #else + Version::GL310 + #endif + , Shader::Type::Vertex); + Shader frag( + #ifndef CORRADE_TARGET_APPLE + Version::GL210 + #else + Version::GL310 + #endif + , Shader::Type::Fragment); #else Shader vert(Version::GLES200, Shader::Type::Vertex); Shader frag(Version::GLES200, Shader::Type::Fragment); #endif vert.addSource("void main() { gl_Position = vec4(0.0); }"); - frag.addSource("void main() { gl_FragColor = vec4(1.0); }"); + frag.addSource( + #ifndef CORRADE_TARGET_APPLE + "void main() { gl_FragColor = vec4(1.0); }" + #else + "out vec4 color;\n" + "void main() { color = vec4(1.0); }" + #endif + ); CORRADE_VERIFY(Shader::compile({vert, frag})); program.attachShaders({vert, frag}); @@ -313,8 +368,20 @@ MyShader::MyShader() { Utility::Resource rs("AbstractShaderProgramGLTest"); #ifndef MAGNUM_TARGET_GLES - Shader vert(Version::GL210, Shader::Type::Vertex); - Shader frag(Version::GL210, Shader::Type::Fragment); + Shader vert( + #ifndef CORRADE_TARGET_APPLE + Version::GL210 + #else + Version::GL310 + #endif + , Shader::Type::Vertex); + Shader frag( + #ifndef CORRADE_TARGET_APPLE + Version::GL210 + #else + Version::GL310 + #endif + , Shader::Type::Fragment); #else Shader vert(Version::GLES200, Shader::Type::Vertex); Shader frag(Version::GLES200, Shader::Type::Fragment); diff --git a/src/Magnum/Test/AbstractShaderProgramGLTestFiles/MyShader.frag b/src/Magnum/Test/AbstractShaderProgramGLTestFiles/MyShader.frag index c15b54a91..a0b53ae68 100644 --- a/src/Magnum/Test/AbstractShaderProgramGLTestFiles/MyShader.frag +++ b/src/Magnum/Test/AbstractShaderProgramGLTestFiles/MyShader.frag @@ -2,10 +2,18 @@ #define lowp #endif +#if defined(GL_ES) || __VERSION__ == 120 +#define fragColor gl_FragColor +#endif + uniform lowp float multiplier; uniform lowp vec4 color; uniform lowp vec4 additions[3]; +#if !defined(GL_ES) && __VERSION__ >= 130 +out lowp vec4 fragColor; +#endif + void main() { - gl_FragColor = color*multiplier + additions[0] + additions[1] + additions[2]; + fragColor = color*multiplier + additions[0] + additions[1] + additions[2]; } diff --git a/src/Magnum/Test/AbstractShaderProgramGLTestFiles/MyShader.vert b/src/Magnum/Test/AbstractShaderProgramGLTestFiles/MyShader.vert index 5d8ff9029..d839d0f7e 100644 --- a/src/Magnum/Test/AbstractShaderProgramGLTestFiles/MyShader.vert +++ b/src/Magnum/Test/AbstractShaderProgramGLTestFiles/MyShader.vert @@ -2,7 +2,11 @@ #define mediump #endif -attribute mediump vec4 position; +#if defined(GL_ES) || __VERSION__ == 120 +#define in attribute +#endif + +in mediump vec4 position; uniform mediump mat4 matrix; diff --git a/src/Magnum/Test/MeshGLTest.cpp b/src/Magnum/Test/MeshGLTest.cpp index 1c1513481..e8e74cc89 100644 --- a/src/Magnum/Test/MeshGLTest.cpp +++ b/src/Magnum/Test/MeshGLTest.cpp @@ -384,8 +384,20 @@ FloatShader::FloatShader(const std::string& type, const std::string& conversion) /* We need special version for ES3, because GLSL in ES2 doesn't support rectangle matrices */ #ifndef MAGNUM_TARGET_GLES - Shader vert(Version::GL210, Shader::Type::Vertex); - Shader frag(Version::GL210, Shader::Type::Fragment); + Shader vert( + #ifndef CORRADE_TARGET_APPLE + Version::GL210 + #else + Version::GL310 + #endif + , Shader::Type::Vertex); + Shader frag( + #ifndef CORRADE_TARGET_APPLE + Version::GL210 + #else + Version::GL310 + #endif + , Shader::Type::Fragment); #elif defined(MAGNUM_TARGET_GLES2) Shader vert(Version::GLES200, Shader::Type::Vertex); Shader frag(Version::GLES200, Shader::Type::Fragment); @@ -395,32 +407,32 @@ FloatShader::FloatShader(const std::string& type, const std::string& conversion) #endif vert.addSource( - #if !defined(MAGNUM_TARGET_GLES) || defined(MAGNUM_TARGET_GLES2) "#if !defined(GL_ES) && __VERSION__ == 120\n" "#define mediump\n" "#endif\n" - "attribute mediump " + type + " value;\n" - "varying mediump " + type + " valueInterpolated;\n" - #else + "#if defined(GL_ES) || __VERSION__ == 120\n" + "#define in attribute\n" + "#define out varying\n" + "#endif\n" "in mediump " + type + " value;\n" "out mediump " + type + " valueInterpolated;\n" - #endif "void main() {\n" " valueInterpolated = value;\n" " gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n" "}\n"); - - #if !defined(MAGNUM_TARGET_GLES) || defined(MAGNUM_TARGET_GLES2) - frag.addSource("#if !defined(GL_ES) && __VERSION__ == 120\n" - "#define mediump\n" - "#endif\n" - "varying mediump " + type + " valueInterpolated;\n" - "void main() { gl_FragColor = " + conversion + "; }\n"); - #else - frag.addSource("in mediump " + type + " valueInterpolated;\n" - "out mediump vec4 result;\n" - "void main() { result = " + conversion + "; }\n"); - #endif + frag.addSource( + "#if !defined(GL_ES) && __VERSION__ == 120\n" + "#define mediump\n" + "#endif\n" + "#if defined(GL_ES) || __VERSION__ == 120\n" + "#define in varying\n" + "#define result gl_FragColor\n" + "#endif\n" + "in mediump " + type + " valueInterpolated;\n" + "#if !defined(GL_ES) && __VERSION__ >= 130\n" + "out mediump vec4 result;\n" + "#endif\n" + "void main() { result = " + conversion + "; }\n"); CORRADE_INTERNAL_ASSERT_OUTPUT(Shader::compile({vert, frag})); @@ -434,8 +446,20 @@ FloatShader::FloatShader(const std::string& type, const std::string& conversion) #ifndef MAGNUM_TARGET_GLES2 IntegerShader::IntegerShader(const std::string& type) { #ifndef MAGNUM_TARGET_GLES - Shader vert(Version::GL300, Shader::Type::Vertex); - Shader frag(Version::GL300, Shader::Type::Fragment); + Shader vert( + #ifndef CORRADE_TARGET_APPLE + Version::GL300 + #else + Version::GL310 + #endif + , Shader::Type::Vertex); + Shader frag( + #ifndef CORRADE_TARGET_APPLE + Version::GL300 + #else + Version::GL310 + #endif + , Shader::Type::Fragment); #else Shader vert(Version::GLES300, Shader::Type::Vertex); Shader frag(Version::GLES300, Shader::Type::Fragment); @@ -1144,29 +1168,54 @@ namespace { #ifndef DOXYGEN_GENERATING_OUTPUT MultipleShader::MultipleShader() { #ifndef MAGNUM_TARGET_GLES - Shader vert(Version::GL210, Shader::Type::Vertex); - Shader frag(Version::GL210, Shader::Type::Fragment); + Shader vert( + #ifndef CORRADE_TARGET_APPLE + Version::GL210 + #else + Version::GL310 + #endif + , Shader::Type::Vertex); + Shader frag( + #ifndef CORRADE_TARGET_APPLE + Version::GL210 + #else + Version::GL310 + #endif + , Shader::Type::Fragment); #else Shader vert(Version::GLES200, Shader::Type::Vertex); Shader frag(Version::GLES200, Shader::Type::Fragment); #endif - vert.addSource("#if !defined(GL_ES) && __VERSION__ == 120\n" - "#define mediump\n" - "#endif\n" - "attribute mediump vec4 position;\n" - "attribute mediump vec3 normal;\n" - "attribute mediump vec2 textureCoordinates;\n" - "varying mediump vec4 valueInterpolated;\n" - "void main() {\n" - " valueInterpolated = position + vec4(normal, 0.0) + vec4(textureCoordinates, 0.0, 0.0);\n" - " gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n" - "}\n"); - frag.addSource("#if !defined(GL_ES) && __VERSION__ == 120\n" - "#define mediump\n" - "#endif\n" - "varying mediump vec4 valueInterpolated;\n" - "void main() { gl_FragColor = valueInterpolated; }\n"); + vert.addSource( + "#if !defined(GL_ES) && __VERSION__ == 120\n" + "#define mediump\n" + "#endif\n" + "#if defined(GL_ES) || __VERSION__ == 120\n" + "#define in attribute\n" + "#define out varying\n" + "#endif\n" + "in mediump vec4 position;\n" + "in mediump vec3 normal;\n" + "in mediump vec2 textureCoordinates;\n" + "out mediump vec4 valueInterpolated;\n" + "void main() {\n" + " valueInterpolated = position + vec4(normal, 0.0) + vec4(textureCoordinates, 0.0, 0.0);\n" + " gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n" + "}\n"); + frag.addSource( + "#if !defined(GL_ES) && __VERSION__ == 120\n" + "#define mediump\n" + "#endif\n" + "#if defined(GL_ES) || __VERSION__ == 120\n" + "#define in varying\n" + "#define result gl_FragColor\n" + "#endif\n" + "in mediump vec4 valueInterpolated;\n" + "#if !defined(GL_ES) && __VERSION__ >= 130\n" + "out mediump vec4 result;\n" + "#endif\n" + "void main() { result = valueInterpolated; }\n"); CORRADE_INTERNAL_ASSERT_OUTPUT(Shader::compile({vert, frag})); diff --git a/src/Magnum/Test/PrimitiveQueryGLTest.cpp b/src/Magnum/Test/PrimitiveQueryGLTest.cpp index b0f704744..c4f09d2da 100644 --- a/src/Magnum/Test/PrimitiveQueryGLTest.cpp +++ b/src/Magnum/Test/PrimitiveQueryGLTest.cpp @@ -99,13 +99,19 @@ void PrimitiveQueryGLTest::primitivesGenerated() { typedef Attribute<0, Vector2> Position; explicit MyShader() { - Shader vert(Version::GL210, Shader::Type::Vertex); + Shader vert( + #ifndef CORRADE_TARGET_APPLE + Version::GL210 + #else + Version::GL310 + #endif + , Shader::Type::Vertex); CORRADE_INTERNAL_ASSERT_OUTPUT(vert.addSource( - "#if !defined(GL_ES) && __VERSION__ == 120\n" - "#define lowp\n" + "#if __VERSION__ >= 130\n" + "#define attribute in\n" "#endif\n" - "attribute lowp vec4 position;\n" + "attribute vec4 position;\n" "void main() {\n" " gl_Position = position;\n" "}\n").compile()); @@ -153,7 +159,13 @@ void PrimitiveQueryGLTest::transformFeedbackPrimitivesWritten() { struct MyShader: AbstractShaderProgram { explicit MyShader() { #ifndef MAGNUM_TARGET_GLES - Shader vert(Version::GL300, Shader::Type::Vertex); + Shader vert( + #ifndef CORRADE_TARGET_APPLE + Version::GL300 + #else + Version::GL310 + #endif + , Shader::Type::Vertex); #else Shader vert(Version::GLES300, Shader::Type::Vertex); Shader frag(Version::GLES300, Shader::Type::Fragment); diff --git a/src/Magnum/Test/SampleQueryGLTest.cpp b/src/Magnum/Test/SampleQueryGLTest.cpp index 096425fd2..786e16bb4 100644 --- a/src/Magnum/Test/SampleQueryGLTest.cpp +++ b/src/Magnum/Test/SampleQueryGLTest.cpp @@ -111,8 +111,20 @@ namespace { #ifndef DOXYGEN_GENERATING_OUTPUT MyShader::MyShader() { #ifndef MAGNUM_TARGET_GLES - Shader vert(Version::GL210, Shader::Type::Vertex); - Shader frag(Version::GL210, Shader::Type::Fragment); + Shader vert( + #ifndef CORRADE_TARGET_APPLE + Version::GL210 + #else + Version::GL310 + #endif + , Shader::Type::Vertex); + Shader frag( + #ifndef CORRADE_TARGET_APPLE + Version::GL210 + #else + Version::GL310 + #endif + , Shader::Type::Fragment); #else Shader vert(Version::GLES200, Shader::Type::Vertex); Shader frag(Version::GLES200, Shader::Type::Fragment); @@ -122,13 +134,21 @@ MyShader::MyShader() { "#if !defined(GL_ES) && __VERSION__ == 120\n" "#define lowp\n" "#endif\n" - "attribute lowp vec4 position;\n" + "#if defined(GL_ES) || __VERSION__ == 120\n" + "#define in attribute\n" + "#endif\n" + "in lowp vec4 position;\n" "void main() {\n" " gl_Position = position;\n" "}\n"); frag.addSource( + "#if !defined(GL_ES) && __VERSION__ >= 130\n" + "out vec4 color;\n" + "#else\n" + "#define color gl_FragColor\n" + "#endif\n" "void main() {\n" - " gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n" + " color = vec4(1.0, 1.0, 1.0, 1.0);\n" "}\n"); CORRADE_INTERNAL_ASSERT_OUTPUT(Shader::compile({vert, frag})); diff --git a/src/Magnum/Test/ShaderGLTest.cpp b/src/Magnum/Test/ShaderGLTest.cpp index ef46df54b..205d9ce86 100644 --- a/src/Magnum/Test/ShaderGLTest.cpp +++ b/src/Magnum/Test/ShaderGLTest.cpp @@ -209,7 +209,13 @@ void ShaderGLTest::addFile() { void ShaderGLTest::compile() { #ifndef MAGNUM_TARGET_GLES - constexpr Version v = Version::GL210; + constexpr Version v = + #ifndef CORRADE_TARGET_APPLE + Version::GL210 + #else + Version::GL310 + #endif + ; #else constexpr Version v = Version::GLES200; #endif diff --git a/src/Magnum/Test/TransformFeedbackGLTest.cpp b/src/Magnum/Test/TransformFeedbackGLTest.cpp index b2024101a..d7012ec2b 100644 --- a/src/Magnum/Test/TransformFeedbackGLTest.cpp +++ b/src/Magnum/Test/TransformFeedbackGLTest.cpp @@ -189,7 +189,13 @@ struct XfbShader: AbstractShaderProgram { XfbShader::XfbShader() { #ifndef MAGNUM_TARGET_GLES - Shader vert(Version::GL300, Shader::Type::Vertex); + Shader vert( + #ifndef CORRADE_TARGET_APPLE + Version::GL300 + #else + Version::GL310 + #endif + , Shader::Type::Vertex); #else Shader vert(Version::GLES300, Shader::Type::Vertex); Shader frag(Version::GLES300, Shader::Type::Fragment); @@ -299,7 +305,13 @@ struct XfbMultiShader: AbstractShaderProgram { XfbMultiShader::XfbMultiShader() { #ifndef MAGNUM_TARGET_GLES - Shader vert(Version::GL300, Shader::Type::Vertex); + Shader vert( + #ifndef CORRADE_TARGET_APPLE + Version::GL300 + #else + Version::GL310 + #endif + , Shader::Type::Vertex); #else Shader vert(Version::GLES300, Shader::Type::Vertex); Shader frag(Version::GLES300, Shader::Type::Fragment); @@ -426,7 +438,13 @@ void TransformFeedbackGLTest::interleaved() { typedef Attribute<0, Vector2> Input; explicit XfbInterleavedShader() { - Shader vert(Version::GL300, Shader::Type::Vertex); + Shader vert( + #ifndef CORRADE_TARGET_APPLE + Version::GL300 + #else + Version::GL310 + #endif + , Shader::Type::Vertex); CORRADE_INTERNAL_ASSERT_OUTPUT(vert.addSource( "in mediump vec2 inputData;\n" "out mediump vec2 output1;\n"