OGLplus (0.52.0) a C++ wrapper for OpenGL

glsl_string.hpp
Go to the documentation of this file.
1 
12 #pragma once
13 #ifndef OGLPLUS_GLSL_STRING_1207111232_HPP
14 #define OGLPLUS_GLSL_STRING_1207111232_HPP
15 
16 #include <oglplus/config/compiler.hpp>
17 #include <oglplus/string/ref.hpp>
18 #include <oglplus/string/def.hpp>
19 
20 #include <cassert>
21 #include <utility>
22 #include <vector>
23 #include <array>
24 #if !OGLPLUS_NO_INITIALIZER_LISTS
25 #include <initializer_list>
26 #endif
27 
28 namespace oglplus {
29 
32 {
33 private:
34  const GLchar* _str;
35  GLint _len;
36 
37  GLSLString(const GLSLString&);
38 public:
39  GLSLString(const GLchar* str)
40  OGLPLUS_NOEXCEPT(true)
41  : _str(str)
42  , _len(-1)
43  { }
44 
45  template <std::size_t N>
46  GLSLString(const GLchar (&str)[N])
47  OGLPLUS_NOEXCEPT(true)
48  : _str(str)
49  , _len(N)
50  { }
51 
52  GLSLString(const StrCRef& str)
53  : _str(str.begin())
54  , _len(GLint(str.size()))
55  { }
56 
57  GLSLString(const String& str)
58  : _str(str.c_str())
59  , _len(GLint(str.size()))
60  { }
61 
62  GLSLString(const std::vector<GLchar>& v)
63  : _str(v.data())
64  , _len(GLint(v.size()))
65  { }
66 
67  template <std::size_t N>
68  GLSLString(const std::array<GLchar, N>& a)
69  : _str(a.data())
70  , _len(GLint(a.size()))
71  { }
72 
73  GLsizei Count(void) const
74  OGLPLUS_NOEXCEPT(true)
75  {
76  return 1;
77  }
78 
79  const GLchar* const* Parts(void) const
80  OGLPLUS_NOEXCEPT(true)
81  {
82  return &_str;
83  }
84 
85  GLint const * Lengths(void) const
86  OGLPLUS_NOEXCEPT(true)
87  {
88  return (_len<0)?(nullptr):(&_len);
89  }
90 };
91 
92 
95 {
96 private:
97  GLsizei _count;
98  const GLchar* const* _strs;
99  const GLint* _lens;
100 
101  GLSLStrings(const GLSLStrings&);
102 public:
103  GLSLStrings(GLsizei count, const GLchar* const * strs)
104  OGLPLUS_NOEXCEPT(true)
105  : _count(count)
106  , _strs(strs)
107  , _lens(nullptr)
108  { }
109 
110  GLSLStrings(GLsizei count, const GLchar* const* strs, const GLint* lens)
111  OGLPLUS_NOEXCEPT(true)
112  : _count(count)
113  , _strs(strs)
114  , _lens(lens)
115  { }
116 
117  template <std::size_t N>
118  GLSLStrings(const GLchar* (&strs)[N])
119  OGLPLUS_NOEXCEPT(true)
120  : _count(GLsizei(N))
121  , _strs(strs)
122  , _lens(nullptr)
123  { }
124 
125  GLSLStrings(const std::vector<const GLchar*>& v)
126  : _count(GLsizei(v.size()))
127  , _strs(v.data())
128  , _lens(nullptr)
129  { }
130 
131  template <std::size_t N>
132  GLSLStrings(const std::array<const GLchar*, N>& a)
133  : _count(GLsizei(a.size()))
134  , _strs(a.data())
135  , _lens(nullptr)
136  { }
137 
138 #if !OGLPLUS_NO_INITIALIZER_LISTS
139  GLSLStrings(const std::initializer_list<const GLchar*>& l)
140  : _count(GLsizei(l.size()))
141  , _strs(l.begin())
142  , _lens(nullptr)
143  { }
144 #endif
145 
146  GLsizei Count(void) const
147  OGLPLUS_NOEXCEPT(true)
148  {
149  return _count;
150  }
151 
152  const GLchar* const* Parts(void) const
153  OGLPLUS_NOEXCEPT(true)
154  {
155  return _strs;
156  }
157 
158  GLint const * Lengths(void) const
159  OGLPLUS_NOEXCEPT(true)
160  {
161  return _lens;
162  }
163 };
164 
165 } // namespace oglplus
166 
167 #endif // include guard
const_iterator begin(void) const
Returns iterator to the first character.
Definition: ref_tpl.hpp:170
String type definition and related functions.
String reference.
std::size_t size(void) const
Return the size (length) string.
Definition: ref_tpl.hpp:149
Class for passing a set of strings as a Source to a Shader.
Definition: glsl_string.hpp:94
String const reference wrapper template.
Definition: ref_tpl.hpp:72
::std::basic_string< GLchar > String
String class.
Definition: def.hpp:36
Class for passing a single string as a Source to a Shader.
Definition: glsl_string.hpp:31

Copyright © 2010-2014 Matúš Chochlík, University of Žilina, Žilina, Slovakia.
<matus.chochlik -at- fri.uniza.sk>
<chochlik -at -gmail.com>
Documentation generated on Mon Sep 22 2014 by Doxygen (version 1.8.6).