VTK  9.2.6
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=========================================================================*/
26
27#ifndef vtkTextureObject_h
28#define vtkTextureObject_h
29
30#include "vtkObject.h"
31#include "vtkRenderingOpenGL2Module.h" // For export macro
32#include "vtkWeakPointer.h" // for render context
33
35class vtkOpenGLHelper;
40class vtkWindow;
42
43class VTKRENDERINGOPENGL2_EXPORT vtkTextureObject : public vtkObject
44{
45public:
46 // DepthTextureCompareFunction values.
47 enum
48 {
49 Lequal = 0, // r=R<=Dt ? 1.0 : 0.0
50 Gequal, // r=R>=Dt ? 1.0 : 0.0
51 Less, // r=R<D_t ? 1.0 : 0.0
52 Greater, // r=R>Dt ? 1.0 : 0.0
53 Equal, // r=R==Dt ? 1.0 : 0.0
54 NotEqual, // r=R!=Dt ? 1.0 : 0.0
55 AlwaysTrue, // r=1.0 // WARNING "Always" is macro defined in X11/X.h...
56 Never, // r=0.0
58 };
59
60// ClampToBorder is not supported in ES 2.0
61// Wrap values.
62#ifndef GL_ES_VERSION_3_0
64#else
65 enum
66 {
67 ClampToEdge = 0,
68 Repeat,
69 MirroredRepeat,
70 NumberOfWrapModes
71 };
72#endif
73
74 // MinificationFilter values.
75 enum
76 {
84 };
85
86 // depth/color format
87 enum
88 {
89 Native = 0, // will try to match with the depth buffer format.
97 };
98
101 void PrintSelf(ostream& os, vtkIndent indent) override;
102
104
116
118
122 vtkGetMacro(Width, unsigned int);
123 vtkGetMacro(Height, unsigned int);
124 vtkGetMacro(Depth, unsigned int);
125 vtkGetMacro(Samples, unsigned int);
126 vtkGetMacro(Components, int);
127 unsigned int GetTuples() { return this->Width * this->Height * this->Depth; }
129
130 vtkGetMacro(NumberOfDimensions, int);
131
132 // for MSAA textures set the number of samples
133 vtkSetMacro(Samples, unsigned int);
134
136
139 vtkGetMacro(Target, unsigned int);
141
143
146 vtkGetMacro(Handle, unsigned int);
148
153
155
160 void Bind();
162
166 virtual void Activate();
167
172
177
182 bool IsBound();
183
191
193
197 vtkSetMacro(AutoParameters, int);
198 vtkGetMacro(AutoParameters, int);
199 vtkBooleanMacro(AutoParameters, int);
201
207 unsigned int width, unsigned int height, int numComps, int dataType, void* data);
208
215 unsigned int width, unsigned int height, int internalFormat, int rawType, void* raw);
216
222 unsigned int numValues, int numComps, int dataType, vtkOpenGLBufferObject* bo);
223
230 unsigned int width, unsigned int height, int numComps, int dataType, void* data[6]);
231
242 bool Create1D(int numComps, vtkPixelBufferObject* pbo, bool shaderSupportsTextureInt);
243
247 bool Create1DFromRaw(unsigned int width, int numComps, int dataType, void* data);
248
255 bool Create2D(unsigned int width, unsigned int height, int numComps, vtkPixelBufferObject* pbo,
256 bool shaderSupportsTextureInt);
257
264 bool Create3D(unsigned int width, unsigned int height, unsigned int depth, int numComps,
265 vtkPixelBufferObject* pbo, bool shaderSupportsTextureInt);
266
271 bool Create3DFromRaw(unsigned int width, unsigned int height, unsigned int depth, int numComps,
272 int dataType, void* data);
273
280 bool AllocateProxyTexture3D(unsigned int const width, unsigned int const height,
281 unsigned int const depth, int const numComps, int const dataType);
282
290 vtkPixelBufferObject* Download(unsigned int target, unsigned int level);
291
297 unsigned int width, unsigned int height, int internalFormat, vtkPixelBufferObject* pbo);
298
302 bool AllocateDepth(unsigned int width, unsigned int height, int internalFormat);
303
307 bool AllocateDepthStencil(unsigned int width, unsigned int height);
308
313 bool Allocate1D(unsigned int width, int numComps, int vtkType);
314
320 unsigned int width, unsigned int height, int numComps, int vtkType, int level = 0);
321
327 unsigned int width, unsigned int height, unsigned int depth, int numComps, int vtkType);
328
330
333 bool Create2D(unsigned int width, unsigned int height, int numComps, int vtktype, bool)
334 {
335 return this->Allocate2D(width, height, numComps, vtktype);
336 }
338 unsigned int width, unsigned int height, unsigned int depth, int numComps, int vtktype, bool)
339 {
340 return this->Allocate3D(width, height, depth, numComps, vtktype);
341 }
342
343
348
350
353 int GetDataType(int vtk_scalar_type);
354 void SetDataType(unsigned int glType);
355 int GetDefaultDataType(int vtk_scalar_type);
357
359
364 unsigned int GetInternalFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
365 void SetInternalFormat(unsigned int glInternalFormat);
366 unsigned int GetDefaultInternalFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
368
370
375 unsigned int GetFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
376 void SetFormat(unsigned int glFormat);
377 unsigned int GetDefaultFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
379
389
390 unsigned int GetMinificationFilterMode(int vtktype);
391 unsigned int GetMagnificationFilterMode(int vtktype);
392 unsigned int GetWrapSMode(int vtktype);
393 unsigned int GetWrapTMode(int vtktype);
394 unsigned int GetWrapRMode(int vtktype);
395
397
403 vtkSetMacro(RequireDepthBufferFloat, bool);
404 vtkGetMacro(RequireDepthBufferFloat, bool);
405 vtkGetMacro(SupportsDepthBufferFloat, bool);
407
409
415 vtkSetMacro(RequireTextureFloat, bool);
416 vtkGetMacro(RequireTextureFloat, bool);
417 vtkGetMacro(SupportsTextureFloat, bool);
419
421
427 vtkSetMacro(RequireTextureInteger, bool);
428 vtkGetMacro(RequireTextureInteger, bool);
429 vtkGetMacro(SupportsTextureInteger, bool);
431
433
443 vtkGetMacro(WrapS, int);
444 vtkSetMacro(WrapS, int);
446
448
458 vtkGetMacro(WrapT, int);
459 vtkSetMacro(WrapT, int);
461
463
473 vtkGetMacro(WrapR, int);
474 vtkSetMacro(WrapR, int);
476
478
491 vtkGetMacro(MinificationFilter, int);
492 vtkSetMacro(MinificationFilter, int);
494
496
503 vtkGetMacro(MagnificationFilter, int);
504 vtkSetMacro(MagnificationFilter, int);
506
512
514
516
521 vtkSetVector4Macro(BorderColor, float);
522 vtkGetVector4Macro(BorderColor, float);
524
526
530 vtkSetMacro(MinLOD, float);
531 vtkGetMacro(MinLOD, float);
533
535
539 vtkSetMacro(MaxLOD, float);
540 vtkGetMacro(MaxLOD, float);
542
544
549 vtkSetMacro(BaseLevel, int);
550 vtkGetMacro(BaseLevel, int);
552
554
559 vtkSetMacro(MaxLevel, int);
560 vtkGetMacro(MaxLevel, int);
562
564
574 vtkGetMacro(DepthTextureCompare, bool);
575 vtkSetMacro(DepthTextureCompare, bool);
577
579
602
604
609 vtkGetMacro(GenerateMipmap, bool);
610 vtkSetMacro(GenerateMipmap, bool);
612
614
619 vtkSetMacro(MaximumAnisotropicFiltering, float);
620 vtkGetMacro(MaximumAnisotropicFiltering, float);
622
624
635
643
649 static bool IsSupported(vtkOpenGLRenderWindow*, bool /* requireTexFloat */,
650 bool /* requireDepthFloat */, bool /* requireTexInt */)
651 {
652 return true;
653 }
654
658 static bool IsSupported(vtkOpenGLRenderWindow*) { return true; }
659
661
667 // part of a texture to part of a viewport, scaling as needed
668 void CopyToFrameBuffer(int srcXmin, int srcYmin, int srcXmax, int srcYmax, int dstXmin,
669 int dstYmin, int dstXmax, int dstYmax, int dstSizeX, int dstSizeY, vtkShaderProgram* program,
671 // copy part of a texture to part of a viewport, no scalaing
672 void CopyToFrameBuffer(int srcXmin, int srcYmin, int srcXmax, int srcYmax, int dstXmin,
673 int dstYmin, int dstSizeX, int dstSizeY, vtkShaderProgram* program,
675 // copy a texture to a quad using the provided tcoords and verts
677 float* tcoords, float* verts, vtkShaderProgram* program, vtkOpenGLVertexArrayObject* vao);
679
692 int srcXmin, int srcYmin, int dstXmin, int dstYmin, int width, int height);
693
706 void GetShiftAndScale(float& shift, float& scale);
707
708 // resizes an existing texture, any existing
709 // data values are lost
710 void Resize(unsigned int width, unsigned int height);
711
713
719 vtkGetMacro(UseSRGBColorSpace, bool);
720 vtkSetMacro(UseSRGBColorSpace, bool);
721 vtkBooleanMacro(UseSRGBColorSpace, bool);
723
732 void AssignToExistingTexture(unsigned int handle, unsigned int target);
733
734protected:
737
739
744
749
751 unsigned int Width;
752 unsigned int Height;
753 unsigned int Depth;
754 unsigned int Samples;
756
758
759 unsigned int Target; // GLenum
760 unsigned int Format; // GLenum
761 unsigned int InternalFormat; // GLenum
762 unsigned int Type; // GLenum
764
766 unsigned int Handle;
774
775 int WrapS;
776 int WrapT;
777 int WrapR;
780
781 float MinLOD;
782 float MaxLOD;
785 float BorderColor[4];
786
789
791
794
795 // used for copying to framebuffer
797
798 // for texturebuffers we hold on to the Buffer
800
801private:
802 vtkTextureObject(const vtkTextureObject&) = delete;
803 void operator=(const vtkTextureObject&) = delete;
804};
805
806#endif
a simple class to control print indentation
Definition vtkIndent.h:40
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.
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.
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].
vtkOpenGLRenderWindow * GetContext()
Get/Set the context.
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.
virtual void SetMagnificationFilter(int)
Magnification filter mode.
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...
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.
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.
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.
static vtkTextureObject * New()
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.
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.
vtkPixelBufferObject * Download(unsigned int target, unsigned int level)
record modification and/or execution time
a weak reference to a vtkObject.
window superclass for vtkRenderWindow
Definition vtkWindow.h:39
boost::graph_traits< vtkGraph * >::vertex_descriptor target(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)