| 
									
										
										
										
											2013-03-10 15:38:23 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * ***** BEGIN GPL LICENSE BLOCK ***** | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is free software; you can redistribute it and/or | 
					
						
							|  |  |  |  * modify it under the terms of the GNU General Public License | 
					
						
							|  |  |  |  * as published by the Free Software Foundation; either version 2 | 
					
						
							|  |  |  |  * of the License, or (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program 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 General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  |  * along with this program; if not, write to the Free Software Foundation, | 
					
						
							|  |  |  |  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * The Original Code is Copyright (C) 2005 Blender Foundation. | 
					
						
							|  |  |  |  * All rights reserved. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * The Original Code is: all of this file. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Contributor(s): Brecht Van Lommel. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * ***** END GPL LICENSE BLOCK ***** | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-05 22:11:31 +01:00
										 |  |  | /** \file GPU_basic_shader.h
 | 
					
						
							| 
									
										
										
										
											2013-03-10 15:38:23 +00:00
										 |  |  |  *  \ingroup gpu | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-05 22:11:31 +01:00
										 |  |  | #ifndef __GPU_BASIC_SHADER_H__
 | 
					
						
							|  |  |  | #define __GPU_BASIC_SHADER_H__
 | 
					
						
							| 
									
										
										
										
											2013-03-10 15:38:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include "BLI_utildefines.h"
 | 
					
						
							| 
									
										
										
										
											2016-04-08 10:58:40 +03:00
										 |  |  | #include "GPU_glew.h"
 | 
					
						
							| 
									
										
										
										
											2013-03-10 15:38:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | extern "C" { | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Fixed Function Shader */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-05 22:11:31 +01:00
										 |  |  | typedef enum GPUBasicShaderOption { | 
					
						
							| 
									
										
										
										
											2016-01-10 07:12:10 +11:00
										 |  |  | 	GPU_SHADER_USE_COLOR =        (1 << 0),   /* use glColor, for lighting it replaces diffuse */ | 
					
						
							|  |  |  | 	GPU_SHADER_LIGHTING =         (1 << 1),   /* use lighting */ | 
					
						
							|  |  |  | 	GPU_SHADER_TWO_SIDED =        (1 << 2),   /* flip normals towards viewer */ | 
					
						
							|  |  |  | 	GPU_SHADER_TEXTURE_2D =       (1 << 3),   /* use 2D texture to replace diffuse color */ | 
					
						
							| 
									
										
										
										
											2016-06-08 05:39:22 +10:00
										 |  |  | 	GPU_SHADER_TEXTURE_RECT =     (1 << 4),   /* same as GPU_SHADER_TEXTURE_2D, for GL_TEXTURE_RECTANGLE */ | 
					
						
							| 
									
										
										
										
											2013-03-10 15:38:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 05:39:22 +10:00
										 |  |  | 	GPU_SHADER_SOLID_LIGHTING =   (1 << 5),   /* use faster lighting (set automatically) */ | 
					
						
							|  |  |  | 	GPU_SHADER_STIPPLE =          (1 << 6),   /* use stipple */ | 
					
						
							|  |  |  | 	GPU_SHADER_LINE =             (1 << 7),   /* draw lines */ | 
					
						
							| 
									
										
										
										
											2016-05-16 11:13:21 +03:00
										 |  |  | 	GPU_SHADER_FLAT_NORMAL =      (1 << 8),   /* use flat normals */ | 
					
						
							|  |  |  | 	GPU_SHADER_OPTIONS_NUM = 9, | 
					
						
							| 
									
										
										
										
											2016-01-10 07:12:10 +11:00
										 |  |  | 	GPU_SHADER_OPTION_COMBINATIONS = (1 << GPU_SHADER_OPTIONS_NUM) | 
					
						
							| 
									
										
										
										
											2015-12-05 22:11:31 +01:00
										 |  |  | } GPUBasicShaderOption; | 
					
						
							| 
									
										
										
										
											2013-03-10 15:38:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-25 22:57:50 +01:00
										 |  |  | /* Keep these in sync with gpu_shader_basic_frag.glsl */ | 
					
						
							|  |  |  | typedef enum GPUBasicShaderStipple { | 
					
						
							|  |  |  | 	GPU_SHADER_STIPPLE_HALFTONE                        = 0, | 
					
						
							|  |  |  | 	GPU_SHADER_STIPPLE_QUARTTONE                       = 1, | 
					
						
							|  |  |  | 	GPU_SHADER_STIPPLE_CHECKER_8PX                     = 2, | 
					
						
							|  |  |  | 	GPU_SHADER_STIPPLE_HEXAGON                         = 3, | 
					
						
							|  |  |  | 	GPU_SHADER_STIPPLE_DIAG_STRIPES                    = 4, | 
					
						
							|  |  |  | 	GPU_SHADER_STIPPLE_DIAG_STRIPES_SWAP               = 5, | 
					
						
							|  |  |  | } GPUBasicShaderStipple; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-05 22:11:31 +01:00
										 |  |  | void GPU_basic_shaders_init(void); | 
					
						
							|  |  |  | void GPU_basic_shaders_exit(void); | 
					
						
							| 
									
										
										
										
											2013-03-10 15:38:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-05 22:11:31 +01:00
										 |  |  | void GPU_basic_shader_bind(int options); | 
					
						
							| 
									
										
										
										
											2016-06-10 06:08:39 +10:00
										 |  |  | void GPU_basic_shader_bind_enable(int options); | 
					
						
							|  |  |  | void GPU_basic_shader_bind_disable(int options); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-05 22:11:31 +01:00
										 |  |  | int GPU_basic_shader_bound_options(void); | 
					
						
							| 
									
										
										
										
											2013-03-10 15:38:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 04:03:25 +10:00
										 |  |  | /* Only use for small blocks of code that don't support glsl shader. */ | 
					
						
							|  |  |  | #define GPU_BASIC_SHADER_DISABLE_AND_STORE(bound_options) \
 | 
					
						
							|  |  |  | if (GPU_basic_shader_use_glsl_get()) { \ | 
					
						
							|  |  |  | 	if ((bound_options = GPU_basic_shader_bound_options())) { \ | 
					
						
							|  |  |  | 		GPU_basic_shader_bind(0); \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  | } \ | 
					
						
							|  |  |  | else { bound_options = 0; } ((void)0) | 
					
						
							|  |  |  | #define GPU_BASIC_SHADER_ENABLE_AND_RESTORE(bound_options) \
 | 
					
						
							|  |  |  | if (GPU_basic_shader_use_glsl_get()) { \ | 
					
						
							|  |  |  | 	if (bound_options) { \ | 
					
						
							|  |  |  | 		GPU_basic_shader_bind(bound_options); \ | 
					
						
							|  |  |  | 	} \ | 
					
						
							|  |  |  | } ((void)0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-09 05:44:25 +10:00
										 |  |  | void GPU_basic_shader_colors( | 
					
						
							|  |  |  |         const float diffuse[3], const float specular[3], | 
					
						
							|  |  |  |         int shininess, float alpha); | 
					
						
							| 
									
										
										
										
											2013-03-10 15:38:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* Fixed Function Lighting */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-27 21:06:23 +01:00
										 |  |  | typedef enum GPULightType { | 
					
						
							|  |  |  | 	GPU_LIGHT_POINT, | 
					
						
							|  |  |  | 	GPU_LIGHT_SPOT, | 
					
						
							|  |  |  | 	GPU_LIGHT_SUN | 
					
						
							|  |  |  | } GPULightType; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-10 15:38:23 +00:00
										 |  |  | typedef struct GPULightData { | 
					
						
							| 
									
										
										
										
											2015-11-27 21:06:23 +01:00
										 |  |  | 	GPULightType type; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	float position[3]; | 
					
						
							|  |  |  | 	float direction[3]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	float diffuse[3]; | 
					
						
							|  |  |  | 	float specular[3]; | 
					
						
							| 
									
										
										
										
											2013-03-10 15:38:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	float constant_attenuation; | 
					
						
							|  |  |  | 	float linear_attenuation; | 
					
						
							|  |  |  | 	float quadratic_attenuation; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	float spot_cutoff; | 
					
						
							|  |  |  | 	float spot_exponent; | 
					
						
							|  |  |  | } GPULightData; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-05 22:11:31 +01:00
										 |  |  | void GPU_basic_shader_light_set(int light_num, GPULightData *light); | 
					
						
							|  |  |  | void GPU_basic_shader_light_set_viewer(bool local); | 
					
						
							| 
									
										
										
										
											2015-12-25 22:57:50 +01:00
										 |  |  | void GPU_basic_shader_stipple(GPUBasicShaderStipple stipple_id); | 
					
						
							| 
									
										
										
										
											2016-04-08 10:58:40 +03:00
										 |  |  | void GPU_basic_shader_line_stipple(GLint stipple_factor, GLushort stipple_pattern); | 
					
						
							|  |  |  | void GPU_basic_shader_line_width(float line_width); | 
					
						
							| 
									
										
										
										
											2013-03-10 15:38:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 |