------------------------------------------------------------------------------
| 2743 | |
| 2744 | //------------------------------------------------------------------------------ |
| 2745 | void vtkOpenGLContextDevice2D::DrawImageGL2PS(float p[2], vtkImageData* input) |
| 2746 | { |
| 2747 | // Must be unsigned char -- otherwise OpenGL rendering behaves badly anyway. |
| 2748 | if (!vtkDataTypesCompare(input->GetScalarType(), VTK_UNSIGNED_CHAR)) |
| 2749 | { |
| 2750 | vtkErrorMacro("Invalid image format: Expected unsigned char scalars."); |
| 2751 | return; |
| 2752 | } |
| 2753 | |
| 2754 | // Convert to float for GL2PS |
| 2755 | vtkNew<vtkImageData> image; |
| 2756 | image->ShallowCopy(input); |
| 2757 | vtkDataArray* s = image->GetPointData()->GetScalars(); |
| 2758 | size_t numVals = (s->GetNumberOfComponents() * s->GetNumberOfTuples()); |
| 2759 | unsigned char* vals = vtkAOSDataArrayTemplate<unsigned char>::FastDownCast(s)->GetPointer(0); |
| 2760 | vtkNew<vtkFloatArray> scalars; |
| 2761 | scalars->SetNumberOfComponents(s->GetNumberOfComponents()); |
| 2762 | scalars->SetNumberOfTuples(s->GetNumberOfTuples()); |
| 2763 | for (size_t i = 0; i < numVals; ++i) |
| 2764 | { |
| 2765 | scalars->SetValue(static_cast<vtkIdType>(i), vals[i] / 255.f); |
| 2766 | } |
| 2767 | image->GetPointData()->SetScalars(scalars); |
| 2768 | |
| 2769 | // Instance always exists when this method is called: |
| 2770 | vtkOpenGLGL2PSHelper* gl2ps = vtkOpenGLGL2PSHelper::GetInstance(); |
| 2771 | |
| 2772 | float tp[2] = { p[0], p[1] }; |
| 2773 | this->TransformPoint(tp[0], tp[1]); |
| 2774 | double pos[3] = { static_cast<double>(tp[0]), static_cast<double>(tp[1]), 0. }; |
| 2775 | gl2ps->DrawImage(image, pos); |
| 2776 | } |
| 2777 | |
| 2778 | //------------------------------------------------------------------------------ |
| 2779 | void vtkOpenGLContextDevice2D::DrawImageGL2PS(float p[2], float scale, vtkImageData* image) |
no test coverage detected