ee5befae |
1 | // This file has been automatically generated from resource file src/Shaders/DeclarationsImpl.glsl |
2 | |
3 | static const char Shaders_DeclarationsImpl_glsl[] = |
ee5befae |
4 | "\n" |
d95f5ce1 |
5 | "//! @file DeclarationsImpl.glsl includes implementation of common functions and properties accessors\n" |
b17e5bae |
6 | "#if defined(FRAGMENT_SHADER)\n" |
c40eb6b9 |
7 | "//! Output color (and coverage for accumulation by OIT algorithm).\n" |
b17e5bae |
8 | "void occSetFragColor (in vec4 theColor)\n" |
9 | "{\n" |
c40eb6b9 |
10 | "#if defined(OCC_ALPHA_TEST)\n" |
11 | " if (theColor.a < occAlphaCutoff) discard;\n" |
12 | "#endif\n" |
13 | "#if defined(OCC_WRITE_WEIGHT_OIT_COVERAGE)\n" |
b17e5bae |
14 | " float aWeight = theColor.a * clamp (1e+2 * pow (1.0 - gl_FragCoord.z * occOitDepthFactor, 3.0), 1e-2, 1e+2);\n" |
15 | " occFragCoverage.r = theColor.a * aWeight;\n" |
16 | " occFragColor = vec4 (theColor.rgb * theColor.a * aWeight, theColor.a);\n" |
b17e5bae |
17 | "#else\n" |
c40eb6b9 |
18 | " occFragColor = theColor;\n" |
b17e5bae |
19 | "#endif\n" |
c40eb6b9 |
20 | "}\n" |
b17e5bae |
21 | "#endif\n" |
22 | "\n" |
daf73ab7 |
23 | "#if defined(THE_MAX_LIGHTS) && (THE_MAX_LIGHTS > 0)\n" |
ee5befae |
24 | "// arrays of light sources\n" |
ee5befae |
25 | "uniform vec4 occLightSources[THE_MAX_LIGHTS * 4]; //!< packed light sources parameters\n" |
67312b79 |
26 | "uniform THE_PREC_ENUM ivec2 occLightSourcesTypes[THE_MAX_LIGHTS]; //!< packed light sources types\n" |
27 | "#endif\n" |
28 | "\n" |
29 | "#if defined(THE_IS_PBR)\n" |
30 | "vec3 occDiffIBLMap (in vec3 theNormal)\n" |
31 | "{\n" |
32 | " vec3 aSHCoeffs[9];\n" |
33 | " for (int i = 0; i < 9; ++i)\n" |
34 | " {\n" |
35 | " aSHCoeffs[i] = occTexture2D (occDiffIBLMapSHCoeffs, vec2 ((float(i) + 0.5) / 9.0, 0.0)).rgb;\n" |
36 | " }\n" |
37 | " return aSHCoeffs[0]\n" |
38 | "\n" |
39 | " + aSHCoeffs[1] * theNormal.x\n" |
40 | " + aSHCoeffs[2] * theNormal.y\n" |
41 | " + aSHCoeffs[3] * theNormal.z\n" |
42 | "\n" |
43 | " + aSHCoeffs[4] * theNormal.x * theNormal.z\n" |
44 | " + aSHCoeffs[5] * theNormal.y * theNormal.z\n" |
45 | " + aSHCoeffs[6] * theNormal.x * theNormal.y\n" |
46 | "\n" |
47 | " + aSHCoeffs[7] * (3.0 * theNormal.z * theNormal.z - 1.0)\n" |
48 | " + aSHCoeffs[8] * (theNormal.x * theNormal.x - theNormal.y * theNormal.y);\n" |
49 | "}\n" |
daf73ab7 |
50 | "#endif\n" |
ee5befae |
51 | "\n" |
67312b79 |
52 | "// front and back material properties accessors\n" |
53 | "#if defined(THE_IS_PBR)\n" |
54 | "uniform vec4 occPbrFrontMaterial[3];\n" |
55 | "uniform vec4 occPbrBackMaterial[3];\n" |
56 | "\n" |
57 | "#define MIN_ROUGHNESS 0.01\n" |
58 | "// Converts roughness value from range [0, 1] to real value for calculations\n" |
59 | "float occRoughness (in float theNormalizedRoughness) { return theNormalizedRoughness * (1.0 - MIN_ROUGHNESS) + MIN_ROUGHNESS; }\n" |
60 | "\n" |
61 | "vec4 occPBRFrontMaterial_Color(void) { return occPbrFrontMaterial[0]; }\n" |
62 | "vec3 occPBRFrontMaterial_Emission(void) { return occPbrFrontMaterial[1].rgb; }\n" |
63 | "float occPBRFrontMaterial_IOR(void) { return occPbrFrontMaterial[1].w; }\n" |
64 | "float occPBRFrontMaterial_Metallic(void) { return occPbrFrontMaterial[2].b; }\n" |
65 | "float occPBRFrontMaterial_Roughness(void) { return occRoughness (occPbrFrontMaterial[2].g); }\n" |
66 | "float occPBRFrontMaterial_NormalizedRoughness(void) { return occPbrFrontMaterial[2].g; }\n" |
67 | "\n" |
68 | "vec4 occPBRBackMaterial_Color(void) { return occPbrBackMaterial[0]; }\n" |
69 | "vec3 occPBRBackMaterial_Emission(void) { return occPbrBackMaterial[1].rgb; }\n" |
70 | "float occPBRBackMaterial_IOR(void) { return occPbrBackMaterial[1].w; }\n" |
71 | "float occPBRBackMaterial_Metallic(void) { return occPbrBackMaterial[2].b; }\n" |
72 | "float occPBRBackMaterial_Roughness(void) { return occRoughness (occPbrBackMaterial[2].g); }\n" |
73 | "float occPBRBackMaterial_NormalizedRoughness(void) { return occPbrBackMaterial[2].g; }\n" |
74 | "#else\n" |
ee5befae |
75 | "uniform vec4 occFrontMaterial[5];\n" |
76 | "uniform vec4 occBackMaterial[5];\n" |
77 | "\n" |
ee5befae |
78 | "vec4 occFrontMaterial_Ambient(void) { return occFrontMaterial[0]; }\n" |
79 | "vec4 occFrontMaterial_Diffuse(void) { return occFrontMaterial[1]; }\n" |
80 | "vec4 occFrontMaterial_Specular(void) { return occFrontMaterial[2]; }\n" |
81 | "vec4 occFrontMaterial_Emission(void) { return occFrontMaterial[3]; }\n" |
82 | "float occFrontMaterial_Shininess(void) { return occFrontMaterial[4].x; }\n" |
83 | "float occFrontMaterial_Transparency(void) { return occFrontMaterial[4].y; }\n" |
84 | "\n" |
ee5befae |
85 | "vec4 occBackMaterial_Ambient(void) { return occBackMaterial[0]; }\n" |
86 | "vec4 occBackMaterial_Diffuse(void) { return occBackMaterial[1]; }\n" |
87 | "vec4 occBackMaterial_Specular(void) { return occBackMaterial[2]; }\n" |
88 | "vec4 occBackMaterial_Emission(void) { return occBackMaterial[3]; }\n" |
89 | "float occBackMaterial_Shininess(void) { return occBackMaterial[4].x; }\n" |
90 | "float occBackMaterial_Transparency(void) { return occBackMaterial[4].y; }\n" |
67312b79 |
91 | "#endif\n" |
ee5befae |
92 | "\n" |
93 | "// 2D texture coordinates transformation\n" |
94 | "vec2 occTextureTrsf_Translation(void) { return occTexTrsf2d[0].xy; }\n" |
95 | "vec2 occTextureTrsf_Scale(void) { return occTexTrsf2d[0].zw; }\n" |
96 | "float occTextureTrsf_RotationSin(void) { return occTexTrsf2d[1].x; }\n" |
d95f5ce1 |
97 | "float occTextureTrsf_RotationCos(void) { return occTexTrsf2d[1].y; }\n" |
98 | "//! @endfile DeclarationsImpl.glsl\n"; |