From 2ed432aeb19f311d6b639a7ff4a25f66dfd2da07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Tue, 27 Jan 2015 00:24:42 +0100 Subject: [PATCH] Test output from AbstractShaderProgram::uniformLocation(). Fails. --- .../Test/AbstractShaderProgramGLTest.cpp | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) 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();