diff --git a/src/Magnum/Test/AbstractShaderProgramGLTest.cpp b/src/Magnum/Test/AbstractShaderProgramGLTest.cpp index 12638accc..f47a75f82 100644 --- a/src/Magnum/Test/AbstractShaderProgramGLTest.cpp +++ b/src/Magnum/Test/AbstractShaderProgramGLTest.cpp @@ -23,6 +23,7 @@ DEALINGS IN THE SOFTWARE. */ +#include #include #include "Magnum/AbstractShaderProgram.h" @@ -50,6 +51,7 @@ struct AbstractShaderProgramGLTest: AbstractOpenGLTester { void createMultipleOutputsIndexed(); #endif + void uniformLocationOptimizedOut(); void uniform(); void uniformVector(); void uniformMatrix(); @@ -69,6 +71,7 @@ AbstractShaderProgramGLTest::AbstractShaderProgramGLTest() { &AbstractShaderProgramGLTest::createMultipleOutputsIndexed, #endif + &AbstractShaderProgramGLTest::uniformLocationOptimizedOut, &AbstractShaderProgramGLTest::uniform, &AbstractShaderProgramGLTest::uniformVector, &AbstractShaderProgramGLTest::uniformMatrix, @@ -266,6 +269,32 @@ void AbstractShaderProgramGLTest::createMultipleOutputsIndexed() { } #endif +void AbstractShaderProgramGLTest::uniformLocationOptimizedOut() { + MyPublicShader program; + + #ifndef MAGNUM_TARGET_GLES + Shader vert(Version::GL210, Shader::Type::Vertex); + Shader frag(Version::GL210, 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); }"); + + CORRADE_VERIFY(Shader::compile({vert, frag})); + program.attachShaders({vert, frag}); + CORRADE_VERIFY(program.link()); + + std::ostringstream out; + Warning::setOutput(&out); + program.uniformLocation("nonexistent"); + program.uniformLocation(std::string{"another"}); + CORRADE_COMPARE(out.str(), + "AbstractShaderProgram: location of uniform 'nonexistent' cannot be retrieved!\n" + "AbstractShaderProgram: location of uniform 'another' cannot be retrieved!\n"); +} + namespace { struct MyShader: AbstractShaderProgram { explicit MyShader();