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

Method UpdateShaders

Rendering/OpenGL2/vtkOpenGLPolyDataMapper.cxx:2661–2738  ·  view source on GitHub ↗

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

Source from the content-addressed store, hash-verified

2659
2660//------------------------------------------------------------------------------
2661void vtkOpenGLPolyDataMapper::UpdateShaders(
2662 vtkOpenGLHelper& cellBO, vtkRenderer* ren, vtkActor* actor)
2663{
2664 vtkOpenGLRenderWindow* renWin = vtkOpenGLRenderWindow::SafeDownCast(ren->GetRenderWindow());
2665
2666 cellBO.VAO->Bind();
2667 this->LastBoundBO = &cellBO;
2668
2669 // has something changed that would require us to recreate the shader?
2670 if (this->GetNeedToRebuildShaders(cellBO, ren, actor))
2671 {
2672 // build the shader source code
2673 std::map<vtkShader::Type, vtkShader*> shaders;
2674 vtkShader* vss = vtkShader::New();
2675 vss->SetType(vtkShader::Vertex);
2676 shaders[vtkShader::Vertex] = vss;
2677 vtkShader* gss = vtkShader::New();
2678 gss->SetType(vtkShader::Geometry);
2679 shaders[vtkShader::Geometry] = gss;
2680 vtkShader* fss = vtkShader::New();
2681 fss->SetType(vtkShader::Fragment);
2682 shaders[vtkShader::Fragment] = fss;
2683
2684 this->BuildShaders(shaders, ren, actor);
2685
2686 // compile and bind the program if needed
2687 vtkShaderProgram* newShader = renWin->GetShaderCache()->ReadyShaderProgram(shaders);
2688 if (newShader)
2689 {
2690 vss->Delete();
2691 fss->Delete();
2692 gss->Delete();
2693
2694 // if the shader changed reinitialize the VAO
2695 if (newShader != cellBO.Program || cellBO.Program->GetMTime() > cellBO.AttributeUpdateTime)
2696 {
2697 cellBO.Program = newShader;
2698 // reset the VAO as the shader has changed
2699 cellBO.VAO->ReleaseGraphicsResources();
2700 }
2701
2702 cellBO.ShaderSourceTime.Modified();
2703 }
2704 else
2705 {
2706 vtkErrorMacro("Could not set shader program");
2707 }
2708 }
2709 else
2710 {
2711 renWin->GetShaderCache()->ReadyShaderProgram(cellBO.Program);
2712 if (cellBO.Program->GetMTime() > cellBO.AttributeUpdateTime)
2713 {
2714 // reset the VAO as the shader has changed
2715 cellBO.VAO->ReleaseGraphicsResources();
2716 }
2717 }
2718 vtkOpenGLCheckErrorMacro("failed after UpdateShader");

Callers 1

RenderPieceDrawMethod · 0.95

Calls 15

BuildShadersMethod · 0.95
SetCustomUniformsMethod · 0.95
GetShaderCacheMethod · 0.80
InvokeEventMethod · 0.80
DeleteMethod · 0.65
NewFunction · 0.50
GetRenderWindowMethod · 0.45

Tested by

no test coverage detected