0030700: Visualization, TKOpenGl - support PBR Metallic-Roughness shading model
[occt.git] / src / Shaders / Shaders_Declarations_glsl.pxx
1 // This file has been automatically generated from resource file src/Shaders/Declarations.glsl
2
3 static const char Shaders_Declarations_glsl[] =
4   "\n"
5   "//! @file Declarations.glsl includes definition of common uniform variables in OCCT GLSL programs\n"
6   "//! @def THE_MAX_LIGHTS\n"
7   "//! Specifies the length of array of lights, which is 8 by default. Defined by Shader Manager.\n"
8   "// #define THE_MAX_LIGHTS 8\n"
9   "\n"
10   "//! @def THE_MAX_CLIP_PLANES\n"
11   "//! Specifies the length of array of clipping planes, which is 8 by default. Defined by Shader Manager.\n"
12   "// #define THE_MAX_CLIP_PLANES 8\n"
13   "\n"
14   "//! @def THE_NB_FRAG_OUTPUTS\n"
15   "//! Specifies the length of array of Fragment Shader outputs, which is 1 by default. Defined by Shader Manager.\n"
16   "// #define THE_NB_FRAG_OUTPUTS 1\n"
17   "\n"
18   "// compatibility macros\n"
19   "#if (__VERSION__ >= 130)\n"
20   "  #define THE_ATTRIBUTE  in\n"
21   "  #define THE_SHADER_IN  in\n"
22   "  #define THE_SHADER_OUT out\n"
23   "  #define THE_OUT        out\n"
24   "  #define occTexture1D   texture\n"
25   "  #define occTexture2D   texture\n"
26   "  #define occTexture3D   texture\n"
27   "  #define occTextureCube texture\n"
28   "  #define occTextureCubeLod textureLod\n"
29   "#else\n"
30   "  #define THE_ATTRIBUTE  attribute\n"
31   "  #define THE_SHADER_IN  varying\n"
32   "  #define THE_SHADER_OUT varying\n"
33   "  #define THE_OUT\n"
34   "  #define occTexture1D   texture1D\n"
35   "  #define occTexture2D   texture2D\n"
36   "  #define occTexture3D   texture3D\n"
37   "  #define occTextureCube textureCube\n"
38   "  #define occTextureCubeLod textureCubeLod\n"
39   "#endif\n"
40   "\n"
41   "#ifdef GL_ES\n"
42   "#if (__VERSION__ >= 300)\n"
43   "  #define THE_PREC_ENUM highp // lowp should be enough for enums but triggers driver bugs\n"
44   "#else\n"
45   "  #define THE_PREC_ENUM lowp\n"
46   "#endif\n"
47   "#else\n"
48   "  #define THE_PREC_ENUM\n"
49   "#endif\n"
50   "\n"
51   "// Vertex attributes\n"
52   "#ifdef VERTEX_SHADER\n"
53   "  THE_ATTRIBUTE vec4 occVertex;\n"
54   "  THE_ATTRIBUTE vec3 occNormal;\n"
55   "  THE_ATTRIBUTE vec4 occTexCoord;\n"
56   "  THE_ATTRIBUTE vec4 occVertColor;\n"
57   "#elif defined(FRAGMENT_SHADER)\n"
58   "  #if (__VERSION__ >= 130)\n"
59   "    #ifdef OCC_ENABLE_draw_buffers\n"
60   "      out vec4 occFragColorArray[THE_NB_FRAG_OUTPUTS];\n"
61   "      #define occFragColorArrayAlias occFragColorArray\n"
62   "      #define occFragColor0 occFragColorArray[0]\n"
63   "    #else\n"
64   "      out vec4 occFragColor0;\n"
65   "    #endif\n"
66   "  #else\n"
67   "    #ifdef OCC_ENABLE_draw_buffers\n"
68   "      #define occFragColorArrayAlias gl_FragData\n"
69   "      #define occFragColor0 gl_FragData[0]\n"
70   "    #else\n"
71   "      #define occFragColor0 gl_FragColor\n"
72   "    #endif\n"
73   "  #endif\n"
74   "\n"
75   "  #if (THE_NB_FRAG_OUTPUTS >= 2)\n"
76   "    #define occFragColor1 occFragColorArrayAlias[1]\n"
77   "  #else\n"
78   "    vec4 occFragColor1;\n"
79   "  #endif\n"
80   "  #if (THE_NB_FRAG_OUTPUTS >= 3)\n"
81   "    #define occFragColor2 occFragColorArrayAlias[2]\n"
82   "  #else\n"
83   "    vec4 occFragColor2;\n"
84   "  #endif\n"
85   "  #if (THE_NB_FRAG_OUTPUTS >= 4)\n"
86   "    #define occFragColor3 occFragColorArrayAlias[3]\n"
87   "  #else\n"
88   "    vec4 occFragColor3;\n"
89   "  #endif\n"
90   "\n"
91   "  // Built-in outputs notation\n"
92   "  #define occFragColor    occFragColor0\n"
93   "  #define occFragCoverage occFragColor1\n"
94   "\n"
95   "  //! Define the main Fragment Shader output - color value.\n"
96   "  void occSetFragColor (in vec4 theColor);\n"
97   "#endif\n"
98   "\n"
99   "// Pi number definitions\n"
100   "#define PI       3.141592654\n"
101   "#define PI_2     6.283185307\n"
102   "#define PI_DIV_2 1.570796327\n"
103   "#define PI_DIV_3 1.047197551\n"
104   "#define PI_DIV_4 0.785398163\n"
105   "#define INV_PI   0.318309886\n"
106   "#define INV_PI_2 0.159154943\n"
107   "\n"
108   "// Matrix state\n"
109   "uniform mat4 occWorldViewMatrix;  //!< World-view  matrix\n"
110   "uniform mat4 occProjectionMatrix; //!< Projection  matrix\n"
111   "uniform mat4 occModelWorldMatrix; //!< Model-world matrix\n"
112   "\n"
113   "uniform mat4 occWorldViewMatrixInverse;    //!< Inverse of the world-view  matrix\n"
114   "uniform mat4 occProjectionMatrixInverse;   //!< Inverse of the projection  matrix\n"
115   "uniform mat4 occModelWorldMatrixInverse;   //!< Inverse of the model-world matrix\n"
116   "\n"
117   "uniform mat4 occWorldViewMatrixTranspose;  //!< Transpose of the world-view  matrix\n"
118   "uniform mat4 occProjectionMatrixTranspose; //!< Transpose of the projection  matrix\n"
119   "uniform mat4 occModelWorldMatrixTranspose; //!< Transpose of the model-world matrix\n"
120   "\n"
121   "uniform mat4 occWorldViewMatrixInverseTranspose;  //!< Transpose of the inverse of the world-view  matrix\n"
122   "uniform mat4 occProjectionMatrixInverseTranspose; //!< Transpose of the inverse of the projection  matrix\n"
123   "uniform mat4 occModelWorldMatrixInverseTranspose; //!< Transpose of the inverse of the model-world matrix\n"
124   "\n"
125   "#if defined(THE_IS_PBR)\n"
126   "uniform sampler2D   occEnvLUT;             //!< Environment Lookup Table\n"
127   "uniform sampler2D   occDiffIBLMapSHCoeffs; //!< Packed diffuse (irradiance) IBL map's spherical harmonics coefficients\n"
128   "uniform samplerCube occSpecIBLMap;         //!< Specular IBL map\n"
129   "uniform int         occNbSpecIBLLevels;    //!< Number of mipmap levels used in occSpecIBLMap to store different roughness values maps\n"
130   "\n"
131   "vec3 occDiffIBLMap (in vec3 theNormal); //!< Unpacks spherical harmonics coefficients to diffuse IBL map's values\n"
132   "#endif\n"
133   "\n"
134   "// light type enumeration (same as Graphic3d_TypeOfLightSource)\n"
135   "const int OccLightType_Direct = 1; //!< directional     light source\n"
136   "const int OccLightType_Point  = 2; //!< isotropic point light source\n"
137   "const int OccLightType_Spot   = 3; //!< spot            light source\n"
138   "\n"
139   "// Light sources\n"
140   "uniform               vec4 occLightAmbient;      //!< Cumulative ambient color\n"
141   "#if defined(THE_MAX_LIGHTS) && (THE_MAX_LIGHTS > 0)\n"
142   "uniform THE_PREC_ENUM int  occLightSourcesCount; //!< Total number of light sources\n"
143   "\n"
144   "//! Type of light source, int (see OccLightType enum).\n"
145   "#define occLight_Type(theId)              occLightSourcesTypes[theId].x\n"
146   "\n"
147   "//! Is light a headlight, int?\n"
148   "#define occLight_IsHeadlight(theId)       (occLightSourcesTypes[theId].y != 0)\n"
149   "\n"
150   "//! Specular intensity (equals to diffuse), vec4.\n"
151   "#define occLight_Specular(theId)          occLightSources[theId * 4 + 0]\n"
152   "\n"
153   "//! Position of specified light source, vec4.\n"
154   "#define occLight_Position(theId)          occLightSources[theId * 4 + 1]\n"
155   "\n"
156   "//! Direction of specified spot light source, vec4.\n"
157   "#define occLight_SpotDirection(theId)     occLightSources[theId * 4 + 2]\n"
158   "\n"
159   "//! Maximum spread angle of the spot light (in radians), float.\n"
160   "#define occLight_SpotCutOff(theId)        occLightSources[theId * 4 + 3].z\n"
161   "\n"
162   "//! Attenuation of the spot light intensity (from 0 to 1), float.\n"
163   "#define occLight_SpotExponent(theId)      occLightSources[theId * 4 + 3].w\n"
164   "\n"
165   "#if defined(THE_IS_PBR)\n"
166   "//! Intensity of light source (>= 0), float.\n"
167   "#define occLight_Intensity(theId)         occLightSources[theId * 4 + 0].a\n"
168   "#else\n"
169   "\n"
170   "//! Diffuse intensity (equals to Specular), vec4.\n"
171   "#define occLight_Diffuse(theId)           occLightSources[theId * 4 + 0]\n"
172   "\n"
173   "//! Const attenuation factor of positional light source, float.\n"
174   "#define occLight_ConstAttenuation(theId)  occLightSources[theId * 4 + 3].x\n"
175   "\n"
176   "//! Linear attenuation factor of positional light source, float.\n"
177   "#define occLight_LinearAttenuation(theId) occLightSources[theId * 4 + 3].y\n"
178   "#endif\n"
179   "#endif\n"
180   "\n"
181   "// Converts roughness value from range [0, 1] to real value for calculations\n"
182   "float occRoughness (in float theNormalizedRoughness);\n"
183   "\n"
184   "// Front material properties accessors\n"
185   "#if !defined(THE_IS_PBR)\n"
186   "vec4  occFrontMaterial_Emission(void);            //!< Emission color\n"
187   "vec4  occFrontMaterial_Ambient(void);             //!< Ambient  reflection\n"
188   "vec4  occFrontMaterial_Diffuse(void);             //!< Diffuse  reflection\n"
189   "vec4  occFrontMaterial_Specular(void);            //!< Specular reflection\n"
190   "float occFrontMaterial_Shininess(void);           //!< Specular exponent\n"
191   "float occFrontMaterial_Transparency(void);        //!< Transparency coefficient\n"
192   "#else\n"
193   "vec4  occPBRFrontMaterial_Color(void);               //!< Base color of PBR material\n"
194   "float occPBRFrontMaterial_Metallic(void);            //!< Metallic coefficient\n"
195   "float occPBRFrontMaterial_Roughness(void);           //!< Roughness coefficient\n"
196   "float occPBRFrontMaterial_NormalizedRoughness(void); //!< Normalized roughness coefficient\n"
197   "vec3  occPBRFrontMaterial_Emission(void);            //!< Light intensity emitted by material\n"
198   "float occPBRFrontMaterial_IOR(void);                 //!< Index of refraction\n"
199   "#endif\n"
200   "\n"
201   "// Back material properties accessors\n"
202   "#if !defined(THE_IS_PBR)\n"
203   "vec4  occBackMaterial_Emission(void);            //!< Emission color\n"
204   "vec4  occBackMaterial_Ambient(void);             //!< Ambient  reflection\n"
205   "vec4  occBackMaterial_Diffuse(void);             //!< Diffuse  reflection\n"
206   "vec4  occBackMaterial_Specular(void);            //!< Specular reflection\n"
207   "float occBackMaterial_Shininess(void);           //!< Specular exponent\n"
208   "float occBackMaterial_Transparency(void);        //!< Transparency coefficient\n"
209   "#else\n"
210   "vec4  occPBRBackMaterial_Color(void);               //!< Base color of PBR material\n"
211   "float occPBRBackMaterial_Metallic(void);            //!< Metallic coefficient\n"
212   "float occPBRBackMaterial_Roughness(void);           //!< Roughness coefficient\n"
213   "float occPBRBackMaterial_NormalizedRoughness(void); //!< Normalized roughness coefficient\n"
214   "vec3  occPBRBackMaterial_Emission(void);            //!< Light intensity emitted by material\n"
215   "float occPBRBackMaterial_IOR(void);                 //!< Index of refraction\n"
216   "#endif\n"
217   "\n"
218   "#ifdef THE_HAS_DEFAULT_SAMPLER\n"
219   "#define occActiveSampler    occSampler0                //!< alias for backward compatibility\n"
220   "#define occSamplerBaseColor occSampler0                //!< alias to a base color texture\n"
221   "uniform               sampler2D occSampler0;           //!< current active sampler;\n"
222   "#endif\n"
223   "                                                       //!  occSampler1, occSampler2,... should be defined in GLSL program body for multitexturing\n"
224   "uniform               vec4      occColor;              //!< color value (in case of disabled lighting)\n"
225   "uniform THE_PREC_ENUM int       occDistinguishingMode; //!< Are front and back faces distinguished?\n"
226   "uniform THE_PREC_ENUM int       occTextureEnable;      //!< Is texture enabled?\n"
227   "uniform               vec4      occTexTrsf2d[2];       //!< 2D texture transformation parameters\n"
228   "uniform               float     occPointSize;          //!< point size\n"
229   "\n"
230   "//! Parameters of blended order-independent transparency rendering algorithm\n"
231   "uniform               int       occOitOutput;      //!< Enable bit for writing output color buffers for OIT (occFragColor, occFragCoverage)\n"
232   "uniform               float     occOitDepthFactor; //!< Influence of the depth component to the coverage of the accumulated fragment\n"
233   "uniform               float     occAlphaCutoff;    //!< alpha test cutoff value\n"
234   "\n"
235   "//! Parameters of clipping planes\n"
236   "#if defined(THE_MAX_CLIP_PLANES) && (THE_MAX_CLIP_PLANES > 0)\n"
237   "uniform               vec4 occClipPlaneEquations[THE_MAX_CLIP_PLANES];\n"
238   "uniform THE_PREC_ENUM int  occClipPlaneChains[THE_MAX_CLIP_PLANES]; //! Indicating the number of planes in the Chain\n"
239   "uniform THE_PREC_ENUM int  occClipPlaneCount;   //!< Total number of clip planes\n"
240   "#endif\n"
241   "//! @endfile Declarations.glsl\n";