1 /*=========================================================================
2 
3   Program:   Visualization Toolkit
4   Module:    TestGPURayCastFourComponentsCompositeStreaming.cxx
5 
6   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7   All rights reserved.
8   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10      This software is distributed WITHOUT ANY WARRANTY; without even
11      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12      PURPOSE.  See the above copyright notice for more information.
13 
14 =========================================================================*/
15 
16 
17 // This test volume renders the vase dataset with 4 dependent components the
18 // composite method with no shading.
19 
20 #include "vtkGPUVolumeRayCastMapper.h"
21 #include "vtkTestUtilities.h"
22 #include "vtkXMLImageDataReader.h"
23 #include "vtkImageShiftScale.h"
24 #include "vtkColorTransferFunction.h"
25 #include "vtkPiecewiseFunction.h"
26 #include "vtkTransform.h"
27 #include "vtkRenderer.h"
28 #include "vtkRenderWindow.h"
29 #include "vtkRenderWindowInteractor.h"
30 #include "vtkVolumeProperty.h"
31 #include "vtkCamera.h"
32 #include "vtkRegressionTestImage.h"
33 #include "vtkImageMagnify.h"
34 #include "vtkImageData.h"
35 
TestGPURayCastFourComponentsCompositeStreaming(int argc,char * argv[])36 int TestGPURayCastFourComponentsCompositeStreaming(int argc,
37                                                    char *argv[])
38 {
39   cout << "CTEST_FULL_OUTPUT (Avoid ctest truncation of output)" << endl;
40   char *cfname=
41     vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/vase_4comp.vti");
42 
43   vtkXMLImageDataReader *reader=vtkXMLImageDataReader::New();
44   reader->SetFileName(cfname);
45   delete [] cfname;
46 
47 
48   vtkImageMagnify *mag=vtkImageMagnify::New();
49   mag->SetInputConnection(reader->GetOutputPort());
50   mag->SetMagnificationFactors(5,1,1);
51   mag->SetInterpolate(1);
52 
53   int dims[3];
54   mag->Update();
55   mag->GetOutput()->GetDimensions(dims);
56   unsigned long sizekb=mag->GetOutput()->GetActualMemorySize();
57   cout<<"Memory usage for the ImageData="<<(sizekb/1024)<<"Mb"<<endl;
58   cout<<"Dims of the ImageData="<<dims[0]<<"x"<<dims[1]<<"x"<<dims[2]<<"="<<(dims[0]*dims[1]*dims[2])/1024/1024<<"Mb"<<endl;
59 
60 
61   vtkRenderer *ren1=vtkRenderer::New();
62   vtkRenderWindow *renWin=vtkRenderWindow::New();
63   renWin->AddRenderer(ren1);
64   renWin->SetSize(301,300);
65   vtkRenderWindowInteractor *iren=vtkRenderWindowInteractor::New();
66   iren->SetRenderWindow(renWin);
67 
68   renWin->Render();
69 
70   vtkGPUVolumeRayCastMapper *volumeMapper;
71   vtkVolumeProperty *volumeProperty;
72   vtkVolume *volume;
73 
74   volumeMapper=vtkGPUVolumeRayCastMapper::New();
75   volumeMapper->SetBlendModeToComposite();
76   volumeMapper->SetInputConnection(
77     mag->GetOutputPort());
78 
79   vtkPiecewiseFunction *opacity=vtkPiecewiseFunction::New();
80   opacity->AddPoint(0,0);
81   opacity->AddPoint(255,1);
82 
83   volumeProperty=vtkVolumeProperty::New();
84   volumeProperty->IndependentComponentsOff();
85   volumeProperty->ShadeOff();
86   volumeProperty->SetScalarOpacity(opacity);
87 
88   volume=vtkVolume::New();
89   volume->SetMapper(volumeMapper);
90   volume->SetProperty(volumeProperty);
91   ren1->AddViewProp(volume);
92 
93   int valid=volumeMapper->IsRenderSupported(renWin,volumeProperty);
94 
95   int retVal;
96   if(valid)
97     {
98     iren->Initialize();
99     ren1->SetBackground(0.1,0.4,0.2);
100     ren1->ResetCamera();
101     renWin->Render();
102 
103     retVal = vtkTesting::Test(argc, argv, renWin, 75);
104     if (retVal == vtkRegressionTester::DO_INTERACTOR)
105       {
106       iren->Start();
107       }
108     }
109   else
110     {
111     retVal=vtkTesting::PASSED;
112     cout << "Required extensions not supported." << endl;
113     }
114 
115   iren->Delete();
116   renWin->Delete();
117   ren1->Delete();
118   volumeMapper->Delete();
119   volumeProperty->Delete();
120   volume->Delete();
121 
122   opacity->Delete();
123   mag->Delete();
124 
125   reader->Delete();
126 
127   if ((retVal == vtkTesting::PASSED) || (retVal == vtkTesting::DO_INTERACTOR))
128     {
129     return 0;
130     }
131   else
132     {
133     return 1;
134     }
135 }
136