VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkDataTransferHelper.h 00005 00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00007 All rights reserved. 00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 00013 00014 =========================================================================*/ 00030 #ifndef __vtkDataTransferHelper_h 00031 #define __vtkDataTransferHelper_h 00032 00033 #include "vtkRenderingOpenGLModule.h" // For export macro 00034 #include "vtkObject.h" 00035 #include "vtkWeakPointer.h" // needed for vtkWeakPointer. 00036 #include "vtkSmartPointer.h" // needed for vtkSmartPointer. 00037 00038 class vtkDataArray; 00039 class vtkPixelBufferObject; 00040 class vtkTextureObject; 00041 class vtkOpenGLExtensionManager; 00042 class vtkRenderWindow; 00043 00044 class VTKRENDERINGOPENGL_EXPORT vtkDataTransferHelper : public vtkObject 00045 { 00046 public: 00047 static vtkDataTransferHelper* New(); 00048 vtkTypeMacro(vtkDataTransferHelper, vtkObject); 00049 void PrintSelf(ostream& os, vtkIndent indent); 00050 00052 00056 void SetContext(vtkRenderWindow* context); 00057 vtkRenderWindow* GetContext(); 00059 00061 00068 vtkSetVector6Macro(CPUExtent, int); 00069 vtkGetVector6Macro(CPUExtent, int); 00071 00073 00078 vtkSetVector6Macro(GPUExtent, int); 00079 vtkGetVector6Macro(GPUExtent, int); 00081 00083 00087 vtkSetVector6Macro(TextureExtent, int); 00088 vtkGetVector6Macro(TextureExtent, int); 00090 00093 bool GetExtentIsValid(int *extent); 00094 00096 bool GetCPUExtentIsValid(); 00097 00099 bool GetGPUExtentIsValid(); 00100 00102 bool GetTextureExtentIsValid(); 00103 00105 00115 vtkSetMacro(MinTextureDimension,int); 00116 vtkGetMacro(MinTextureDimension,int); 00118 00120 00121 vtkGetObjectMacro(Array, vtkDataArray); 00122 void SetArray(vtkDataArray* array); 00124 00126 00127 vtkGetObjectMacro(Texture, vtkTextureObject); 00128 void SetTexture(vtkTextureObject* texture); 00130 00132 00157 bool Upload(int components=0, 00158 int *componentList=NULL); 00160 00186 bool Download(); 00187 00189 00192 bool DownloadAsync1(); 00193 bool DownloadAsync2(); 00195 00196 bool GetShaderSupportsTextureInt(); 00197 void SetShaderSupportsTextureInt(bool value); 00198 00200 00201 static bool IsSupported(vtkRenderWindow* renWin); 00202 //BTX 00203 protected: 00204 vtkDataTransferHelper(); 00205 ~vtkDataTransferHelper(); 00207 00209 bool LoadRequiredExtensions(vtkOpenGLExtensionManager*); 00210 00211 int CPUExtent[6]; 00212 int GPUExtent[6]; 00213 int TextureExtent[6]; 00214 00215 vtkWeakPointer<vtkRenderWindow> Context; 00216 vtkTextureObject* Texture; 00217 vtkDataArray* Array; 00218 bool ShaderSupportsTextureInt; 00219 int MinTextureDimension; 00220 00221 vtkSmartPointer<vtkPixelBufferObject> AsyncDownloadPBO; 00222 00223 vtkPixelBufferObject* GetPBO(); 00224 00225 // We try to reuse the PBO if possible. 00226 vtkSmartPointer<vtkPixelBufferObject> PBO; 00227 private: 00228 vtkDataTransferHelper(const vtkDataTransferHelper&); // Not implemented. 00229 void operator=(const vtkDataTransferHelper&); // Not implemented. 00230 //ETX 00231 }; 00232 00233 #endif