MCPcopy Create free account
hub / github.com/MeshInspector/MeshLib / createShader_

Method createShader_

source/MRViewer/MRGLStaticHolder.cpp:108–638  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

106}
107
108void 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();

Callers 1

getShaderIdMethod · 0.80

Calls 15

getTrivialVertexShaderFunction · 0.85
getVolumeFragmentShaderFunction · 0.85
getMeshVerticesShaderFunction · 0.85
getMeshFragmentShaderFunction · 0.85
getLinesVertexShaderFunction · 0.85
getLinesFragmentShaderFunction · 0.85
getPickerFragmentShaderFunction · 0.85

Tested by

no test coverage detected