------------------------------------------------------------------------------
| 911 | |
| 912 | //------------------------------------------------------------------------------ |
| 913 | void 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 |
no test coverage detected