VTK  9.1.0
vtkTextureObject.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkTextureObject.h
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 =========================================================================*/
24 #ifndef vtkTextureObject_h
25 #define vtkTextureObject_h
26 
27 #include "vtkObject.h"
28 #include "vtkRenderingOpenGL2Module.h" // For export macro
29 #include "vtkWeakPointer.h" // for render context
30 
32 class vtkOpenGLHelper;
36 class vtkShaderProgram;
37 class vtkWindow;
39 
40 class VTKRENDERINGOPENGL2_EXPORT vtkTextureObject : public vtkObject
41 {
42 public:
43  // DepthTextureCompareFunction values.
44  enum
45  {
46  Lequal = 0, // r=R<=Dt ? 1.0 : 0.0
47  Gequal, // r=R>=Dt ? 1.0 : 0.0
48  Less, // r=R<D_t ? 1.0 : 0.0
49  Greater, // r=R>Dt ? 1.0 : 0.0
50  Equal, // r=R==Dt ? 1.0 : 0.0
51  NotEqual, // r=R!=Dt ? 1.0 : 0.0
52  AlwaysTrue, // r=1.0 // WARNING "Always" is macro defined in X11/X.h...
53  Never, // r=0.0
54  NumberOfDepthTextureCompareFunctions
55  };
56 
57 // ClampToBorder is not supported in ES 2.0
58 // Wrap values.
59 #ifndef GL_ES_VERSION_3_0
60  enum { ClampToEdge = 0, Repeat, MirroredRepeat, ClampToBorder, NumberOfWrapModes };
61 #else
62  enum
63  {
64  ClampToEdge = 0,
65  Repeat,
66  MirroredRepeat,
67  NumberOfWrapModes
68  };
69 #endif
70 
71  // MinificationFilter values.
72  enum
73  {
74  Nearest = 0,
80  NumberOfMinificationModes
81  };
82 
83  // depth/color format
84  enum
85  {
86  Native = 0, // will try to match with the depth buffer format.
93  NumberOfDepthFormats
94  };
95 
96  static vtkTextureObject* New();
97  vtkTypeMacro(vtkTextureObject, vtkObject);
98  void PrintSelf(ostream& os, vtkIndent indent) override;
99 
101 
113 
115 
119  vtkGetMacro(Width, unsigned int);
120  vtkGetMacro(Height, unsigned int);
121  vtkGetMacro(Depth, unsigned int);
122  vtkGetMacro(Samples, unsigned int);
123  vtkGetMacro(Components, int);
124  unsigned int GetTuples() { return this->Width * this->Height * this->Depth; }
126 
127  vtkGetMacro(NumberOfDimensions, int);
128 
129  // for MSAA textures set the number of samples
130  vtkSetMacro(Samples, unsigned int);
131 
133 
136  vtkGetMacro(Target, unsigned int);
138 
140 
143  vtkGetMacro(Handle, unsigned int);
145 
150 
152 
157  void Bind();
159 
163  virtual void Activate();
164 
168  void Deactivate();
169 
174 
179  bool IsBound();
180 
188 
190 
194  vtkSetMacro(AutoParameters, int);
195  vtkGetMacro(AutoParameters, int);
196  vtkBooleanMacro(AutoParameters, int);
198 
204  unsigned int width, unsigned int height, int numComps, int dataType, void* data);
205 
212  unsigned int width, unsigned int height, int internalFormat, int rawType, void* raw);
213 
219  unsigned int numValues, int numComps, int dataType, vtkOpenGLBufferObject* bo);
220 
227  unsigned int width, unsigned int height, int numComps, int dataType, void* data[6]);
228 
239  bool Create1D(int numComps, vtkPixelBufferObject* pbo, bool shaderSupportsTextureInt);
240 
244  bool Create1DFromRaw(unsigned int width, int numComps, int dataType, void* data);
245 
252  bool Create2D(unsigned int width, unsigned int height, int numComps, vtkPixelBufferObject* pbo,
253  bool shaderSupportsTextureInt);
254 
261  bool Create3D(unsigned int width, unsigned int height, unsigned int depth, int numComps,
262  vtkPixelBufferObject* pbo, bool shaderSupportsTextureInt);
263 
268  bool Create3DFromRaw(unsigned int width, unsigned int height, unsigned int depth, int numComps,
269  int dataType, void* data);
270 
277  bool AllocateProxyTexture3D(unsigned int const width, unsigned int const height,
278  unsigned int const depth, int const numComps, int const dataType);
279 
287  vtkPixelBufferObject* Download(unsigned int target, unsigned int level);
288 
294  unsigned int width, unsigned int height, int internalFormat, vtkPixelBufferObject* pbo);
295 
299  bool AllocateDepth(unsigned int width, unsigned int height, int internalFormat);
300 
304  bool AllocateDepthStencil(unsigned int width, unsigned int height);
305 
310  bool Allocate1D(unsigned int width, int numComps, int vtkType);
311 
317  unsigned int width, unsigned int height, int numComps, int vtkType, int level = 0);
318 
324  unsigned int width, unsigned int height, unsigned int depth, int numComps, int vtkType);
325 
327 
330  bool Create2D(unsigned int width, unsigned int height, int numComps, int vtktype, bool)
331  {
332  return this->Allocate2D(width, height, numComps, vtktype);
333  }
334  bool Create3D(
335  unsigned int width, unsigned int height, unsigned int depth, int numComps, int vtktype, bool)
336  {
337  return this->Allocate3D(width, height, depth, numComps, vtktype);
338  }
340 
345 
347 
350  int GetDataType(int vtk_scalar_type);
351  void SetDataType(unsigned int glType);
352  int GetDefaultDataType(int vtk_scalar_type);
354 
356 
361  unsigned int GetInternalFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
362  void SetInternalFormat(unsigned int glInternalFormat);
363  unsigned int GetDefaultInternalFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
365 
367 
372  unsigned int GetFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
373  void SetFormat(unsigned int glFormat);
374  unsigned int GetDefaultFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
376 
386 
387  unsigned int GetMinificationFilterMode(int vtktype);
388  unsigned int GetMagnificationFilterMode(int vtktype);
389  unsigned int GetWrapSMode(int vtktype);
390  unsigned int GetWrapTMode(int vtktype);
391  unsigned int GetWrapRMode(int vtktype);
392 
394 
400  vtkSetMacro(RequireDepthBufferFloat, bool);
401  vtkGetMacro(RequireDepthBufferFloat, bool);
402  vtkGetMacro(SupportsDepthBufferFloat, bool);
404 
406 
412  vtkSetMacro(RequireTextureFloat, bool);
413  vtkGetMacro(RequireTextureFloat, bool);
414  vtkGetMacro(SupportsTextureFloat, bool);
416 
418 
424  vtkSetMacro(RequireTextureInteger, bool);
425  vtkGetMacro(RequireTextureInteger, bool);
426  vtkGetMacro(SupportsTextureInteger, bool);
428 
430 
440  vtkGetMacro(WrapS, int);
441  vtkSetMacro(WrapS, int);
443 
445 
455  vtkGetMacro(WrapT, int);
456  vtkSetMacro(WrapT, int);
458 
460 
470  vtkGetMacro(WrapR, int);
471  vtkSetMacro(WrapR, int);
473 
475 
488  vtkGetMacro(MinificationFilter, int);
489  vtkSetMacro(MinificationFilter, int);
491 
493 
500  vtkGetMacro(MagnificationFilter, int);
501  vtkSetMacro(MagnificationFilter, int);
503 
508  void SetLinearMagnification(bool val) { this->SetMagnificationFilter(val ? Linear : Nearest); }
509 
510  bool GetLinearMagnification() { return this->MagnificationFilter == Linear; }
511 
513 
518  vtkSetVector4Macro(BorderColor, float);
519  vtkGetVector4Macro(BorderColor, float);
521 
523 
527  vtkSetMacro(MinLOD, float);
528  vtkGetMacro(MinLOD, float);
530 
532 
536  vtkSetMacro(MaxLOD, float);
537  vtkGetMacro(MaxLOD, float);
539 
541 
546  vtkSetMacro(BaseLevel, int);
547  vtkGetMacro(BaseLevel, int);
549 
551 
556  vtkSetMacro(MaxLevel, int);
557  vtkGetMacro(MaxLevel, int);
559 
561 
571  vtkGetMacro(DepthTextureCompare, bool);
572  vtkSetMacro(DepthTextureCompare, bool);
574 
576 
596  vtkGetMacro(DepthTextureCompareFunction, int);
597  vtkSetMacro(DepthTextureCompareFunction, int);
599 
601 
606  vtkGetMacro(GenerateMipmap, bool);
607  vtkSetMacro(GenerateMipmap, bool);
609 
611 
616  vtkSetMacro(MaximumAnisotropicFiltering, float);
617  vtkGetMacro(MaximumAnisotropicFiltering, float);
619 
621 
632 
640 
646  static bool IsSupported(vtkOpenGLRenderWindow*, bool /* requireTexFloat */,
647  bool /* requireDepthFloat */, bool /* requireTexInt */)
648  {
649  return true;
650  }
651 
655  static bool IsSupported(vtkOpenGLRenderWindow*) { return true; }
656 
658 
664  // part of a texture to part of a viewport, scaling as needed
665  void CopyToFrameBuffer(int srcXmin, int srcYmin, int srcXmax, int srcYmax, int dstXmin,
666  int dstYmin, int dstXmax, int dstYmax, int dstSizeX, int dstSizeY, vtkShaderProgram* program,
668  // copy part of a texure to part of a viewport, no scalaing
669  void CopyToFrameBuffer(int srcXmin, int srcYmin, int srcXmax, int srcYmax, int dstXmin,
670  int dstYmin, int dstSizeX, int dstSizeY, vtkShaderProgram* program,
672  // copy a texture to a quad using the provided tcoords and verts
674  float* tcoords, float* verts, vtkShaderProgram* program, vtkOpenGLVertexArrayObject* vao);
676 
689  int srcXmin, int srcYmin, int dstXmin, int dstYmin, int width, int height);
690 
703  void GetShiftAndScale(float& shift, float& scale);
704 
705  // resizes an existing texture, any existing
706  // data values are lost
707  void Resize(unsigned int width, unsigned int height);
708 
710 
716  vtkGetMacro(UseSRGBColorSpace, bool);
717  vtkSetMacro(UseSRGBColorSpace, bool);
718  vtkBooleanMacro(UseSRGBColorSpace, bool);
720 
729  void AssignToExistingTexture(unsigned int handle, unsigned int target);
730 
731 protected:
733  ~vtkTextureObject() override;
734 
736 
741 
746 
748  unsigned int Width;
749  unsigned int Height;
750  unsigned int Depth;
751  unsigned int Samples;
753 
755 
756  unsigned int Target; // GLenum
757  unsigned int Format; // GLenum
758  unsigned int InternalFormat; // GLenum
759  unsigned int Type; // GLenum
761 
763  unsigned int Handle;
764  bool OwnHandle;
771 
772  int WrapS;
773  int WrapT;
774  int WrapR;
777 
778  float MinLOD;
779  float MaxLOD;
781  int MaxLevel;
782  float BorderColor[4];
783 
786 
788 
791 
792  // used for copying to framebuffer
794 
795  // for texturebuffers we hold on to the Buffer
797 
798 private:
799  vtkTextureObject(const vtkTextureObject&) = delete;
800  void operator=(const vtkTextureObject&) = delete;
801 };
802 
803 #endif
a simple class to control print indentation
Definition: vtkIndent.h:34
abstract base class for most VTK objects
Definition: vtkObject.h:63
OpenGL buffer object.
OpenGL rendering window.
The VertexArrayObject class uses, or emulates, vertex array objects.
abstracts an OpenGL pixel buffer object.
The ShaderProgram uses one or more Shader objects.
abstracts an OpenGL texture object.
unsigned int Target
unsigned int InternalFormat
bool AllocateDepth(unsigned int width, unsigned int height, int internalFormat)
Create a 2D depth texture but does not initialize its values.
static bool IsSupported(vtkOpenGLRenderWindow *, bool, bool, bool)
Returns if the context supports the required extensions.
void SetContext(vtkOpenGLRenderWindow *)
Get/Set the context.
bool AllocateDepthStencil(unsigned int width, unsigned int height)
Create a 2D septh stencil texture but does not initialize its values.
float MaximumAnisotropicFiltering
bool Create2DFromRaw(unsigned int width, unsigned int height, int numComps, int dataType, void *data)
Create a 2D texture from client memory numComps must be in [1-4].
unsigned int Depth
vtkOpenGLHelper * ShaderProgram
bool IsBound()
Tells if the texture object is bound to the active texture image unit.
void SetInternalFormat(unsigned int glInternalFormat)
Get/Set internal format (OpenGL internal format) that should be used.
int GetDefaultDataType(int vtk_scalar_type)
Get the data type for the texture as GLenum type.
void Resize(unsigned int width, unsigned int height)
bool Allocate1D(unsigned int width, int numComps, int vtkType)
Create a 1D color texture but does not initialize its values.
virtual void Activate()
Activate and Bind the texture.
unsigned int GetWrapTMode(int vtktype)
bool Create1D(int numComps, vtkPixelBufferObject *pbo, bool shaderSupportsTextureInt)
Create a 1D texture using the PBO.
void CopyToFrameBuffer(vtkShaderProgram *program, vtkOpenGLVertexArrayObject *vao)
Copy the texture (src) in the current framebuffer.
void CopyToFrameBuffer(int srcXmin, int srcYmin, int srcXmax, int srcYmax, int dstXmin, int dstYmin, int dstXmax, int dstYmax, int dstSizeX, int dstSizeY, vtkShaderProgram *program, vtkOpenGLVertexArrayObject *vao)
Copy the texture (src) in the current framebuffer.
int GetVTKDataType()
Get the data type for the texture as a vtk type int i.e.
unsigned int Handle
void GetShiftAndScale(float &shift, float &scale)
Get the shift and scale required in the shader to return the texture values to their original range.
unsigned int GetFormat(int vtktype, int numComps, bool shaderSupportsTextureInt)
Get/Set format (OpenGL internal format) that should be used.
void DestroyTexture()
Destroy the texture.
void SetLinearMagnification(bool val)
Tells if the magnification mode is linear (true) or nearest (false).
bool AllocateProxyTexture3D(unsigned int const width, unsigned int const height, unsigned int const depth, int const numComps, int const dataType)
Create a 3D texture using the GL_PROXY_TEXTURE_3D target.
vtkTimeStamp SendParametersTime
unsigned int GetMinificationFilterMode(int vtktype)
int GetTextureUnit()
Return the texture unit used for this texture.
void ResetFormatAndType()
Reset format, internal format, and type of the texture.
bool CreateTextureBuffer(unsigned int numValues, int numComps, int dataType, vtkOpenGLBufferObject *bo)
Create a texture buffer basically a 1D texture that can be very large for passing data into the fragm...
static vtkTextureObject * New()
vtkGenericOpenGLResourceFreeCallback * ResourceCallback
void AssignToExistingTexture(unsigned int handle, unsigned int target)
Assign the TextureObject to a externally provided Handle and Target.
void CreateTexture()
Creates a texture handle if not already created.
static int GetMaximumTextureSize(vtkOpenGLRenderWindow *context)
Query and return maximum texture size (dimension) supported by the OpenGL driver for a particular con...
vtkOpenGLBufferObject * BufferObject
unsigned int GetWrapRMode(int vtktype)
bool Create3D(unsigned int width, unsigned int height, unsigned int depth, int numComps, int vtktype, bool)
Create texture without uploading any data.
unsigned int Format
bool CreateCubeFromRaw(unsigned int width, unsigned int height, int numComps, int dataType, void *data[6])
Create a cube texture from 6 buffers from client memory.
unsigned int GetWrapSMode(int vtktype)
void CopyToFrameBuffer(float *tcoords, float *verts, vtkShaderProgram *program, vtkOpenGLVertexArrayObject *vao)
Copy the texture (src) in the current framebuffer.
bool Create3D(unsigned int width, unsigned int height, unsigned int depth, int numComps, vtkPixelBufferObject *pbo, bool shaderSupportsTextureInt)
Create a 3D texture using the PBO.
bool Create2D(unsigned int width, unsigned int height, int numComps, int vtktype, bool)
Create texture without uploading any data.
virtual void ReleaseGraphicsResources(vtkWindow *win)
Deactivate and UnBind the texture.
void SetDataType(unsigned int glType)
Get the data type for the texture as GLenum type.
void Deactivate()
Deactivate and UnBind the texture.
vtkWeakPointer< vtkOpenGLRenderWindow > Context
bool CreateDepthFromRaw(unsigned int width, unsigned int height, int internalFormat, int rawType, void *raw)
Create a 2D depth texture using a raw pointer.
void SetFormat(unsigned int glFormat)
Get/Set format (OpenGL internal format) that should be used.
~vtkTextureObject() override
unsigned int GetInternalFormat(int vtktype, int numComps, bool shaderSupportsTextureInt)
Get/Set internal format (OpenGL internal format) that should be used.
static bool IsSupported(vtkOpenGLRenderWindow *)
Check for feature support, without any optional features.
unsigned int GetTuples()
Get the texture dimensions.
unsigned int Width
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
unsigned int GetMagnificationFilterMode(int vtktype)
bool Create3DFromRaw(unsigned int width, unsigned int height, unsigned int depth, int numComps, int dataType, void *data)
Create a 3D texture from client memory numComps must be in [1-4].
bool Create2D(unsigned int width, unsigned int height, int numComps, vtkPixelBufferObject *pbo, bool shaderSupportsTextureInt)
Create a 2D texture using the PBO.
int GetDataType(int vtk_scalar_type)
Get the data type for the texture as GLenum type.
bool Allocate3D(unsigned int width, unsigned int height, unsigned int depth, int numComps, int vtkType)
Create a 3D color texture but does not initialize its values.
unsigned int GetDefaultFormat(int vtktype, int numComps, bool shaderSupportsTextureInt)
Get/Set format (OpenGL internal format) that should be used.
static int GetMaximumTextureSize3D(vtkOpenGLRenderWindow *context)
Query and return maximum texture size (dimension) supported by the OpenGL driver for a particular con...
bool CreateDepth(unsigned int width, unsigned int height, int internalFormat, vtkPixelBufferObject *pbo)
Create a 2D depth texture using a PBO.
bool Allocate2D(unsigned int width, unsigned int height, int numComps, int vtkType, int level=0)
Create a 2D color texture but does not initialize its values.
vtkPixelBufferObject * Download(unsigned int target, unsigned int level)
unsigned int Height
void CopyFromFrameBuffer(int srcXmin, int srcYmin, int dstXmin, int dstYmin, int width, int height)
Copy a sub-part of a logical buffer of the framebuffer (color or depth) to the texture object.
vtkOpenGLRenderWindow * GetContext()
Get/Set the context.
unsigned int Samples
int GetMaximumTextureSize3D()
Overload which uses the internal context to query the maximum 3D texture size.
unsigned int GetDefaultInternalFormat(int vtktype, int numComps, bool shaderSupportsTextureInt)
Get/Set internal format (OpenGL internal format) that should be used.
void SendParameters()
Send all the texture object parameters to the hardware if not done yet.
void Bind()
Bind the texture, must have been created using Create().
bool Create1DFromRaw(unsigned int width, int numComps, int dataType, void *data)
Create 1D texture from client memory.
void CopyToFrameBuffer(int srcXmin, int srcYmin, int srcXmax, int srcYmax, int dstXmin, int dstYmin, int dstSizeX, int dstSizeY, vtkShaderProgram *program, vtkOpenGLVertexArrayObject *vao)
Copy the texture (src) in the current framebuffer.
vtkPixelBufferObject * Download()
This is used to download raw data from the texture into a pixel buffer.
record modification and/or execution time
Definition: vtkTimeStamp.h:33
window superclass for vtkRenderWindow
Definition: vtkWindow.h:39
@ level
Definition: vtkX3D.h:401
@ scale
Definition: vtkX3D.h:235
@ height
Definition: vtkX3D.h:260
@ data
Definition: vtkX3D.h:321
boost::graph_traits< vtkGraph * >::vertex_descriptor target(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)