VTK  9.3.0
vtkPixelBufferObject.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
21 #ifndef vtkPixelBufferObject_h
22 #define vtkPixelBufferObject_h
23 
24 #include "vtkObject.h"
25 #include "vtkRenderingOpenGL2Module.h" // For export macro
26 #include "vtkWeakPointer.h" // needed for vtkWeakPointer.
27 
28 VTK_ABI_NAMESPACE_BEGIN
29 class vtkRenderWindow;
30 class vtkOpenGLExtensionManager;
31 
32 class VTKRENDERINGOPENGL2_EXPORT vtkPixelBufferObject : public vtkObject
33 {
34 public:
35  // Usage values.
36  enum
37  {
38  StreamDraw = 0,
47  NumberOfUsages
48  };
49 
52  void PrintSelf(ostream& os, vtkIndent indent) override;
53 
55 
62  void SetContext(vtkRenderWindow* context);
65 
67 
84  vtkGetMacro(Usage, int);
85  vtkSetMacro(Usage, int);
87 
89 
98  bool Upload1D(int type, void* data, unsigned int numtuples, int comps, vtkIdType increment)
99  {
100  unsigned int newdims[3];
101  newdims[0] = numtuples;
102  newdims[1] = 1;
103  newdims[2] = 1;
104  vtkIdType newinc[3];
105  newinc[0] = increment;
106  newinc[1] = 0;
107  newinc[2] = 0;
108  return this->Upload3D(type, data, newdims, comps, newinc, 0, nullptr);
109  }
111 
113 
121  bool Upload2D(int type, void* data, unsigned int dims[2], int comps, vtkIdType increments[2])
122  {
123  unsigned int newdims[3];
124  newdims[0] = dims[0];
125  newdims[1] = dims[1];
126  newdims[2] = 1;
127  vtkIdType newinc[3];
128  newinc[0] = increments[0];
129  newinc[1] = increments[1];
130  newinc[2] = 0;
131  return this->Upload3D(type, data, newdims, comps, newinc, 0, nullptr);
132  }
134 
143  bool Upload3D(int type, void* data, unsigned int dims[3], int comps, vtkIdType increments[3],
144  int components, int* componentList);
145 
147 
152  vtkGetMacro(Type, int);
153  vtkSetMacro(Type, int);
155 
157 
160  vtkGetMacro(Components, int);
161  vtkSetMacro(Components, int);
163 
165 
169  vtkGetMacro(Size, unsigned int);
170  vtkSetMacro(Size, unsigned int);
171  void SetSize(unsigned int nTups, int nComps);
173 
175 
178  vtkGetMacro(Handle, unsigned int);
180 
182 
186  bool Download1D(int type, void* data, unsigned int dim, int numcomps, vtkIdType increment)
187  {
188  unsigned int newdims[3];
189  newdims[0] = dim;
190  newdims[1] = 1;
191  newdims[2] = 1;
192  vtkIdType newincrements[3];
193  newincrements[0] = increment;
194  newincrements[1] = 0;
195  newincrements[2] = 0;
196  return this->Download3D(type, data, newdims, numcomps, newincrements);
197  }
199 
201 
205  bool Download2D(int type, void* data, unsigned int dims[2], int numcomps, vtkIdType increments[2])
206  {
207  unsigned int newdims[3];
208  newdims[0] = dims[0];
209  newdims[1] = dims[1];
210  newdims[2] = 1;
211  vtkIdType newincrements[3];
212  newincrements[0] = increments[0];
213  newincrements[1] = increments[1];
214  newincrements[2] = 0;
215  return this->Download3D(type, data, newdims, numcomps, newincrements);
216  }
218 
225  int type, void* data, unsigned int dims[3], int numcomps, vtkIdType increments[3]);
226 
230  void BindToPackedBuffer() { this->Bind(PACKED_BUFFER); }
231 
232  void BindToUnPackedBuffer() { this->Bind(UNPACKED_BUFFER); }
233 
237  void UnBind();
238 
243  void* MapPackedBuffer() { return this->MapBuffer(PACKED_BUFFER); }
244 
245  void* MapPackedBuffer(int type, unsigned int numtuples, int comps)
246  {
247  return this->MapBuffer(type, numtuples, comps, PACKED_BUFFER);
248  }
249 
250  void* MapPackedBuffer(unsigned int numbytes) { return this->MapBuffer(numbytes, PACKED_BUFFER); }
251 
252  void* MapUnpackedBuffer() { return this->MapBuffer(UNPACKED_BUFFER); }
253 
254  void* MapUnpackedBuffer(int type, unsigned int numtuples, int comps)
255  {
256  return this->MapBuffer(type, numtuples, comps, UNPACKED_BUFFER);
257  }
258 
259  void* MapUnpackedBuffer(unsigned int numbytes)
260  {
261  return this->MapBuffer(numbytes, UNPACKED_BUFFER);
262  }
263 
268  void UnmapUnpackedBuffer() { this->UnmapBuffer(UNPACKED_BUFFER); }
269 
270  void UnmapPackedBuffer() { this->UnmapBuffer(PACKED_BUFFER); }
271 
272  // PACKED_BUFFER for download APP<-PBO
273  // UNPACKED_BUFFER for upload APP->PBO
275  {
276  UNPACKED_BUFFER = 0,
277  PACKED_BUFFER
278  };
279 
283  void Bind(BufferType buffer);
284 
286 
292  void* MapBuffer(int type, unsigned int numtuples, int comps, BufferType mode);
293  void* MapBuffer(unsigned int numbytes, BufferType mode);
296 
302 
306  void Allocate(int vtkType, unsigned int numtuples, int comps, BufferType mode);
307 
311  void Allocate(unsigned int nbytes, BufferType mode);
312 
317 
322  static bool IsSupported(vtkRenderWindow* renWin);
323 
324 protected:
327 
333 
337  void CreateBuffer();
338 
343 
344  int Usage;
345  unsigned int BufferTarget; // GLenum
346  int Type;
348  unsigned int Size;
350  unsigned int Handle;
351 
352 private:
354  void operator=(const vtkPixelBufferObject&) = delete;
355 };
356 
357 VTK_ABI_NAMESPACE_END
358 #endif
a simple class to control print indentation
Definition: vtkIndent.h:38
abstract base class for most VTK objects
Definition: vtkObject.h:61
abstracts an OpenGL pixel buffer object.
void SetSize(unsigned int nTups, int nComps)
Get the size of the data loaded into the PBO mapped memory.
static bool IsSupported(vtkRenderWindow *renWin)
Returns if the context supports the required extensions.
void DestroyBuffer()
Destroys the pixel buffer object.
vtkRenderWindow * GetContext()
Get/Set the context.
void UnmapUnpackedBuffer()
Convenience api for unmapping buffers from app address space.
void Allocate(unsigned int nbytes, BufferType mode)
Allocate PACKED/UNPACKED memory to hold nBytes of data.
void UnBind()
Deactivate the buffer.
void Bind(BufferType buffer)
Make the buffer active.
bool Download2D(int type, void *data, unsigned int dims[2], int numcomps, vtkIdType increments[2])
Download data from pixel buffer to the 2D array.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
bool LoadRequiredExtensions(vtkRenderWindow *renWin)
Loads all required OpenGL extensions.
bool Download3D(int type, void *data, unsigned int dims[3], int numcomps, vtkIdType increments[3])
Download data from pixel buffer to the 3D array.
void * MapUnpackedBuffer(unsigned int numbytes)
void * MapBuffer(int type, unsigned int numtuples, int comps, BufferType mode)
Map the buffer to our addresspace.
void ReleaseMemory()
Release the memory allocated without destroying the PBO handle.
bool Upload1D(int type, void *data, unsigned int numtuples, int comps, vtkIdType increment)
Upload data to PBO mapped.
void BindToPackedBuffer()
Convenience methods for binding.
void * MapPackedBuffer()
Convenience api for mapping buffers to app address space.
void SetContext(vtkRenderWindow *context)
Get/Set the context.
void * MapUnpackedBuffer(int type, unsigned int numtuples, int comps)
void Allocate(int vtkType, unsigned int numtuples, int comps, BufferType mode)
Allocate PACKED/UNPACKED memory to hold numTuples*numComponents of vtkType.
void * MapBuffer(BufferType mode)
Map the buffer to our addresspace.
void * MapPackedBuffer(int type, unsigned int numtuples, int comps)
~vtkPixelBufferObject() override
void CreateBuffer()
Create the pixel buffer object.
void UnmapBuffer(BufferType mode)
Un-map the buffer from our address space, OpenGL can then use/reclaim the buffer contents.
bool Download1D(int type, void *data, unsigned int dim, int numcomps, vtkIdType increment)
Download data from pixel buffer to the 1D array.
void * MapPackedBuffer(unsigned int numbytes)
void * MapBuffer(unsigned int numbytes, BufferType mode)
Map the buffer to our addresspace.
bool Upload3D(int type, void *data, unsigned int dims[3], int comps, vtkIdType increments[3], int components, int *componentList)
Update data to PBO mapped sourcing it from a 3D array.
static vtkPixelBufferObject * New()
vtkWeakPointer< vtkRenderWindow > Context
bool Upload2D(int type, void *data, unsigned int dims[2], int comps, vtkIdType increments[2])
Update data to PBO mapped sourcing it from a 2D array.
create a window for renderers to draw into
@ mode
Definition: vtkX3D.h:247
@ type
Definition: vtkX3D.h:516
@ data
Definition: vtkX3D.h:315
int vtkIdType
Definition: vtkType.h:315