VTK  9.3.20240425
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
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
22VTK_ABI_NAMESPACE_BEGIN
24class vtkOpenGLHelper;
29class vtkWindow;
31
32class VTKRENDERINGOPENGL2_EXPORT vtkTextureObject : public vtkObject
33{
34public:
35 // DepthTextureCompareFunction values.
36 enum
37 {
38 Lequal = 0, // r=R<=Dt ? 1.0 : 0.0
39 Gequal, // r=R>=Dt ? 1.0 : 0.0
40 Less, // r=R<D_t ? 1.0 : 0.0
41 Greater, // r=R>Dt ? 1.0 : 0.0
42 Equal, // r=R==Dt ? 1.0 : 0.0
43 NotEqual, // r=R!=Dt ? 1.0 : 0.0
44 AlwaysTrue, // r=1.0 // WARNING "Always" is macro defined in X11/X.h...
45 Never, // r=0.0
46 NumberOfDepthTextureCompareFunctions
47 };
48
49// ClampToBorder is not supported in ES 2.0
50// Wrap values.
51#ifndef GL_ES_VERSION_3_0
52 enum { ClampToEdge = 0, Repeat, MirroredRepeat, ClampToBorder, NumberOfWrapModes };
53#else
54 enum
55 {
56 ClampToEdge = 0,
57 Repeat,
58 MirroredRepeat,
59 NumberOfWrapModes
60 };
61#endif
62
63 // MinificationFilter values.
64 enum
65 {
66 Nearest = 0,
72 NumberOfMinificationModes
73 };
74
75 // depth/color format
76 enum
77 {
78 Native = 0, // will try to match with the depth buffer format.
85 NumberOfDepthFormats
86 };
87
90 void PrintSelf(ostream& os, vtkIndent indent) override;
91
93
105
107
111 vtkGetMacro(Width, unsigned int);
112 vtkGetMacro(Height, unsigned int);
113 vtkGetMacro(Depth, unsigned int);
114 vtkGetMacro(Samples, unsigned int);
115 vtkGetMacro(Components, int);
116 unsigned int GetTuples() { return this->Width * this->Height * this->Depth; }
118
119 vtkGetMacro(NumberOfDimensions, int);
120
121 // for MSAA textures set the number of samples
122 vtkSetMacro(Samples, unsigned int);
123
125
128 vtkGetMacro(Target, unsigned int);
130
132
135 vtkGetMacro(Handle, unsigned int);
137
142
144
149 void Bind();
151
155 virtual void Activate();
156
161
166
171 bool IsBound();
172
180
182
186 vtkSetMacro(AutoParameters, int);
187 vtkGetMacro(AutoParameters, int);
188 vtkBooleanMacro(AutoParameters, int);
190
196 unsigned int width, unsigned int height, int numComps, int dataType, void* data);
197
204 unsigned int width, unsigned int height, int internalFormat, int rawType, void* raw);
205
211 unsigned int numValues, int numComps, int dataType, vtkOpenGLBufferObject* bo);
212
220 unsigned int numValues, int numComps, int dataType, vtkOpenGLBufferObject* bo);
221
228 unsigned int width, unsigned int height, int numComps, int dataType, void* data[6]);
229
240 bool Create1D(int numComps, vtkPixelBufferObject* pbo, bool shaderSupportsTextureInt);
241
245 bool Create1DFromRaw(unsigned int width, int numComps, int dataType, void* data);
246
253 bool Create2D(unsigned int width, unsigned int height, int numComps, vtkPixelBufferObject* pbo,
254 bool shaderSupportsTextureInt);
255
262 bool Create3D(unsigned int width, unsigned int height, unsigned int depth, int numComps,
263 vtkPixelBufferObject* pbo, bool shaderSupportsTextureInt);
264
269 bool Create3DFromRaw(unsigned int width, unsigned int height, unsigned int depth, int numComps,
270 int dataType, void* data);
271
279 unsigned int width, unsigned int height, unsigned int depth, int numComps, int dataType);
280
288 vtkPixelBufferObject* Download(unsigned int target, unsigned int level);
289
295 unsigned int width, unsigned int height, int internalFormat, vtkPixelBufferObject* pbo);
296
300 bool AllocateDepth(unsigned int width, unsigned int height, int internalFormat);
301
305 bool AllocateDepthStencil(unsigned int width, unsigned int height);
306
311 bool Allocate1D(unsigned int width, int numComps, int vtkType);
312
318 unsigned int width, unsigned int height, int numComps, int vtkType, int level = 0);
319
325 unsigned int width, unsigned int height, unsigned int depth, int numComps, int vtkType);
326
328
331 bool Create2D(unsigned int width, unsigned int height, int numComps, int vtktype, bool)
332 {
333 return this->Allocate2D(width, height, numComps, vtktype);
334 }
336 unsigned int width, unsigned int height, unsigned int depth, int numComps, int vtktype, bool)
337 {
338 return this->Allocate3D(width, height, depth, numComps, vtktype);
339 }
341
346
348
351 int GetDataType(int vtk_scalar_type);
352 void SetDataType(unsigned int glType);
353 int GetDefaultDataType(int vtk_scalar_type);
355
357
362 unsigned int GetInternalFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
363 void SetInternalFormat(unsigned int glInternalFormat);
364 unsigned int GetDefaultInternalFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
366
368
373 unsigned int GetFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
374 void SetFormat(unsigned int glFormat);
375 unsigned int GetDefaultFormat(int vtktype, int numComps, bool shaderSupportsTextureInt);
377
387
388 unsigned int GetMinificationFilterMode(int vtktype);
389 unsigned int GetMagnificationFilterMode(int vtktype);
390 unsigned int GetWrapSMode(int vtktype);
391 unsigned int GetWrapTMode(int vtktype);
392 unsigned int GetWrapRMode(int vtktype);
393
395
401 vtkSetMacro(RequireDepthBufferFloat, bool);
402 vtkGetMacro(RequireDepthBufferFloat, bool);
403 vtkGetMacro(SupportsDepthBufferFloat, bool);
405
407
413 vtkSetMacro(RequireTextureFloat, bool);
414 vtkGetMacro(RequireTextureFloat, bool);
415 vtkGetMacro(SupportsTextureFloat, bool);
417
419
425 vtkSetMacro(RequireTextureInteger, bool);
426 vtkGetMacro(RequireTextureInteger, bool);
427 vtkGetMacro(SupportsTextureInteger, bool);
429
431
441 vtkGetMacro(WrapS, int);
442 vtkSetMacro(WrapS, int);
444
446
456 vtkGetMacro(WrapT, int);
457 vtkSetMacro(WrapT, int);
459
461
471 vtkGetMacro(WrapR, int);
472 vtkSetMacro(WrapR, int);
474
476
489 vtkGetMacro(MinificationFilter, int);
490 vtkSetMacro(MinificationFilter, int);
492
494
501 vtkGetMacro(MagnificationFilter, int);
502 vtkSetMacro(MagnificationFilter, int);
504
509 void SetLinearMagnification(bool val) { this->SetMagnificationFilter(val ? Linear : Nearest); }
510
511 bool GetLinearMagnification() { return this->MagnificationFilter == Linear; }
512
514
519 vtkSetVector4Macro(BorderColor, float);
520 vtkGetVector4Macro(BorderColor, float);
522
524
528 vtkSetMacro(MinLOD, float);
529 vtkGetMacro(MinLOD, float);
531
533
537 vtkSetMacro(MaxLOD, float);
538 vtkGetMacro(MaxLOD, float);
540
542
547 vtkSetMacro(BaseLevel, int);
548 vtkGetMacro(BaseLevel, int);
550
552
557 vtkSetMacro(MaxLevel, int);
558 vtkGetMacro(MaxLevel, int);
560
562
572 vtkGetMacro(DepthTextureCompare, bool);
573 vtkSetMacro(DepthTextureCompare, bool);
575
577
597 vtkGetMacro(DepthTextureCompareFunction, int);
598 vtkSetMacro(DepthTextureCompareFunction, int);
600
602
607 vtkGetMacro(GenerateMipmap, bool);
608 vtkSetMacro(GenerateMipmap, bool);
610
612
617 vtkSetMacro(MaximumAnisotropicFiltering, float);
618 vtkGetMacro(MaximumAnisotropicFiltering, float);
620
622
633
641
647 static bool IsSupported(vtkOpenGLRenderWindow* renWin, bool requireTexFloat,
648 bool requireDepthFloat, bool requireTexInt);
649
654 {
655 return vtkTextureObject::IsSupported(renWin, false, false, false);
656 }
657
659
665 // part of a texture to part of a viewport, scaling as needed
666 void CopyToFrameBuffer(int srcXmin, int srcYmin, int srcXmax, int srcYmax, int dstXmin,
667 int dstYmin, int dstXmax, int dstYmax, int dstSizeX, int dstSizeY, vtkShaderProgram* program,
669 // copy part of a texture to part of a viewport, no scalaing
670 void CopyToFrameBuffer(int srcXmin, int srcYmin, int srcXmax, int srcYmax, int dstXmin,
671 int dstYmin, int dstSizeX, int dstSizeY, vtkShaderProgram* program,
673 // copy a texture to a quad using the provided tcoords and verts
675 float* tcoords, float* verts, vtkShaderProgram* program, vtkOpenGLVertexArrayObject* vao);
677
690 int srcXmin, int srcYmin, int dstXmin, int dstYmin, int width, int height);
691
704 void GetShiftAndScale(float& shift, float& scale);
705
706 // resizes an existing texture, any existing
707 // data values are lost
708 void Resize(unsigned int width, unsigned int height);
709
711
717 vtkGetMacro(UseSRGBColorSpace, bool);
718 vtkSetMacro(UseSRGBColorSpace, bool);
719 vtkBooleanMacro(UseSRGBColorSpace, bool);
721
730 void AssignToExistingTexture(unsigned int handle, unsigned int target);
731
732protected:
735
737
742
747
752
754 unsigned int Width;
755 unsigned int Height;
756 unsigned int Depth;
757 unsigned int Samples;
759
761
762 unsigned int Target; // GLenum
763 unsigned int Format; // GLenum
764 unsigned int InternalFormat; // GLenum
765 unsigned int Type; // GLenum
767
769 unsigned int Handle;
777
778 int WrapS;
779 int WrapT;
780 int WrapR;
783
784 float MinLOD;
785 float MaxLOD;
788 float BorderColor[4];
789
792
794
797
798 // used for copying to framebuffer
800
801 // for texturebuffers we hold on to the Buffer
803
804private:
805 vtkTextureObject(const vtkTextureObject&) = delete;
806 void operator=(const vtkTextureObject&) = delete;
807};
808
809VTK_ABI_NAMESPACE_END
810#endif
a simple class to control print indentation
Definition vtkIndent.h:108
abstract base class for most VTK objects
Definition vtkObject.h:162
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.
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].
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.
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).
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/Set internal format (OpenGL internal format) that should be used.
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.
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/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:48
boost::graph_traits< vtkGraph * >::vertex_descriptor target(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)