Same texture used in two renders window fails
Creating a single texture used in multiple render windows does not work. Note that using the same texture in 2 different renderers but in the same render window works fine.
See below for a minimal example :
#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkNew.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkSmartPointer.h>
#include <vtkPlaneSource.h>
#include <vtkTexture.h>
#include <vtkPNGReader.h>
#include <array>
int main(int, char*[])
{
std::array<vtkNew<vtkRenderWindow>, 2> renderWindows;
std::array<vtkNew<vtkRenderWindowInteractor>, 2> interactors;
// XXX: ---------------------------------
// Moving this into the for loop will make the program behave correctly
vtkNew<vtkPNGReader> texReader;
texReader->SetFileName("/home/timothee/Misc/Images/plain.png");
vtkNew<vtkTexture> texture;
texture->SetInputConnection(texReader->GetOutputPort());
texture->Update();
// ---------------------------------------
for (int i : {0, 1})
{
vtkNew<vtkPlaneSource> plane;
plane->Update();
renderWindows[i]->SetWindowName("ShareCamera");
renderWindows[i]->SetSize(400, 400);
interactors[i]->SetRenderWindow(renderWindows[i]);
vtkNew<vtkPolyDataMapper> mapper;
mapper->SetInputConnection(plane->GetOutputPort());
vtkNew<vtkActor> actor;
actor->SetMapper(mapper);
actor->SetTexture(texture);
vtkNew<vtkRenderer> renderer;
renderer->AddActor(actor);
renderer->SetBackground(0.2, 0.2, 0.2);
renderWindows[i]->AddRenderer(renderer);
vtkCamera* camera = nullptr;
if (i == 0)
{
camera = renderer->GetActiveCamera();
camera->Azimuth(30);
camera->Elevation(30);
}
else
{
renderer->SetActiveCamera(camera);
}
renderer->ResetCamera();
renderWindows[i]->Render();
}
interactors[0]->Start();
return EXIT_SUCCESS;
}