| 106 | } |
| 107 | |
| 108 | void GLStaticHolder::createShader_( ShaderType type ) |
| 109 | { |
| 110 | std::string vertexShader; |
| 111 | std::string fragmentShader; |
| 112 | if ( type == Volume || type == VolumePicker ) |
| 113 | { |
| 114 | vertexShader = getTrivialVertexShader(); |
| 115 | if ( type == Volume ) |
| 116 | fragmentShader = getVolumeFragmentShader(); |
| 117 | else |
| 118 | fragmentShader = getVolumePickerFragmentShader(); |
| 119 | } |
| 120 | else if ( type == Mesh || type == AlphaSortMesh || type == DepthPeelMesh ) |
| 121 | { |
| 122 | vertexShader = getMeshVerticesShader(); |
| 123 | |
| 124 | int major, minor; |
| 125 | auto window = glfwGetCurrentContext(); |
| 126 | major = glfwGetWindowAttrib( window, GLFW_CONTEXT_VERSION_MAJOR ); |
| 127 | minor = glfwGetWindowAttrib( window, GLFW_CONTEXT_VERSION_MINOR ); |
| 128 | |
| 129 | bool gl4 = major >= 4 && ( major != 4 || minor >= 3 ); |
| 130 | ShaderTransparencyMode tMode = ShaderTransparencyMode::None; |
| 131 | if ( type == AlphaSortMesh ) |
| 132 | tMode = ShaderTransparencyMode::AlphaSort; |
| 133 | else if ( type == DepthPeelMesh ) |
| 134 | tMode = ShaderTransparencyMode::DepthPeel; |
| 135 | |
| 136 | int curSamples = 0; |
| 137 | GL_EXEC( glGetIntegerv( GL_SAMPLES, &curSamples ) ); |
| 138 | |
| 139 | fragmentShader = getMeshFragmentShader( gl4, tMode, curSamples > 1 && tMode != ShaderTransparencyMode::AlphaSort ); |
| 140 | } |
| 141 | else if ( type == Lines || type == LinesJoint || type == AlphaSortLines || type == DepthPeelLines ) |
| 142 | { |
| 143 | if ( type == Lines || type == AlphaSortLines || type == DepthPeelLines ) |
| 144 | { |
| 145 | ShaderTransparencyMode tMode = ShaderTransparencyMode::None; |
| 146 | if ( type == AlphaSortLines ) |
| 147 | tMode = ShaderTransparencyMode::AlphaSort; |
| 148 | else if ( type == DepthPeelLines ) |
| 149 | tMode = ShaderTransparencyMode::DepthPeel; |
| 150 | |
| 151 | vertexShader = getLinesVertexShader(); |
| 152 | fragmentShader = getLinesFragmentShader( tMode ); |
| 153 | } |
| 154 | else |
| 155 | { |
| 156 | vertexShader = getLinesJointVertexShader(); |
| 157 | fragmentShader = getLinesJointFragmentShader(); |
| 158 | } |
| 159 | } |
| 160 | else if ( type == LinesPicker || type == LinesJointPicker ) |
| 161 | { |
| 162 | if ( type == LinesPicker ) |
| 163 | vertexShader = getLinesPickerVertexShader(); |
| 164 | else |
| 165 | vertexShader = getLinesJointPickerVertexShader(); |
no test coverage detected