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=========================================================================*/
23
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
32class vtkOpenGLHelper;
37class vtkWindow;
39
40class VTKRENDERINGOPENGL2_EXPORT vtkTextureObject : public vtkObject
41{
42public:
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
55 };
56
57// ClampToBorder is not supported in ES 2.0
58// Wrap values.
59#ifndef GL_ES_VERSION_3_0
61#else
62 enum
63 {
64 ClampToEdge = 0,
65 Repeat,
66 MirroredRepeat,
67 NumberOfWrapModes
68 };
69#endif
70
71 // MinificationFilter values.
72 enum
73 {
81 };
82
83 // depth/color format
84 enum
85 {
86 Native = 0, // will try to match with the depth buffer format.
94 };
95
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
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 }
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 }
339
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
509
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
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 texture 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
731protected:
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;
771
772 int WrapS;
773 int WrapT;
774 int WrapR;
777
778 float MinLOD;
779 float MaxLOD;
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
798private:
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
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 *)