PageRenderTime 50ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/include/lightsky/draw/generic/shaderProgram_impl.h

https://github.com/hamsham/Light-Sky
C++ Header | 227 lines | 97 code | 33 blank | 97 comment | 0 complexity | 85c1e8214fab333ac5e03181117e7daa MD5 | raw file
Possible License(s): BSD-3-Clause
  1. namespace ls {
  2. namespace draw {
  3. /*-------------------------------------
  4. Get the OpenGL ID used by *this.
  5. -------------------------------------*/
  6. inline unsigned shaderProgram::getId() const {
  7. return programId;
  8. }
  9. /*-------------------------------------
  10. Bind this program to the current context
  11. -------------------------------------*/
  12. inline void shaderProgram::bind() const {
  13. glUseProgram(programId);
  14. }
  15. /*-------------------------------------
  16. Unbind this program from the context.
  17. -------------------------------------*/
  18. inline void shaderProgram::unbind() const {
  19. glUseProgram(0);
  20. }
  21. /*-------------------------------------
  22. Bind a vertex attribute to a shader
  23. -------------------------------------*/
  24. inline void shaderProgram::bindAttribute(GLuint index, const GLchar* const name) {
  25. glBindAttribLocation(programId, index, name);
  26. }
  27. /*-------------------------------------
  28. Get the location of a vert6ex attribute
  29. -------------------------------------*/
  30. inline GLint shaderProgram::getAttribute(const GLchar* const name) const {
  31. return glGetAttribLocation(programId, name);
  32. }
  33. /*-------------------------------------
  34. Get the location of a uniform variable.
  35. @return GLint
  36. A positive value to indicate the uniform's location in OpenGL or
  37. -1 for an invalid uniform index.
  38. -------------------------------------*/
  39. inline GLint shaderProgram::getUniformLocation(const GLchar* const name) const {
  40. return glGetUniformLocation(programId, name);
  41. }
  42. /*-------------------------------------
  43. Set a single uniform integer variable
  44. -------------------------------------*/
  45. inline void shaderProgram::setUniformValue(GLint uniformId, int val) {
  46. glUniform1i(uniformId, val);
  47. }
  48. /*-------------------------------------
  49. Set two uniform integer variables
  50. -------------------------------------*/
  51. inline void shaderProgram::setUniformValue(GLint uniformId, int val0, int val1) {
  52. glUniform2i(uniformId, val0, val1);
  53. }
  54. /*-------------------------------------
  55. Set three uniform integer variables
  56. -------------------------------------*/
  57. inline void shaderProgram::setUniformValue(GLint uniformId, int val0, int val1, int val2) {
  58. glUniform3i(uniformId, val0, val1, val2);
  59. }
  60. /*-------------------------------------
  61. Set four uniform integer variables
  62. -------------------------------------*/
  63. inline void shaderProgram::setUniformValue(GLint uniformId, int val0, int val1, int val2, int val3) {
  64. glUniform4i(uniformId, val0, val1, val2, val3);
  65. }
  66. /*-------------------------------------
  67. Set a uniform 2d vector of integers
  68. -------------------------------------*/
  69. inline void shaderProgram::setUniformValue(GLint uniformId, const math::vec2i& val) {
  70. glUniform2iv(uniformId, 1, val.v);
  71. }
  72. /*-------------------------------------
  73. Set a uniform 3d vector of integers
  74. -------------------------------------*/
  75. inline void shaderProgram::setUniformValue(GLint uniformId, const math::vec3i& val) {
  76. glUniform3iv(uniformId, 1, val.v);
  77. }
  78. /*-------------------------------------
  79. Set a uniform 4d vector of integers
  80. -------------------------------------*/
  81. inline void shaderProgram::setUniformValue(GLint uniformId, const math::vec4i& val) {
  82. glUniform4iv(uniformId, 1, val.v);
  83. }
  84. /*-------------------------------------
  85. Set a single uniform unsigned int variable
  86. -------------------------------------*/
  87. inline void shaderProgram::setUniformValue(GLint uniformId, unsigned val) {
  88. glUniform1ui(uniformId, val);
  89. }
  90. /*-------------------------------------
  91. Set two uniform unsigned int variables
  92. -------------------------------------*/
  93. inline void shaderProgram::setUniformValue(GLint uniformId, unsigned val0, unsigned val1) {
  94. glUniform2ui(uniformId, val0, val1);
  95. }
  96. /*-------------------------------------
  97. Set three uniform unsigned int variables
  98. -------------------------------------*/
  99. inline void shaderProgram::setUniformValue(GLint uniformId, unsigned val0, unsigned val1, unsigned val2) {
  100. glUniform3ui(uniformId, val0, val1, val2);
  101. }
  102. /*-------------------------------------
  103. Set four uniform unsigned int variables
  104. -------------------------------------*/
  105. inline void shaderProgram::setUniformValue(GLint uniformId, unsigned val0, unsigned val1, unsigned val2, unsigned val3) {
  106. glUniform4ui(uniformId, val0, val1, val2, val3);
  107. }
  108. /*-------------------------------------
  109. Set a uniform 2d vector of unsigned ints
  110. -------------------------------------*/
  111. inline void shaderProgram::setUniformValue(GLint uniformId, const math::vec2ui& val) {
  112. glUniform2uiv(uniformId, 1, val.v);
  113. }
  114. /*-------------------------------------
  115. Set a uniform 3d vector of unsigned ints
  116. -------------------------------------*/
  117. inline void shaderProgram::setUniformValue(GLint uniformId, const math::vec3ui& val) {
  118. glUniform3uiv(uniformId, 1, val.v);
  119. }
  120. /*-------------------------------------
  121. Set a uniform 4d vector of unsigned ints
  122. -------------------------------------*/
  123. inline void shaderProgram::setUniformValue(GLint uniformId, const math::vec4ui& val) {
  124. glUniform4uiv(uniformId, 1, val.v);
  125. }
  126. /*-------------------------------------
  127. Set a single uniform float variable
  128. -------------------------------------*/
  129. inline void shaderProgram::setUniformValue(GLint uniformId, float val) {
  130. glUniform1f(uniformId, val);
  131. }
  132. /*-------------------------------------
  133. Set two uniform float variables
  134. -------------------------------------*/
  135. inline void shaderProgram::setUniformValue(GLint uniformId, float val0, float val1) {
  136. glUniform2f(uniformId, val0, val1);
  137. }
  138. /*-------------------------------------
  139. Set three uniform float variables
  140. -------------------------------------*/
  141. inline void shaderProgram::setUniformValue(GLint uniformId, float val0, float val1, float val2) {
  142. glUniform3f(uniformId, val0, val1, val2);
  143. }
  144. /*-------------------------------------
  145. Set four uniform float variables
  146. -------------------------------------*/
  147. inline void shaderProgram::setUniformValue(GLint uniformId, float val0, float val1, float val2, float val3) {
  148. glUniform4f(uniformId, val0, val1, val2, val3);
  149. }
  150. /*-------------------------------------
  151. Set a uniform 2d vector of floats
  152. -------------------------------------*/
  153. inline void shaderProgram::setUniformValue(GLint uniformId, const math::vec2& val) {
  154. glUniform2fv(uniformId, 1, val.v);
  155. }
  156. /*-------------------------------------
  157. Set a uniform 3d vector of floats
  158. -------------------------------------*/
  159. inline void shaderProgram::setUniformValue(GLint uniformId, const math::vec3& val) {
  160. glUniform3fv(uniformId, 1, val.v);
  161. }
  162. /*-------------------------------------
  163. Set a uniform 4d vector of floats
  164. -------------------------------------*/
  165. inline void shaderProgram::setUniformValue(GLint uniformId, const math::vec4& val) {
  166. glUniform4fv(uniformId, 1, val.v);
  167. }
  168. /*-------------------------------------
  169. Set a uniform 2d matrix
  170. -------------------------------------*/
  171. inline void shaderProgram::setUniformValue(GLint uniformId, const math::mat2& val, bool transpose) {
  172. glUniformMatrix2fv(uniformId, 1, transpose, &val[0]);
  173. }
  174. /*-------------------------------------
  175. Set a uniform 3d matrix
  176. -------------------------------------*/
  177. inline void shaderProgram::setUniformValue(GLint uniformId, const math::mat3& val, bool transpose) {
  178. glUniformMatrix3fv(uniformId, 1, transpose, &val[0]);
  179. }
  180. /*-------------------------------------
  181. Set a uniform 4d matrix
  182. -------------------------------------*/
  183. inline void shaderProgram::setUniformValue(GLint uniformId, const math::mat4& val, bool transpose) {
  184. glUniformMatrix4fv(uniformId, 1, transpose, &val[0]);
  185. }
  186. /*-------------------------------------
  187. Query the bindings of color numbers to user-defined varying out variables
  188. -------------------------------------*/
  189. inline GLint shaderProgram::getFragDataLocation(const GLchar* const name) const {
  190. return glGetFragDataLocation(programId, name);
  191. }
  192. } // end draw namespace
  193. } // end ls namespace