MCPcopy Create free account
hub / github.com/Kitware/VTK / BuildShader

Method BuildShader

Rendering/VolumeOpenGL2/vtkOpenGLGPUVolumeRayCastMapper.cxx:2810–2869  ·  view source on GitHub ↗

------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

2808
2809//------------------------------------------------------------------------------
2810void vtkOpenGLGPUVolumeRayCastMapper::BuildShader(vtkRenderer* ren)
2811{
2812 std::map<vtkShader::Type, vtkShader*> shaders;
2813 vtkShader* vertexShader = vtkShader::New();
2814 vertexShader->SetType(vtkShader::Vertex);
2815 shaders[vtkShader::Vertex] = vertexShader;
2816 vtkShader* fragmentShader = vtkShader::New();
2817 fragmentShader->SetType(vtkShader::Fragment);
2818 shaders[vtkShader::Fragment] = fragmentShader;
2819 vtkShader* geometryShader = vtkShader::New();
2820 geometryShader->SetType(vtkShader::Geometry);
2821 shaders[vtkShader::Geometry] = geometryShader;
2822
2823 auto vol = this->Impl->GetActiveVolume();
2824
2825 vtkOpenGLShaderProperty* sp = vtkOpenGLShaderProperty::SafeDownCast(vol->GetShaderProperty());
2826 this->GetShaderTemplate(shaders, sp);
2827
2828 // user specified pre replacements
2829 vtkOpenGLShaderProperty::ReplacementMap repMap = sp->GetAllShaderReplacements();
2830 for (const auto& i : repMap)
2831 {
2832 if (i.first.ReplaceFirst)
2833 {
2834 std::string ssrc = shaders[i.first.ShaderType]->GetSource();
2835 vtkShaderProgram::Substitute(
2836 ssrc, i.first.OriginalValue, i.second.Replacement, i.second.ReplaceAll);
2837 shaders[i.first.ShaderType]->SetSource(ssrc);
2838 }
2839 }
2840
2841 auto numComp = this->AssembledInputs[0].Texture->GetLoadedScalars()->GetNumberOfComponents();
2842 this->ReplaceShaderValues(shaders, ren, vol, numComp);
2843
2844 // user specified post replacements
2845 for (const auto& i : repMap)
2846 {
2847 if (!i.first.ReplaceFirst)
2848 {
2849 std::string ssrc = shaders[i.first.ShaderType]->GetSource();
2850 vtkShaderProgram::Substitute(
2851 ssrc, i.first.OriginalValue, i.second.Replacement, i.second.ReplaceAll);
2852 shaders[i.first.ShaderType]->SetSource(ssrc);
2853 }
2854 }
2855
2856 // Now compile the shader
2857 //--------------------------------------------------------------------------
2858 this->Impl->ShaderProgram = this->Impl->ShaderCache->ReadyShaderProgram(shaders);
2859 if (!this->Impl->ShaderProgram || !this->Impl->ShaderProgram->GetCompiled())
2860 {
2861 vtkErrorMacro("Shader failed to compile");
2862 }
2863
2864 vertexShader->Delete();
2865 fragmentShader->Delete();
2866 geometryShader->Delete();
2867

Callers 2

GPURenderMethod · 0.95
RenderWithDepthPassMethod · 0.80

Calls 13

GetShaderTemplateMethod · 0.95
ReplaceShaderValuesMethod · 0.95
GetActiveVolumeMethod · 0.80
GetShaderPropertyMethod · 0.80
GetLoadedScalarsMethod · 0.80
DeleteMethod · 0.65
NewFunction · 0.50
SetTypeMethod · 0.45
GetSourceMethod · 0.45
SetSourceMethod · 0.45
GetNumberOfComponentsMethod · 0.45
ReadyShaderProgramMethod · 0.45

Tested by

no test coverage detected