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

Method UpdateShaders

Rendering/OpenGL2/vtkOpenGLLowMemoryPolyDataMapper.cxx:913–974  ·  view source on GitHub ↗

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

Source from the content-addressed store, hash-verified

911
912//------------------------------------------------------------------------------
913void vtkOpenGLLowMemoryPolyDataMapper::UpdateShaders(vtkRenderer* renderer, vtkActor* actor)
914{
915 // remove existing mods.
916 this->GLSLMods->RemoveAllItems();
917
918 auto vertShader = this->GetShader(vtkShader::Vertex);
919 auto fragShader = this->GetShader(vtkShader::Fragment);
920 auto* sp = vtkOpenGLShaderProperty::SafeDownCast(actor->GetShaderProperty());
921 if (sp->HasVertexShaderCode())
922 {
923 vertShader->SetSource(sp->GetVertexShaderCode());
924 }
925 else
926 {
927 vertShader->SetSource(vtkPolyDataVS);
928 }
929
930 if (sp->HasFragmentShaderCode())
931 {
932 fragShader->SetSource(sp->GetFragmentShaderCode());
933 }
934 else
935 {
936 fragShader->SetSource(vtkPolyDataFS);
937 }
938 // user specified pre replacements
939 vtkOpenGLShaderProperty::ReplacementMap repMap = sp->GetAllShaderReplacements();
940 for (const auto& i : repMap)
941 {
942 if (i.first.ReplaceFirst)
943 {
944 std::string ssrc = this->Shaders[i.first.ShaderType]->GetSource();
945 vtkShaderProgram::Substitute(
946 ssrc, i.first.OriginalValue, i.second.Replacement, i.second.ReplaceAll);
947 this->Shaders[i.first.ShaderType]->SetSource(ssrc);
948 }
949 }
950 auto vsSource = vertShader->GetSource();
951 auto fsSource = fragShader->GetSource();
952 this->ReplaceShaderValues(renderer, actor, vsSource, fsSource);
953 auto* vu = vtkOpenGLUniforms::SafeDownCast(sp->GetVertexCustomUniforms());
954 vtkShaderProgram::Substitute(vsSource, "//VTK::CustomUniforms::Dec", vu->GetDeclarations());
955 auto* fu = vtkOpenGLUniforms::SafeDownCast(sp->GetFragmentCustomUniforms());
956 vtkShaderProgram::Substitute(fsSource, "//VTK::CustomUniforms::Dec", fu->GetDeclarations());
957 vertShader->SetSource(vsSource);
958 fragShader->SetSource(fsSource);
959 // user specified post replacements
960 for (const auto& i : repMap)
961 {
962 if (!i.first.ReplaceFirst)
963 {
964 std::string ssrc = this->Shaders[i.first.ShaderType]->GetSource();
965 vtkShaderProgram::Substitute(
966 ssrc, i.first.OriginalValue, i.second.Replacement, i.second.ReplaceAll);
967 this->Shaders[i.first.ShaderType]->SetSource(ssrc);
968 }
969 }
970#ifdef vtkOpenGLLowMemoryPolyDataMapper_DEBUG

Callers 1

RenderPieceStartMethod · 0.95

Calls 9

ReplaceShaderValuesMethod · 0.95
GetShaderMethod · 0.80
GetShaderPropertyMethod · 0.80
HasVertexShaderCodeMethod · 0.80
HasFragmentShaderCodeMethod · 0.80
RemoveAllItemsMethod · 0.45
SetSourceMethod · 0.45
GetSourceMethod · 0.45
GetDeclarationsMethod · 0.45

Tested by

no test coverage detected