From b68843bf22c73131e9abe806a5ed4270177b3c38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 27 Jan 2014 15:48:51 +0100 Subject: [PATCH] Shader: ability to use version directive from shader source. --- src/Magnum/Shader.cpp | 6 +++--- src/Magnum/Shader.h | 6 ++++-- src/Magnum/Test/ShaderGLTest.cpp | 7 +++++++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/Magnum/Shader.cpp b/src/Magnum/Shader.cpp index b547f2400..23a00651f 100644 --- a/src/Magnum/Shader.cpp +++ b/src/Magnum/Shader.cpp @@ -558,11 +558,11 @@ Shader::Shader(const Version version, const Type type): _type(type), _id(0) { case Version::GLES300: _sources.push_back("#version 300\n"); return; #endif - case Version::None: - CORRADE_ASSERT(false, "Shader::Shader(): unsupported version" << version, ); + /* The user is responsible for (not) adding #version directive */ + case Version::None: return; } - CORRADE_ASSERT_UNREACHABLE(); + CORRADE_ASSERT(false, "Shader::Shader(): unsupported version" << version, ); } Shader::~Shader() { diff --git a/src/Magnum/Shader.h b/src/Magnum/Shader.h index 1a087adac..902b0f8fc 100644 --- a/src/Magnum/Shader.h +++ b/src/Magnum/Shader.h @@ -436,8 +436,10 @@ class MAGNUM_EXPORT Shader: public AbstractObject { * @param version Target version * @param type %Shader type * - * Creates empty OpenGL shader and adds @c \#version directive at the - * beginning. + * Creates empty OpenGL shader and adds @c \#version directive + * corresponding to @p version parameter at the beginning. If + * @ref Version::None is specified, (not) adding the @c \#version + * directive is left to the user. * @see @fn_gl{CreateShader} */ explicit Shader(Version version, Type type); diff --git a/src/Magnum/Test/ShaderGLTest.cpp b/src/Magnum/Test/ShaderGLTest.cpp index 70ef874a8..dc33d3fc8 100644 --- a/src/Magnum/Test/ShaderGLTest.cpp +++ b/src/Magnum/Test/ShaderGLTest.cpp @@ -39,6 +39,7 @@ class ShaderGLTest: public AbstractOpenGLTester { explicit ShaderGLTest(); void construct(); + void constructNoVersion(); void constructCopy(); void constructMove(); @@ -51,6 +52,7 @@ class ShaderGLTest: public AbstractOpenGLTester { ShaderGLTest::ShaderGLTest() { addTests({&ShaderGLTest::construct, + &ShaderGLTest::constructNoVersion, &ShaderGLTest::constructCopy, &ShaderGLTest::constructMove, @@ -82,6 +84,11 @@ void ShaderGLTest::construct() { MAGNUM_VERIFY_NO_ERROR(); } +void ShaderGLTest::constructNoVersion() { + const Shader shader(Version::None, Shader::Type::Fragment); + CORRADE_VERIFY(shader.sources().empty()); +} + void ShaderGLTest::constructCopy() { CORRADE_VERIFY(!(std::is_constructible{})); /* GCC 4.6 doesn't have std::is_assignable */