1 /* 2 * Mesa 3-D graphics library 3 * Version: 7.1 4 * 5 * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a 8 * copy of this software and associated documentation files (the "Software"), 9 * to deal in the Software without restriction, including without limitation 10 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11 * and/or sell copies of the Software, and to permit persons to whom the 12 * Software is furnished to do so, subject to the following conditions: 13 * 14 * The above copyright notice and this permission notice shall be included 15 * in all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 21 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 */ 24 25 /** 26 * \file prog_uniform.c 27 * Shader uniform functions. 28 * \author Brian Paul 29 */ 30 31 #ifndef PROG_UNIFORM_H 32 #define PROG_UNIFORM_H 33 34 #include "main/glheader.h" 35 36 37 /** 38 * Shader program uniform variable. 39 * The glGetUniformLocation() and glUniform() commands will use this 40 * information. 41 * Note that a uniform such as "binormal" might be used in both the 42 * vertex shader and the fragment shader. When glUniform() is called to 43 * set the uniform's value, it must be updated in both the vertex and 44 * fragment shaders. The uniform may be in different locations in the 45 * two shaders so we keep track of that here. 46 */ 47 struct gl_uniform 48 { 49 const char *Name; /**< Null-terminated string */ 50 //GLint VertPos; 51 //GLint FragPos; 52 //GLint GeomPos; 53 GLint Pos; 54 GLboolean Initialized; /**< For debug. Has this uniform been set? */ 55 const struct glsl_type *Type; 56 }; 57 58 59 /** 60 * List of gl_uniforms 61 */ 62 struct gl_uniform_list 63 { 64 GLuint Size; /**< allocated size of Uniforms array */ 65 GLuint NumUniforms; /**< number of uniforms in the array */ 66 GLuint Slots; /**< number of float[4] slots non-sampler uniforms occupy */ 67 GLuint SamplerSlots; /**< number of float[4] slots samplers occupy */ 68 struct gl_uniform *Uniforms; /**< Array [Size] */ 69 }; 70 71 72 extern struct gl_uniform_list * 73 _mesa_new_uniform_list(void); 74 75 extern void 76 _mesa_free_uniform_list(struct gl_uniform_list *list); 77 78 extern struct gl_uniform * 79 _mesa_append_uniform(struct gl_uniform_list *list, 80 const char *name, GLenum target, GLuint progPos); 81 82 extern GLint 83 _mesa_lookup_uniform(const struct gl_uniform_list *list, const char *name); 84 85 extern GLint 86 _mesa_longest_uniform_name(const struct gl_uniform_list *list); 87 88 extern void 89 _mesa_print_uniforms(const struct gl_uniform_list *list); 90 91 92 #endif /* PROG_UNIFORM_H */ 93