code: public synchronized void bindShader(GVRScene scene, boolean isMultiview)
      {
          GVRRenderPass pass = mRenderPassList.get(0);
          GVRShaderId shader = pass.getMaterial().getShaderType();
          GVRShader template = shader.getTemplate(getGVRContext());
          if (template != null)
          {
              template.bindShader(getGVRContext(), this, scene, isMultiview);
          }
          for (int i = 1; i < mRenderPassList.size(); ++i)
          {
              pass = mRenderPassList.get(i);
              shader = pass.getMaterial().getShaderType();
              template = shader.getTemplate(getGVRContext());
              if (template != null)
              {
                  template.bindShader(getGVRContext(), pass, scene, isMultiview);
              }
          }
      }
docs: Selects a specific vertex and fragment shader to use for rendering.
  
  If a shader template has been specified, it is used to generate
  a vertex and fragment shader based on mesh attributes, bound textures
  and light sources. If the textures bound to the material are changed
  or a new light source is added, this function must be called again
  to select the appropriate shaders. This function may cause recompilation
  of shaders which is quite slow.
  
  @param scene scene being rendered
  @see GVRShaderTemplate GVRMaterialShader.getShaderType