0030700: Visualization, TKOpenGl - support PBR Metallic-Roughness shading model
[occt.git] / src / Shaders / Shaders_PBREnvBaking_vs.pxx
diff --git a/src/Shaders/Shaders_PBREnvBaking_vs.pxx b/src/Shaders/Shaders_PBREnvBaking_vs.pxx
new file mode 100644 (file)
index 0000000..89a37cb
--- /dev/null
@@ -0,0 +1,38 @@
+// This file has been automatically generated from resource file src/Shaders/PBREnvBaking.vs
+
+static const char Shaders_PBREnvBaking_vs[] =
+  "THE_SHADER_OUT vec3 ViewDirection; //!< direction of fetching from environment cubemap\n"
+  "\n"
+  "uniform int uCurrentSide; //!< current side of cubemap\n"
+  "uniform int uYCoeff;      //!< coefficient of Y controlling horizontal flip of cubemap\n"
+  "uniform int uZCoeff;      //!< coefficient of Z controlling vertical flip of cubemap\n"
+  "\n"
+  "const mat2 cubemapDirectionMatrices[6] = mat2[]\n"
+  "(\n"
+  "  mat2 ( 0, -1, -1,  0),\n"
+  "  mat2 ( 0,  1, -1,  0),\n"
+  "  mat2 ( 0,  1,  1,  0),\n"
+  "  mat2 ( 0,  1, -1,  0),\n"
+  "  mat2 ( 1,  0,  0, -1),\n"
+  "  mat2 (-1,  0,  0, -1)\n"
+  ");\n"
+  "\n"
+  "//! Generates environment map fetching direction considering current index of side.\n"
+  "vec3 cubemapBakingViewDirection (in int theSide,\n"
+  "                                 in vec2 theScreenCoord)\n"
+  "{\n"
+  "  int anAxis = theSide / 2;\n"
+  "  vec3 aDirection = vec3(0.0);\n"
+  "  aDirection[anAxis] = float(-(int(theSide) % 2) * 2 + 1);\n"
+  "  theScreenCoord = cubemapDirectionMatrices[theSide] * theScreenCoord;\n"
+  "  aDirection[(anAxis + 1) % 3] = theScreenCoord.x;\n"
+  "  aDirection[(anAxis + 2) % 3] = theScreenCoord.y;\n"
+  "  return aDirection;\n"
+  "}\n"
+  "\n"
+  "void main()\n"
+  "{\n"
+  "  ViewDirection = cubemapBakingViewDirection (uCurrentSide, occVertex.xy);\n"
+  "  ViewDirection = cubemapVectorTransform (ViewDirection, uYCoeff, uZCoeff);\n"
+  "  gl_Position = vec4 (occVertex.xy, 0.0, 1.0);\n"
+  "}\n";