/* Copyright © 2010, 2011, 2012 Vladimír Vondruš This file is part of Magnum. Magnum is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 3 only, as published by the Free Software Foundation. Magnum is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License version 3 for more details. */ #include "FlatShader.h" #include #include "Extensions.h" #include "Shader.h" namespace Magnum { namespace Shaders { namespace { template constexpr const char* vertexShaderName(); template<> constexpr const char* vertexShaderName<2>() { return "FlatShader2D.vert"; } template<> constexpr const char* vertexShaderName<3>() { return "FlatShader3D.vert"; } } template FlatShader::FlatShader(): transformationProjectionMatrixUniform(0), colorUniform(1) { Corrade::Utility::Resource rs("MagnumShaders"); #ifndef MAGNUM_TARGET_GLES Version v = Context::current()->supportedVersion({Version::GL320, Version::GL210}); #else Version v = Context::current()->supportedVersion({Version::GLES300, Version::GLES200}); #endif Shader vertexShader(v, Shader::Type::Vertex); vertexShader.addSource(rs.get("compatibility.glsl")); vertexShader.addSource(rs.get(vertexShaderName())); attachShader(vertexShader); Shader fragmentShader(v, Shader::Type::Fragment); fragmentShader.addSource(rs.get("compatibility.glsl")); fragmentShader.addSource(rs.get("FlatShader.frag")); attachShader(fragmentShader); #ifndef MAGNUM_TARGET_GLES if(!Context::current()->isExtensionSupported() || Context::current()->version() == Version::GL210) { #else if(!Context::current()->isVersionSupported(Version::GLES300)) { #endif bindAttributeLocation(Position::Location, "position"); } link(); #ifndef MAGNUM_TARGET_GLES if(!Context::current()->isExtensionSupported()) { #else { #endif transformationProjectionMatrixUniform = uniformLocation("transformationProjectionMatrix"); colorUniform = uniformLocation("color"); } } template class FlatShader<2>; template class FlatShader<3>; }}