Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Register
  • Sign in
  • VTK VTK
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 877
    • Issues 877
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 236
    • Merge requests 236
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Artifacts
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Terraform modules
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • VTKVTK
  • VTKVTK
  • Issues
  • #18348
Closed
Open
Issue created Oct 18, 2021 by Timothee Chabat@timothee.chabatContributor

Many textured vtkFollower failure

When instanciating more than 32 textured vtkFollower, some errors are logged about too many textures being send to the GPU and final render is totally broken.

Replacing vtkFollower by vtkActor gives no errors and works fine even with 100+ textures.

Errors :

2021-10-18 16:55:26.100 (   1.300s) [        EA38C780]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
2021-10-18 16:55:26.100 (   1.300s) [        EA38C780]vtkOpenGLPolyDataMapper:2648   ERR| vtkCompositeMapperHelper2 (0x55b142535840): failed after Render 1 OpenGL errors detected
  0 : (1281) Invalid value

Program to reproduce :

#include <vtkCell.h>
#include <vtkIdList.h>
#include <vtkNew.h>
#include <vtkRTAnalyticSource.h>
#include <vtkStaticCellLocator.h>
#include <vtkPlaneSource.h>
#include <vtkActor.h>
#include <vtkFollower.h>
#include <vtkRenderer.h>
#include <vtkCompositePolyDataMapper.h>
#include <vtkCompositePolyDataMapper2.h>
#include <vtkRenderWindow.h>
#include <vtkNew.h>
#include <vtkJPEGReader.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkTexture.h>

#include <vector>

//////////////////////////
constexpr int LOOP = 6;
const std::vector<const char*> TEXTURES = {
  // list of texture name ...
};
//////////////////////////

int main(int, char *[])
{
  vtkNew<vtkRenderer> renderer;
  const std::string prefix = "/home/timothee/Data/materials/textures/";

  for (int i = 0; i < LOOP; ++i)
  {
    for(int j = 0; j < LOOP; ++j)
    {
      vtkNew<vtkPlaneSource> source;
      source->SetCenter(i, j, 0);
      source->Update();

      const std::string filename = prefix + TEXTURES[(i + LOOP *j) % TEXTURES.size()];
      vtkNew<vtkJPEGReader> reader;
      reader->SetFileName(filename.c_str());
      vtkNew<vtkTexture> texture;
      texture->SetInputConnection(reader->GetOutputPort());

      vtkNew<vtkCompositePolyDataMapper2> mapper;
      mapper->SetInputConnection(source->GetOutputPort());

      vtkNew<vtkFollower> actor;
      actor->SetCamera(renderer->GetActiveCamera());
      actor->SetMapper(mapper);
      actor->SetTexture(texture);

      renderer->AddActor(actor);
    }
  }

  renderer->ResetCamera(-1, LOOP + 1, -1, LOOP + 1, -1, 1);

  vtkNew<vtkRenderWindow> window;
  window->AddRenderer(renderer);
  window->SetWindowName("Follower test");

  vtkNew<vtkRenderWindowInteractor> interactor;
  interactor->SetRenderWindow(window);

  window->Render();
  interactor->Start();

  return 0;
}
Edited Oct 18, 2021 by Timothee Chabat
Assignee
Assign to
Time tracking