00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00029 #ifndef __vtkPixelBufferObject_h
00030 #define __vtkPixelBufferObject_h
00031
00032 #include "vtkObject.h"
00033 #include "vtkWeakPointer.h"
00034
00035 class vtkRenderWindow;
00036 class vtkOpenGLExtensionManager;
00037
00038 class VTK_RENDERING_EXPORT vtkPixelBufferObject : public vtkObject
00039 {
00040 public:
00041 static vtkPixelBufferObject* New();
00042 vtkTypeRevisionMacro(vtkPixelBufferObject, vtkObject);
00043 void PrintSelf(ostream& os, vtkIndent indent);
00044
00046
00050 void SetContext(vtkRenderWindow* context);
00051 vtkRenderWindow* GetContext();
00053
00055
00061 bool Upload1D(int type, void* data,
00062 unsigned int numtuples, int comps, vtkIdType increment)
00063 {
00064 unsigned int newdims[3];
00065 newdims[0] = numtuples;
00066 newdims[1] = 1;
00067 newdims[2] = 1;
00068 vtkIdType newinc[3];
00069 newinc[0] = increment;
00070 newinc[1] = 0;
00071 newinc[2] = 0;
00072 return this->Upload3D(type, data, newdims, comps, newinc,0,0);
00073 }
00075
00077
00082 bool Upload2D(int type, void* data,
00083 unsigned int dims[2],
00084 int comps,
00085 vtkIdType increments[2])
00086 {
00087 unsigned int newdims[3];
00088 newdims[0] = dims[0];
00089 newdims[1] = dims[1];
00090 newdims[2] = 1;
00091 vtkIdType newinc[3];
00092 newinc[0] = increments[0];
00093 newinc[1] = increments[1];
00094 newinc[2] = 0;
00095 return this->Upload3D(type, data, newdims, comps, newinc,0,0);
00096 }
00098
00100
00105 bool Upload3D(int type, void* data,
00106 unsigned int dims[3], int comps,
00107 vtkIdType increments[3],
00108 int components,
00109 int *componentList);
00111
00113
00116 vtkGetMacro(Type, int);
00118
00120
00122 vtkGetMacro(Size, unsigned int);
00124
00126
00127 vtkGetMacro(Handle, unsigned int);
00129
00131
00133 bool Download1D(
00134 int type, void* data,
00135 unsigned int dim,
00136 int numcomps, vtkIdType increment)
00137 {
00138 unsigned int newdims[3];
00139 newdims[0] = dim;
00140 newdims[1] = 1;
00141 newdims[2] = 1;
00142 vtkIdType newincrements[3];
00143 newincrements[0] = increment;
00144 newincrements[1] = 0;
00145 newincrements[2] = 0;
00146 return this->Download3D(type, data, newdims, numcomps, newincrements);
00147 }
00149
00151
00153 bool Download2D(
00154 int type, void* data,
00155 unsigned int dims[2],
00156 int numcomps, vtkIdType increments[2])
00157 {
00158 unsigned int newdims[3];
00159 newdims[0] = dims[0];
00160 newdims[1] = dims[1];
00161 newdims[2] = 1;
00162 vtkIdType newincrements[3];
00163 newincrements[0] = increments[0];
00164 newincrements[1] = increments[1];
00165 newincrements[2] = 0;
00166 return this->Download3D(type, data, newdims, numcomps, newincrements);
00167 }
00169
00171
00173 bool Download3D(int type, void* data,
00174 unsigned int dims[3],
00175 int numcomps, vtkIdType increments[3]);
00177
00179
00180 void BindToPackedBuffer()
00181 { this->Bind(PACKED_BUFFER); }
00183
00184 void BindToUnPackedBuffer()
00185 { this->Bind(UNPACKED_BUFFER); }
00186
00188 void UnBind();
00189
00190
00191
00192
00193 enum BufferType{
00194 PACKED_BUFFER,
00195 UNPACKED_BUFFER
00196 };
00197
00199 void Bind(BufferType buffer);
00200
00202 void ReleaseMemory();
00203
00205 static bool IsSupported(vtkRenderWindow* renWin);
00206
00207
00208
00209 protected:
00210 vtkPixelBufferObject();
00211 ~vtkPixelBufferObject();
00212
00215 bool LoadRequiredExtensions(vtkOpenGLExtensionManager* mgr);
00216
00218 void CreateBuffer();
00219
00221 void DestroyBuffer();
00222
00223 int BufferTarget;
00224 int Type;
00225 unsigned int Size;
00226 vtkWeakPointer<vtkRenderWindow> Context;
00227 unsigned int Handle;
00228 private:
00229 vtkPixelBufferObject(const vtkPixelBufferObject&);
00230 void operator=(const vtkPixelBufferObject&);
00231
00232 };
00233
00234 #endif
00235
00236