[vtk-developers] OpenGL2 : VBO update missing for mapper2d
Xabi Riobe
xabivtk at gmail.com
Wed Oct 7 05:49:33 EDT 2015
Hi,
There is a missing update of the VBO in vtkOpenGLPolyDataMapper2D when we
use TransformCoordinate and the viewport changes.
In the attached example, a plane is rendered to cover the full window, but
if you resize the window, the plane does not update.
Maybe in vtkOpenGLPolyDataMapper2D::RenderOverlay, we should had a test on
the viewport MTime when updating the VBO? It works if i force to pass this
condition and update:
if (this->VBOUpdateTime < this->GetMTime() ||
this->VBOUpdateTime < actor->GetMTime() ||
this->VBOUpdateTime < input->GetMTime() )
{
this->UpdateVBO(actor, viewport);
this->VBOUpdateTime.Modified();
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtk-developers/attachments/20151007/dcee075d/attachment.html>
-------------- next part --------------
#include <vtkActor2D.h>
#include <vtkCoordinate.h>
#include <vtkPlaneSource.h>
#include <vtkPointData.h>
#include <vtkPolyDataMapper2D.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkSmartPointer.h>
int main(int, char *[])
{
vtkSmartPointer<vtkRenderer> ren1 = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
renWin->SetSize(512, 512);
renWin->AddRenderer(ren1);
vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin);
vtkSmartPointer<vtkPlaneSource> source = vtkSmartPointer<vtkPlaneSource>::New();
source->SetOrigin(0.0, 0.0, 0.0);
source->SetPoint1(1.0, 0.0, 0.0);
source->SetPoint2(0.0, 1.0, 0.0);
source->Update();
vtkSmartPointer<vtkUnsignedCharArray> scalars = vtkSmartPointer<vtkUnsignedCharArray>::New();
double bottom[3] = { 255.0, 0, 0 };
double top[3] = { 0, 255.0, 0 };
scalars->Initialize();
scalars->SetNumberOfComponents(3);
scalars->SetNumberOfTuples(4);
scalars->InsertTuple(0, bottom);
scalars->InsertTuple(1, bottom);
scalars->InsertTuple(2, top);
scalars->InsertTuple(3, top);
source->GetOutput()->GetPointData()->SetScalars(scalars);
vtkSmartPointer<vtkCoordinate> coordinateSystem = vtkSmartPointer<vtkCoordinate>::New();
coordinateSystem->SetCoordinateSystemToNormalizedViewport();
vtkSmartPointer<vtkPolyDataMapper2D> mapper = vtkSmartPointer<vtkPolyDataMapper2D>::New();
mapper->SetInputConnection(source->GetOutputPort());
mapper->SetTransformCoordinate(coordinateSystem);
mapper->TransformCoordinateUseDoubleOn();
vtkSmartPointer<vtkActor2D> actor2d = vtkSmartPointer<vtkActor2D>::New();
actor2d->SetMapper(mapper);
ren1->AddActor(actor2d);
ren1->ResetCamera();
renWin->Render();
iren->Start();
return EXIT_SUCCESS;
}
More information about the vtk-developers
mailing list