VTK  9.6.20260626
vtkTextureObject.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
14
15#ifndef vtkTextureObject_h
16#define vtkTextureObject_h
17
18#include "vtkObject.h"
19#include "vtkRenderingOpenGL2Module.h" // For export macro
20#include "vtkWeakPointer.h" // for render context
21#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
22
23VTK_ABI_NAMESPACE_BEGIN
25class vtkOpenGLHelper;
30class vtkWindow;
32
33class VTKRENDERINGOPENGL2_EXPORT VTK_MARSHALAUTO vtkTextureObject : public vtkObject
34{
35public:
36 // DepthTextureCompareFunction values.
37 enum
38 {
39 Lequal = 0, // r=R<=Dt ? 1.0 : 0.0
40 Gequal, // r=R>=Dt ? 1.0 : 0.0
41 Less, // r=R<D_t ? 1.0 : 0.0
42 Greater, // r=R>Dt ? 1.0 : 0.0
43 Equal, // r=R==Dt ? 1.0 : 0.0
44 NotEqual, // r=R!=Dt ? 1.0 : 0.0
45 AlwaysTrue, // r=1.0 // WARNING "Always" is macro defined in X11/X.h...
46 Never, // r=0.0
48 };
49
50 // Wrap values.
51 enum
52 {
58 };
59
60 // MinificationFilter values.
61 enum
62 {
70 };
71
72 // depth/color format
73 enum
74 {
75 Native = 0, // will try to match with the depth buffer format.
83 };
84
87 void PrintSelf(ostream& os, vtkIndent indent) override;
88
90
102
104
108 vtkGetMacro(Width, unsigned int);
109 vtkGetMacro(Height, unsigned int);
110 vtkGetMacro(Depth, unsigned int);
111 vtkGetMacro(Samples, unsigned int);
112 vtkGetMacro(Components, int);
113 unsigned int GetTuples() { return this->Width * this->Height * this->Depth; }
115
116 vtkGetMacro(NumberOfDimensions, int);
117
118 // for MSAA textures set the number of samples
119 vtkSetMacro(Samples, unsigned int);
120
122
125 vtkGetMacro(Target, unsigned int);
127
129
132 vtkGetMacro(Handle, unsigned int);
134
139
141
146 void Bind();
148
152 virtual void Activate();
153
158
163
168 bool IsBound();
169
177
179
183 vtkSetMacro(AutoParameters, int);
184 vtkGetMacro(AutoParameters, int);
185 vtkBooleanMacro(AutoParameters, int);
187
193 unsigned int width, unsigned int height, int numComps, int dataType, void* data);
194
202 unsigned int width, unsigned int height, int numComps, int dataType, int nbLayers, void* data);
203
210 unsigned int width, unsigned int height, int internalFormat, int rawType, void* raw);
211
217 unsigned int numValues, int numComps, int dataType, vtkOpenGLBufferObject* bo);
218
226 unsigned int numValues, int numComps, int dataType, vtkOpenGLBufferObject* bo);
227
237 unsigned int numValues, int numComps, int dataType, void* data);
238
254 unsigned int texelOffset, unsigned int numTexels, int numComps, int dataType, void* data);
255
262 unsigned int width, unsigned int height, int numComps, int dataType, void* data[6]);
263
274 bool Create1D(int numComps, vtkPixelBufferObject* pbo, bool shaderSupportsTextureInt);
275
279 bool Create1DFromRaw(unsigned int width, int numComps, int dataType, void* data);
280
287 bool Create2D(unsigned int width, unsigned int height, int numComps, vtkPixelBufferObject* pbo,
288 bool shaderSupportsTextureInt);
289
296 bool Create3D(unsigned int width, unsigned int height, unsigned int depth, int numComps,
297 vtkPixelBufferObject* pbo, bool shaderSupportsTextureInt);
298
303 bool Create3DFromRaw(unsigned int width, unsigned int height, unsigned int depth, int numComps,
304 int dataType, void* data);
305
313 unsigned int width, unsigned int height, unsigned int depth, int numComps, int dataType);
314
322 vtkPixelBufferObject* Download(unsigned int target, unsigned int level);
323
329 unsigned int width, unsigned int height, int internalFormat, vtkPixelBufferObject* pbo);
330
334 bool AllocateDepth(unsigned int width, unsigned int height, int internalFormat);
335
339 bool AllocateDepthStencil(unsigned int width, unsigned int height);
340
345 bool Allocate1D(unsigned int width, int numComps, int vtkType);
346
352 unsigned int width, unsigned int height, int numComps, int vtkType, int level = 0);
353
359 unsigned int width, unsigned int height, unsigned int depth, int numComps, int vtkType);
360
362
365 bool Create2D(unsigned int width, unsigned int height, int numComps, int vtktype, bool)
366 {
367 return this->Allocate2D(width, height, numComps, vtktype);
368 }
370 unsigned int width, unsigned int height, unsigned int depth, int numComps, int vtktype, bool)
371 {
372 return this->Allocate3D(width, height, depth, numComps, vtktype);
373 }
374
375
380
382
385 int GetDataType(int vtk_scalar_type);
386 void SetDataType(unsigned int glType);
387 int GetDefaultDataType(int vtk_scalar_type);
389
391
394 unsigned int GetFormat() { return this->Format; }
395 unsigned int GetInternalFormat() { return this->InternalFormat; }
396 unsigned int GetInternalFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
397 void SetInternalFormat(unsigned int glInternalFormat);
398 unsigned int GetDefaultInternalFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
400
402
407 unsigned int GetFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
408 void SetFormat(unsigned int glFormat);
409 unsigned int GetDefaultFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
411
421
422 unsigned int GetMinificationFilterMode(int vtktype);
423 unsigned int GetMagnificationFilterMode(int vtktype);
424 unsigned int GetWrapSMode(int vtktype);
425 unsigned int GetWrapTMode(int vtktype);
426 unsigned int GetWrapRMode(int vtktype);
427
429
435 vtkSetMacro(RequireDepthBufferFloat, bool);
436 vtkGetMacro(RequireDepthBufferFloat, bool);
437 vtkGetMacro(SupportsDepthBufferFloat, bool);
439
441
447 vtkSetMacro(RequireTextureFloat, bool);
448 vtkGetMacro(RequireTextureFloat, bool);
449 vtkGetMacro(SupportsTextureFloat, bool);
451
453
459 vtkSetMacro(RequireTextureInteger, bool);
460 vtkGetMacro(RequireTextureInteger, bool);
461 vtkGetMacro(SupportsTextureInteger, bool);
463
465
475 vtkGetMacro(WrapS, int);
476 vtkSetMacro(WrapS, int);
478
480
490 vtkGetMacro(WrapT, int);
491 vtkSetMacro(WrapT, int);
493
495
505 vtkGetMacro(WrapR, int);
506 vtkSetMacro(WrapR, int);
508
510
523 vtkGetMacro(MinificationFilter, int);
524 vtkSetMacro(MinificationFilter, int);
526
528
535 vtkGetMacro(MagnificationFilter, int);
536 vtkSetMacro(MagnificationFilter, int);
538
544
546
548
553 vtkSetVector4Macro(BorderColor, float);
554 vtkGetVector4Macro(BorderColor, float);
556
558
562 vtkSetMacro(MinLOD, float);
563 vtkGetMacro(MinLOD, float);
565
567
571 vtkSetMacro(MaxLOD, float);
572 vtkGetMacro(MaxLOD, float);
574
576
581 vtkSetMacro(BaseLevel, int);
582 vtkGetMacro(BaseLevel, int);
584
586
591 vtkSetMacro(MaxLevel, int);
592 vtkGetMacro(MaxLevel, int);
594
596
606 vtkGetMacro(DepthTextureCompare, bool);
607 vtkSetMacro(DepthTextureCompare, bool);
609
611
634
636
641 vtkGetMacro(GenerateMipmap, bool);
642 vtkSetMacro(GenerateMipmap, bool);
644
646
651 vtkSetMacro(MaximumAnisotropicFiltering, float);
652 vtkGetMacro(MaximumAnisotropicFiltering, float);
654
656
667
675
681 static bool IsSupported(vtkOpenGLRenderWindow* renWin, bool requireTexFloat,
682 bool requireDepthFloat, bool requireTexInt);
683
688 {
689 return vtkTextureObject::IsSupported(renWin, false, false, false);
690 }
691
693
699 // part of a texture to part of a viewport, scaling as needed
700 void CopyToFrameBuffer(int srcXmin, int srcYmin, int srcXmax, int srcYmax, int dstXmin,
701 int dstYmin, int dstXmax, int dstYmax, int dstSizeX, int dstSizeY, vtkShaderProgram* program,
703 // copy part of a texture to part of a viewport, no scalaing
704 void CopyToFrameBuffer(int srcXmin, int srcYmin, int srcXmax, int srcYmax, int dstXmin,
705 int dstYmin, int dstSizeX, int dstSizeY, vtkShaderProgram* program,
707 // copy a texture to a quad using the provided tcoords and verts
709 float* tcoords, float* verts, vtkShaderProgram* program, vtkOpenGLVertexArrayObject* vao);
711
724 int srcXmin, int srcYmin, int dstXmin, int dstYmin, int width, int height);
725
738 void GetShiftAndScale(float& shift, float& scale);
739
740 // resizes an existing texture, any existing
741 // data values are lost
742 void Resize(unsigned int width, unsigned int height);
743
745
751 vtkGetMacro(UseSRGBColorSpace, bool);
752 vtkSetMacro(UseSRGBColorSpace, bool);
753 vtkBooleanMacro(UseSRGBColorSpace, bool);
755
764 void AssignToExistingTexture(unsigned int handle, unsigned int target);
765
766protected:
769
771
776
781
786
788 unsigned int Width;
789 unsigned int Height;
790 unsigned int Depth;
791 unsigned int Samples;
793
795
796 unsigned int Target; // GLenum
797 unsigned int Format; // GLenum
798 unsigned int InternalFormat; // GLenum
799 unsigned int Type; // GLenum
801
803 unsigned int Handle;
811
812 int WrapS;
813 int WrapT;
814 int WrapR;
817
818 float MinLOD;
819 float MaxLOD;
822 float BorderColor[4];
823
826
828
831
832 // used for copying to framebuffer
834
835 // for texturebuffers we hold on to the Buffer
837
838private:
839 vtkTextureObject(const vtkTextureObject&) = delete;
840 void operator=(const vtkTextureObject&) = delete;
841};
842
843VTK_ABI_NAMESPACE_END
844#endif
a simple class to control print indentation
Definition vtkIndent.h:108
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.
static bool IsSupported(vtkOpenGLRenderWindow *renWin, bool requireTexFloat, bool requireDepthFloat, bool requireTexInt)
Returns if the context supports the required extensions.
unsigned int InternalFormat
bool AllocateDepth(unsigned int width, unsigned int height, int internalFormat)
Create a 2D depth texture but does not initialize its values.
void SetContext(vtkOpenGLRenderWindow *)
Get/Set the context.
bool AllocateProxyTexture3D(unsigned int width, unsigned int height, unsigned int depth, int numComps, int dataType)
Create a 3D texture using the GL_PROXY_TEXTURE_3D target.
bool EmulateTextureBufferWith2DTextures(unsigned int numValues, int numComps, int dataType, vtkOpenGLBufferObject *bo)
Emulates a texture buffer with 2D texture.
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].
bool UpdateTextureBuffer2DRegion(unsigned int texelOffset, unsigned int numTexels, int numComps, int dataType, void *data)
Update a contiguous texel range of a 2D-emulation texture (one created by EmulateTextureBufferWith2DT...
vtkOpenGLRenderWindow * GetContext()
Get/Set the context.
bool Create2DArrayFromRaw(unsigned int width, unsigned int height, int numComps, int dataType, int nbLayers, void *data)
Create a 2D texture array from client memory data contains a pointer to the layers of the texture arr...
vtkOpenGLHelper * ShaderProgram
bool IsBound()
Tells if the texture object is bound to the active texture image unit.
void SetInternalFormat(unsigned int glInternalFormat)
Get the format (GLenum) and internal format (GLenum) in use.
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.
bool EmulateTextureBufferWith2DTexturesFromRaw(unsigned int numValues, int numComps, int dataType, void *data)
Same as EmulateTextureBufferWith2DTextures(), but uploads directly from client memory instead of from...
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).
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.
static bool IsSupported(vtkOpenGLRenderWindow *renWin)
Check for feature support, without any optional features.
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 the format (GLenum) and internal format (GLenum) in use.
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.
unsigned int GetFormat()
Get the format (GLenum) and internal format (GLenum) in use.
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()
unsigned int GetInternalFormat()
Get the format (GLenum) and internal format (GLenum) in use.
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.
bool LoadRequiredExtensions(vtkOpenGLRenderWindow *renWin)
Load all necessary extensions.
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 the format (GLenum) and internal format (GLenum) in use.
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:61
boost::graph_traits< vtkGraph * >::vertex_descriptor target(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
#define VTK_MARSHALAUTO