0029337: Visualization, TKOpenGl - visual artifacts on Intel Broadwell GPU
[occt.git] / src / Shaders / Shaders_Declarations_glsl.pxx
index 46928f7..cec6805 100644 (file)
@@ -27,6 +27,10 @@ static const char Shaders_Declarations_glsl[] =
   "//! Specifies the length of array of clipping planes, which is 8 by default. Defined by Shader Manager.\n"
   "// #define THE_MAX_CLIP_PLANES 8\n"
   "\n"
+  "//! @def THE_NB_FRAG_OUTPUTS\n"
+  "//! Specifies the length of array of Fragment Shader outputs, which is 1 by default. Defined by Shader Manager.\n"
+  "// #define THE_NB_FRAG_OUTPUTS 1\n"
+  "\n"
   "// compatibility macros\n"
   "#if (__VERSION__ >= 130)\n"
   "  #define THE_ATTRIBUTE  in\n"
@@ -61,20 +65,43 @@ static const char Shaders_Declarations_glsl[] =
   "#elif defined(FRAGMENT_SHADER)\n"
   "  #if (__VERSION__ >= 130)\n"
   "    #ifdef OCC_ENABLE_draw_buffers\n"
-  "      out vec4 occFragColorArray[2];\n"
-  "      #define occFragColor    occFragColorArray[0]\n"
-  "      #define occFragCoverage occFragColorArray[1]\n"
+  "      out vec4 occFragColorArray[THE_NB_FRAG_OUTPUTS];\n"
+  "      #define occFragColorArrayAlias occFragColorArray\n"
+  "      #define occFragColor0 occFragColorArray[0]\n"
   "    #else\n"
-  "      out vec4 occFragColor;\n"
+  "      out vec4 occFragColor0;\n"
   "    #endif\n"
   "  #else\n"
   "    #ifdef OCC_ENABLE_draw_buffers\n"
-  "      #define occFragColor    gl_FragData[0]\n"
-  "      #define occFragCoverage gl_FragData[1]\n"
+  "      #define occFragColorArrayAlias gl_FragData\n"
+  "      #define occFragColor0 gl_FragData[0]\n"
   "    #else\n"
-  "      #define occFragColor gl_FragColor\n"
+  "      #define occFragColor0 gl_FragColor\n"
   "    #endif\n"
   "  #endif\n"
+  "\n"
+  "  #if (THE_NB_FRAG_OUTPUTS >= 2)\n"
+  "    #define occFragColor1 occFragColorArrayAlias[1]\n"
+  "  #else\n"
+  "    vec4 occFragColor1;\n"
+  "  #endif\n"
+  "  #if (THE_NB_FRAG_OUTPUTS >= 3)\n"
+  "    #define occFragColor2 occFragColorArrayAlias[2]\n"
+  "  #else\n"
+  "    vec4 occFragColor2;\n"
+  "  #endif\n"
+  "  #if (THE_NB_FRAG_OUTPUTS >= 4)\n"
+  "    #define occFragColor3 occFragColorArrayAlias[3]\n"
+  "  #else\n"
+  "    vec4 occFragColor3;\n"
+  "  #endif\n"
+  "\n"
+  "  // Built-in outputs notation\n"
+  "  #define occFragColor    occFragColor0\n"
+  "  #define occFragCoverage occFragColor1\n"
+  "\n"
+  "  //! Define the main Fragment Shader output - color value.\n"
+  "  void occSetFragColor (in vec4 theColor);\n"
   "#endif\n"
   "\n"
   "// Matrix state\n"