VTK  9.0.1
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 
110  void SetContext(vtkOpenGLRenderWindow*);
111  vtkOpenGLRenderWindow* GetContext();
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 
149  int GetTextureUnit();
150 
152 
157  void Bind();
159 
163  virtual void Activate();
164 
168  void Deactivate();
169 
173  virtual void ReleaseGraphicsResources(vtkWindow* win);
174 
179  bool IsBound();
180 
187  void SendParameters();
188 
190 
194  vtkSetMacro(AutoParameters, int);
195  vtkGetMacro(AutoParameters, int);
196  vtkBooleanMacro(AutoParameters, int);
198 
203  bool Create2DFromRaw(
204  unsigned int width, unsigned int height, int numComps, int dataType, void* data);
205 
211  bool CreateDepthFromRaw(
212  unsigned int width, unsigned int height, int internalFormat, int rawType, void* raw);
213 
218  bool CreateTextureBuffer(
219  unsigned int numValues, int numComps, int dataType, vtkOpenGLBufferObject* bo);
220 
226  bool CreateCubeFromRaw(
227  unsigned int width, unsigned int height, int numComps, int dataType, void* data[6]);
228 
229 // 1D textures are not supported in ES 2.0 or 3.0
230 #ifndef GL_ES_VERSION_3_0
231 
242  bool Create1D(int numComps, vtkPixelBufferObject* pbo, bool shaderSupportsTextureInt);
243 
247  bool Create1DFromRaw(unsigned int width, int numComps, int dataType, void* data);
248 #endif
249 
256  bool Create2D(unsigned int width, unsigned int height, int numComps, vtkPixelBufferObject* pbo,
257  bool shaderSupportsTextureInt);
258 
265  bool Create3D(unsigned int width, unsigned int height, unsigned int depth, int numComps,
266  vtkPixelBufferObject* pbo, bool shaderSupportsTextureInt);
267 
272  bool Create3DFromRaw(unsigned int width, unsigned int height, unsigned int depth, int numComps,
273  int dataType, void* data);
274 
281  bool AllocateProxyTexture3D(unsigned int const width, unsigned int const height,
282  unsigned int const depth, int const numComps, int const dataType);
283 
290  vtkPixelBufferObject* Download();
291  vtkPixelBufferObject* Download(unsigned int target, unsigned int level);
292 
297  bool CreateDepth(
298  unsigned int width, unsigned int height, int internalFormat, vtkPixelBufferObject* pbo);
299 
303  bool AllocateDepth(unsigned int width, unsigned int height, int internalFormat);
304 
308  bool AllocateDepthStencil(unsigned int width, unsigned int height);
309 
314  bool Allocate1D(unsigned int width, int numComps, int vtkType);
315 
320  bool Allocate2D(
321  unsigned int width, unsigned int height, int numComps, int vtkType, int level = 0);
322 
327  bool Allocate3D(
328  unsigned int width, unsigned int height, unsigned int depth, int numComps, int vtkType);
329 
331 
334  bool Create2D(unsigned int width, unsigned int height, int numComps, int vtktype, bool)
335  {
336  return this->Allocate2D(width, height, numComps, vtktype);
337  }
338  bool Create3D(
339  unsigned int width, unsigned int height, unsigned int depth, int numComps, int vtktype, bool)
340  {
341  return this->Allocate3D(width, height, depth, numComps, vtktype);
342  }
344 
348  int GetVTKDataType();
349 
351 
354  int GetDataType(int vtk_scalar_type);
355  void SetDataType(unsigned int glType);
356  int GetDefaultDataType(int vtk_scalar_type);
358 
360 
365  unsigned int GetInternalFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
366  void SetInternalFormat(unsigned int glInternalFormat);
367  unsigned int GetDefaultInternalFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
369 
371 
376  unsigned int GetFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
377  void SetFormat(unsigned int glFormat);
378  unsigned int GetDefaultFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
380 
389  void ResetFormatAndType();
390 
391  unsigned int GetMinificationFilterMode(int vtktype);
392  unsigned int GetMagnificationFilterMode(int vtktype);
393  unsigned int GetWrapSMode(int vtktype);
394  unsigned int GetWrapTMode(int vtktype);
395  unsigned int GetWrapRMode(int vtktype);
396 
398 
404  vtkSetMacro(RequireDepthBufferFloat, bool);
405  vtkGetMacro(RequireDepthBufferFloat, bool);
406  vtkGetMacro(SupportsDepthBufferFloat, bool);
408 
410 
416  vtkSetMacro(RequireTextureFloat, bool);
417  vtkGetMacro(RequireTextureFloat, bool);
418  vtkGetMacro(SupportsTextureFloat, bool);
420 
422 
428  vtkSetMacro(RequireTextureInteger, bool);
429  vtkGetMacro(RequireTextureInteger, bool);
430  vtkGetMacro(SupportsTextureInteger, bool);
432 
434 
444  vtkGetMacro(WrapS, int);
445  vtkSetMacro(WrapS, int);
447 
449 
459  vtkGetMacro(WrapT, int);
460  vtkSetMacro(WrapT, int);
462 
464 
474  vtkGetMacro(WrapR, int);
475  vtkSetMacro(WrapR, int);
477 
479 
492  vtkGetMacro(MinificationFilter, int);
493  vtkSetMacro(MinificationFilter, int);
495 
497 
504  vtkGetMacro(MagnificationFilter, int);
505  vtkSetMacro(MagnificationFilter, int);
507 
512  void SetLinearMagnification(bool val) { this->SetMagnificationFilter(val ? Linear : Nearest); }
513 
514  bool GetLinearMagnification() { return this->MagnificationFilter == Linear; }
515 
517 
522  vtkSetVector4Macro(BorderColor, float);
523  vtkGetVector4Macro(BorderColor, float);
525 
527 
531  vtkSetMacro(MinLOD, float);
532  vtkGetMacro(MinLOD, float);
534 
536 
540  vtkSetMacro(MaxLOD, float);
541  vtkGetMacro(MaxLOD, float);
543 
545 
550  vtkSetMacro(BaseLevel, int);
551  vtkGetMacro(BaseLevel, int);
553 
555 
560  vtkSetMacro(MaxLevel, int);
561  vtkGetMacro(MaxLevel, int);
563 
565 
575  vtkGetMacro(DepthTextureCompare, bool);
576  vtkSetMacro(DepthTextureCompare, bool);
578 
580 
600  vtkGetMacro(DepthTextureCompareFunction, int);
601  vtkSetMacro(DepthTextureCompareFunction, int);
603 
605 
610  vtkGetMacro(GenerateMipmap, bool);
611  vtkSetMacro(GenerateMipmap, bool);
613 
615 
620  vtkSetMacro(MaximumAnisotropicFiltering, float);
621  vtkGetMacro(MaximumAnisotropicFiltering, float);
623 
625 
634  static int GetMaximumTextureSize(vtkOpenGLRenderWindow* context);
635  static int GetMaximumTextureSize3D(vtkOpenGLRenderWindow* context);
636 
642  int GetMaximumTextureSize3D();
644 
650  static bool IsSupported(vtkOpenGLRenderWindow*, bool /* requireTexFloat */,
651  bool /* requireDepthFloat */, bool /* requireTexInt */)
652  {
653  return true;
654  }
655 
659  static bool IsSupported(vtkOpenGLRenderWindow*) { return true; }
660 
662 
667  void CopyToFrameBuffer(vtkShaderProgram* program, vtkOpenGLVertexArrayObject* vao);
668  // part of a texture to part of a viewport, scaling as needed
669  void CopyToFrameBuffer(int srcXmin, int srcYmin, int srcXmax, int srcYmax, int dstXmin,
670  int dstYmin, int dstXmax, int dstYmax, int dstSizeX, int dstSizeY, vtkShaderProgram* program,
672  // copy part of a texure to part of a viewport, no scalaing
673  void CopyToFrameBuffer(int srcXmin, int srcYmin, int srcXmax, int srcYmax, int dstXmin,
674  int dstYmin, int dstSizeX, int dstSizeY, vtkShaderProgram* program,
676  // copy a texture to a quad using the provided tcoords and verts
677  void CopyToFrameBuffer(
678  float* tcoords, float* verts, vtkShaderProgram* program, vtkOpenGLVertexArrayObject* vao);
680 
692  void CopyFromFrameBuffer(
693  int srcXmin, int srcYmin, int dstXmin, int dstYmin, int width, int height);
694 
707  void GetShiftAndScale(float& shift, float& scale);
708 
709  // resizes an existing texture, any existing
710  // data values are lost
711  void Resize(unsigned int width, unsigned int height);
712 
714 
720  vtkGetMacro(UseSRGBColorSpace, bool);
721  vtkSetMacro(UseSRGBColorSpace, bool);
722  vtkBooleanMacro(UseSRGBColorSpace, bool);
724 
733  void AssignToExistingTexture(unsigned int handle, unsigned int target);
734 
735 protected:
737  ~vtkTextureObject() override;
738 
740 
744  void CreateTexture();
745 
749  void DestroyTexture();
750 
752  unsigned int Width;
753  unsigned int Height;
754  unsigned int Depth;
755  unsigned int Samples;
757 
759 
760  unsigned int Target; // GLenum
761  unsigned int Format; // GLenum
762  unsigned int InternalFormat; // GLenum
763  unsigned int Type; // GLenum
765 
767  unsigned int Handle;
768  bool OwnHandle;
775 
776  int WrapS;
777  int WrapT;
778  int WrapR;
781 
782  float MinLOD;
783  float MaxLOD;
785  int MaxLevel;
786  float BorderColor[4];
787 
790 
792 
795 
796  // used for copying to framebuffer
798 
799  // for texturebuffers we hold on to the Buffer
801 
802 private:
803  vtkTextureObject(const vtkTextureObject&) = delete;
804  void operator=(const vtkTextureObject&) = delete;
805 };
806 
807 #endif
OpenGL rendering window.
boost::graph_traits< vtkGraph * >::vertex_descriptor target(boost::graph_traits< vtkGraph *>::edge_descriptor e, vtkGraph *)
abstract base class for most VTK objects
Definition: vtkObject.h:62
vtkOpenGLHelper * ShaderProgram
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
unsigned int Format
unsigned int Handle
unsigned int GetTuples()
Get the texture dimensions.
record modification and/or execution time
Definition: vtkTimeStamp.h:32
unsigned int InternalFormat
unsigned int Samples
unsigned int Width
vtkTimeStamp SendParametersTime
window superclass for vtkRenderWindow
Definition: vtkWindow.h:37
unsigned int Target
a simple class to control print indentation
Definition: vtkIndent.h:33
The VertexArrayObject class uses, or emulates, vertex array objects.
vtkWeakPointer< vtkOpenGLRenderWindow > Context
void SetLinearMagnification(bool val)
Tells if the magnification mode is linear (true) or nearest (false).
unsigned int Depth
abstracts an OpenGL pixel buffer object.
bool Create2D(unsigned int width, unsigned int height, int numComps, int vtktype, bool)
Create texture without uploading any data.
vtkOpenGLBufferObject * BufferObject
static bool IsSupported(vtkOpenGLRenderWindow *, bool, bool, bool)
Returns if the context supports the required extensions.
abstracts an OpenGL texture object.
float MaximumAnisotropicFiltering
OpenGL buffer object.
static bool IsSupported(vtkOpenGLRenderWindow *)
Check for feature support, without any optional features.
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
vtkGenericOpenGLResourceFreeCallback * ResourceCallback
bool Create3D(unsigned int width, unsigned int height, unsigned int depth, int numComps, int vtktype, bool)
Create texture without uploading any data.
unsigned int Height
The ShaderProgram uses one or more Shader objects.