# wiesel / src / common / wiesel / gl / shader / shaders.h

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 /** * Copyright (C) 2012 * Christian Fischer * * https://bitbucket.org/baldur/wiesel/ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library 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 for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA */ #ifndef __WIESEL_GL_SHADER_SHADERS_H__ #define __WIESEL_GL_SHADER_SHADERS_H__ #include #include "shader.h" #include "wiesel/gl/vbo/vertexbuffer.h" #include "wiesel/util/shared_object_cache.h" #include namespace wiesel { /** * @brief An utility class to create new shaders * and cache existing shaders. */ class WIESEL_COMMON_EXPORT Shaders { private: Shaders(); ~Shaders(); // singleton public: /// get the singleton instance static WIESEL_COMMON_EXPORT Shaders *instance(); // shader variable names public: WIESEL_COMMON_EXPORT static const char *ATTRIBUTE_VERTEX_POSITION; WIESEL_COMMON_EXPORT static const char *ATTRIBUTE_VERTEX_NORMAL; WIESEL_COMMON_EXPORT static const char *ATTRIBUTE_VERTEX_COLOR; WIESEL_COMMON_EXPORT static const char *ATTRIBUTE_VERTEX_TEXTURE_COORDINATE; WIESEL_COMMON_EXPORT static const char *UNIFORM_PROJECTION_MATRIX; WIESEL_COMMON_EXPORT static const char *UNIFORM_MODELVIEW_MATRIX; WIESEL_COMMON_EXPORT static const char *UNIFORM_TEXTURE; WIESEL_COMMON_EXPORT static const char *VARYING_COLOR; WIESEL_COMMON_EXPORT static const char *VARYING_NORMAL; WIESEL_COMMON_EXPORT static const char *VARYING_TEXTURE_COORDINATE; // public types public: /// alias type for a cache for shader objects typedef SharedObjectCache ShaderCache; /// alias type for a cache for shader program objects typedef SharedObjectCache ShaderProgramCache; // caching public: /// get the cache for vertex shaders inline ShaderCache *getVertexShaderCache() { return &cached_vertex_shaders; } /// get the cache for fragment shaders inline ShaderCache *getFragmentShaderCache() { return &cached_fragment_shaders; } /// get the cache for shader programs inline ShaderProgramCache *getShaderProgramCache() { return &cached_shader_programs; } // vertex buffer shaders public: /// get a suitable shader for a given \ref VertexBuffer. ShaderProgram *getShaderFor(VertexBuffer *vbo); /// get a suitable vertex shader for a given \ref VertexBuffer. Shader *getVertexShaderFor(VertexBuffer *vbo); /// get a suitable fragment shader for a given \ref VertexBuffer. Shader *getFragmentShaderFor(VertexBuffer *vbo); private: ShaderCache cached_vertex_shaders; ShaderCache cached_fragment_shaders; ShaderProgramCache cached_shader_programs; }; } #endif /* __WIESEL_GL_SHADER_SHADERS_H__ */