HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RE_OGLTexture.h
Go to the documentation of this file.
1 /*
2  * PROPRIETARY INFORMATION. This software is proprietary to
3  * Side Effects Software Inc., and is not to be reproduced,
4  * transmitted, or disclosed in any way without written permission.
5  *
6  * NAME: RE_OGLTexture.h ( RE Library, C++)
7  *
8  * COMMENTS:
9  * Base class for various OpenGL texture types: 1D, 2D, 3D, Cube,
10  * 2D rectangles, 1D arrays and 2D arrays.
11  *
12  */
13 #ifndef RE_OGLTexture_h
14 #define RE_OGLTexture_h
15 
16 class RE_Render;
17 class RE_TextureMap;
18 
19 #include <UT/UT_ValArray.h>
20 #include <UT/UT_Rect.h>
21 
22 #include "RE_CachedObject.h"
23 #include "RE_RenderContext.h"
24 #include "RE_Types.h"
25 #include "RE_TextureTypes.h"
26 #include "RE_TextureFilter.h"
27 #include <IMG/IMG_FileTypes.h>
28 
29 class IMX_Layer;
30 
31 #include <iosfwd>
32 #include <time.h>
33 
35 {
36 public:
37  ~RE_OGLTexture() override;
38 
39  /// Returns the amount of main memory (NOT graphics memory!)
40  /// owned by this RE_OGLTexture.
41  int64 getMemoryUsage(bool inclusive) const override;
42 
43  virtual const char *className() const;
44 
45  // Texture type (dimensions)
46  RE_TextureDimension getTextureType() const;
47 
48  // Returns true if this texture type is supported.
49  virtual bool hasTextureSupport(RE_Render *r);
50 
51  // True if this texture type supports mipmapping (all but tex rectangles)
52  virtual bool hasMipMapSupport(RE_Render *);
53 
54  // Returns the maximum size of a texture edge of the given texture type
55  virtual int getMaxTextureSize(RE_Render *r) = 0;
56 
57  // Returns the maximum index that can be used for arrays and cube maps
58  virtual int getMaxTextureIndex(RE_Render *r);
59 
60  // True if GL can compress textures itself.
61  bool hasAutoCompression(RE_Render *r);
62 
63  // true if this has a valid texture created for it.
64  virtual bool isValid() const;
65 
66  // true if the texture res, format, mip levels can be changed on the fly
67  bool isMutable() const { return myMutableFlag; }
68 
69  // Texture identifier - opaque handle.
70  RE_TextureID getID() const;
71 
72  // Releases the texture on the GPU; this object becomes invalid.
73  virtual void free();
74 
75  // Returns a new texture with no attributes of the given type.
76  static RE_OGLTexture *newTexture(RE_TextureDimension t);
77 
78  // Returns a new, blank texture with the same attributes as this texture.
79  RE_OGLTexture *copyAttributes() const;
80 
81  // -----------------------------------------------------------------
82  // Basic Texture data (modifying will invalidate texture,
83  // requiring a setTexture() call)
84 
85  // The texture type can be color, stencil, or depth. Stencil and depth
86  // textures are more restrictive with the types that can be sent to them.
87  // They must be single channel textures; depth can be FLOAT16,24 or 32,
88  // while stencil must be UINT1,2,4,8 or 16. The default is Color.
89  // This must be set before calling setFormat().
90  void setDataType(RE_TextureDataType type);
91  RE_TextureDataType getDataType() const;
92 
93  // The data type is the CPU-side data format, vectorsize can be 1-4.
94  // To use leaner GPU-side data formats, set a texture compression.
95  void setFormat(RE_GPUType data, int vectorsize,
96  RE_TextureFormatExtra format_extra =
98  RE_GPUType getFormatType() const;
99  int getFormatSize() const;
100  RE_TextureFormatExtra getFormatExtra() const;
101 
102  // returns the GL internal format of the texture (ie, RGBA8).
103  int getInternalFormat() const { return myGLInternal; }
104 
105  // returns the GL format of the texture (e.g. GL_RBGA). May be changed
106  // by the first call to setTexture()
107  int getGLFormat() const { return myGLFormat; }
108 
109  // You can pass the data in a different format than the texture type.
110  // This must be called after setFormat().
111  void setClientFormat(RE_GPUType data, int vectorsize);
112 
113  // Compress the texture on the GPU, default is to use the same format as
114  // the CPU format (RE_COMPRESS_NONE). If auto_compress is false, it is
115  // assumed that the data passed to this texture object is already
116  // compressed.
117  void setCompression(RE_TextureCompress comp,
118  bool auto_compress);
119  RE_TextureCompress getCompression() const;
120  bool getAutoCompression() const;
121 
122  // Texture Resolution
123  // Height/depth may not be required, depending on texture dimension.
124  void setResolution(int w, int h = 1, int depth = 1,
125  bool force_pow2 = false);
126  int getWidth() const;
127  int getHeight() const;
128  int getDepth() const;
129 
130  // GL may differ from getWidth/Height/Depth if GPU requires pow2 textures
131  // These sizes will never be smaller than the above sizes.
132  int getGLWidth() const;
133  int getGLHeight() const;
134  int getGLDepth() const;
135 
136  // If the texture size differs from the GL size, this will return a value
137  // less than 1 to represent the coord where the image ends in the texture
138  float getTexS() const;
139  float getTexT() const;
140  float getTexR() const;
141 
142  // For multisample textures (2D)
143  virtual void setSamples(int samples);
144  int getSamples() const;
145 
146  // Enables mipmapping and auto-generation of mipmaps. Not all texture data
147  // formats can be mipmapped (specifically floating point). This also sets
148  // the minify filter to RE_FILT_LINEAR_MIPMAP_LINEAR if not set to a MIPMAP
149  // filter and it is enabled, or back to RE_FILT_LINEAR if disabled.
150  void setMipMap(bool m, bool autogen = true);
151  bool getMipMap() const;
152  bool getMipMapAutoGenerate() const;
153 
154  // Returns true if the texture actually is mipmapped, not just requested
155  // to be (some formats don't mipmap).
156  bool isMipMapped() const;
157 
158  // This can be called before the texture is created to determine if it's
159  // possible to use. Returns false if it's not possible to create. If the
160  // texture is already created, it returns the actual OpenGL texture values.
161  // 'format' is an internal OpenGL format specification (like GL_RGBA8).
162  bool queryTextureStats(RE_Render *r,
163  int *width, int *height, int *depth,
164  int *format);
165 
166  void setLabel(RE_Render *r, const char *label);
167 
168 
169  // ---------------------------------------------------------------------
170  // Texture transfer methods (CPU/GPU).
171 
172  // set/getTexture() writes or reads the entire texture.
173  // It is assumed that data points to a chunk of memory large enough for the
174  // texture. A set method must be called afterwards to reinitialize the
175  // texture if the above parameters are changed.
176  // If non-pow2 textures are not supported and you set the resolution to a
177  // non-pow2 size, you still pass in non-pow2 data and it will be written
178  // properly (do not pad to pow2). If you do not wish this to be the case,
179  // set a pow2 resolution insteead. When rendering a non-pow2 emulated
180  // texture, use the getTexS/T/R() methods to determine the edge of the data.
181 
182  // 'level' is the texture mipmap level.Must be -1 if mipmapping is disabled.
183  // 'index' varies by texture type; face for cube maps and index for arrays.
184  // 'proxy' does a texture proxy call, merely seeing if the texture can be
185  // created without generating any errors.
186  virtual void setTexture(RE_Render *r, const void *data,
187  int level=-1, int index=-1,
188  bool proxy=false) = 0;
189 
190  // How large a block is required to initialize or fetch this texture.
191  virtual int64 getSizeBytes() const;
192 
193  // The size of one scanline in the image. The second version using sublen
194  // instead of GLwidth
195  int64 getScanBytes() const;
196  int64 getScanBytes(int sublen) const;
197 
198  // Number of bits in a full pixel (ie, fp16 RGB has 48b).
199  int64 getBitsPerPixel() const;
200 
201  // Actual size of texture in GPU mem.
202  int64 getTextureSize() const;
203 
204  // Write to or read from a portion of the texture. Not all dimensions may
205  // be used. See derived classes for the meaning of 'z'. These can only be
206  // used after setTexture(), though it can be called with data=nullptr to set
207  // up the texture for setSubTexture().
208  virtual void setSubTexture(RE_Render *r,
209  const void *data, int level,
210  int xoffset, int xsize,
211  int yoffset=0, int ysize=1,
212  int zoffset=0, int zsize=1) = 0;
213 
214  // Fills the texture with a constant value.
215  // 'level' is the texture mipmap level. Must be -1 if mipmapping is disabled.
216  // 'data' is a pointer to an array of between one and four components of texel data.
217  // If data is nullptr, the texture will be filled with zeroes.
218  void clearTexture(RE_Render *r, int level = -1, const void *data = nullptr);
219 
220  // Reads the entire texture at 'level' back into 'data'. 'data' must point
221  // to a block of at least 'getSizeBytes()' in size.
222  // Note that a non-pow2 emulated texture will return the entire GL pow2
223  // size, since there is no way to read a portion of a texture.
224  virtual void getTexture(RE_Render *r, void *data,
225  int level=0, int index=-1) const;
226  static void getTextureRaw2D(RE_Render *r, int id,
227  int width, int height,
228  RE_TextureDataType datatype,
229  RE_GPUType format, int vectorsize,
230  void *data);
231 
232  // copies 'area' block of pixels from the read buffer to this texture,
233  // in screen coords (if nullptr, the entire area) at offset (x,y,z) and
234  // miplevel 'level'. The pixels are converted to this texture's data format
235  virtual bool copyFromBuffer(RE_Render *r, int x, int y, int z = 0,
236  const UT_DimRect *bufferarea = nullptr,
237  int level = 0) = 0;
238 
239  // Copy a subregion from a source texture to this texture. The x,y,z and
240  // width, height, depth parameters have different meanings depending on the
241  // source and destination texture types (eg, depth in cubemap is the face,
242  // height in a 1D array is the index). Requires RE_EXT_TEXTURE_COPY (GL4.3)
243  // Buffer textures cannot be copied to or from.
244  bool copyFromTexture(RE_Render *r,
245  const RE_OGLTexture *src_texture,
246  int src_x, int src_y, int src_z,
247  int dst_x, int dst_y, int dst_z,
248  int width = -1, // -1 = full src width
249  int height = -1,
250  int depth = -1,
251  int mip_level = 0);
252 
253  void copyToLayer(IMX_Layer *layer,
255  bool do_opencl_interop = true) const;
256 
257  void copyFromLayer(const IMX_Layer *layer,
259  bool do_opencl_interop = true);
260 
261  // Build mip-maps from mip level 0 of the texture. Useful for
262  // filtering render-to-texture targets. Returns true if mipmaps were
263  // generated.
264  bool generateMipMaps(RE_Render *r);
265 
266  // ---------------------------------------------------------------------
267  // Texture Parameters (changing will modify, does not require setTexture)
268 
269  // Filter to use when displaying the texture at less than 100% zoom
270  void setMinFilter( RE_Render *r, RE_TexFiltType t );
271  RE_TexFiltType getMinFilter() const;
272 
273  // Filter to use when displaying the texture at greater than 100% zoom
274  void setMagFilter( RE_Render *r, RE_TexFiltType t );
275  RE_TexFiltType getMagFilter() const;
276 
277  void setMaxAnisotropy(RE_Render *r, int atf);
278  int getMaxAnisotropy() const;
279 
280  // Fixed bias value that is added to the level-of-detail parameter for
281  // the texture before texture sampling (when mipmapping).
282  void setLodBias(RE_Render *r, float bias);
283  float getLodBias() const;
284 
285  // Texture wrapping - clamp or repeat. Not all dimension may be used.
286  void setTextureWrap(RE_Render *r,
287  RE_TexClampType clamp_s,
288  RE_TexClampType clamp_t = RE_CLAMP_EDGE,
289  RE_TexClampType clamp_r = RE_CLAMP_EDGE);
290  bool getWrapS() const;
291  bool getWrapT() const;
292  bool getWrapR() const;
293 
294  void setBorder(RE_Render *r,
296  const UT_Vector4F *color_alpha = nullptr);
297  UT_Vector4F getBorderColor() const;
298 
299  // Sets all of the above in one go.
300  void setTextureFilter(RE_Render *r,
301  const RE_TextureFilter &filter);
302 
303  // When on, depth comparison is used. When used in a shader, a shadow
304  // sampler must be used. If disabled, the raw depth value is returned and
305  // a normal texture sampler must be used. 'compare' can be set to a
306  // negative, positive or zero value, indicating less/equal, greater/equal or
307  // equal compare mode.
308  void setDepthCompareMode(RE_Render *r, bool enabled,
311 
312  // If RE_EXT_TEXTURE_SWIZZLE is supported, texture components can be
313  // shuffled about or set to a constant 0 or 1 value.
314  bool setTextureSwizzle(RE_Render *r,
319 
320  void setAlphaInfo(IMG_FileAlphaInfo a) { myAlphaInfo = a; }
321  IMG_FileAlphaInfo getAlphaInfo() const { return myAlphaInfo;}
322 
323  // --------------------------------------------------------------------
324  // Bindless Textures (requires RE_EXT_TEXTURE_BINDLESS)
325 
326  // Creates a bindless handle for the texture. Once this is done, the texture
327  // is immutable - its texel contents can change, but nothing else.
328  // Will return false if bindless texture is unsupported.
329  bool createTextureHandle(RE_Render *r);
330 
331  // returns the bindless texture handle. createTextureHandle() must be called
332  // first. If bindless is unsupported or create was not called, returns 0.
333  uint64 getTextureHandle() const { return myBindlessHandle; }
334 
335  // Before a bindless texture can be used, it must be made resident.
336  bool makeResidentTexture(RE_Render *r);
337 
338  // When a bindless texture is no longer needed, it should be removed from
339  // resident status to free up resources.
340  bool removeResidentTexture(RE_Render *r);
341 
342 
343 
344  // --------------------------------------------------------------------
345 
346  static int getGLTextureType(RE_TextureDimension t);
347  static RE_TextureDimension getRETextureType(int gl_type);
348  static RE_OGLTexture *findTextureWithID(RE_TextureID id);
349 
350  // Mostly for debug, this writes the texture out to a file (any supported
351  // image format, determined by the extension). 3D textures are best written
352  // as deep raster formats, like .pic.
353  bool writeToFile(RE_Render *r, const char *name,
354  int level = 0) const;
355 
356  // Expands a 2D multisample texture into a 2D texture with dimensions
357  // increased by the sampling factor: 2x (2,1), 4x (2,2), 6x (3,2), 8x (4,2)
358  RE_OGLTexture * expandMultisampleTexture(RE_Render *r) const;
359 
360  static void adjustPow2(int &w, int &h, int &d);
361 
362 
363  // References on this texture by other objects
364  void addReference(void (*cb)(void *, RE_OGLTexture *),
365  void *ref_obj);
366  void removeReference(void *ref_obj);
367 
368  void setFileModTime(time_t time) { myModTime = time; }
369  bool hasFileModTime() const { return myModTime != 0; }
370  time_t getFileModTime() const { return myModTime; }
371 
372 
373  void invalidateCache();
374 
375  // print a summary of this texture. If os is nullptr, use std::cerr.
376  void print(std::ostream *os = nullptr);
377 
378  // Dump all textures currently in use by Houdini. If min_tex_size is
379  // specified, only those textures >= the size will be printed. The summary
380  // line will always include stats from all textures.
381  static void dumpTextureTable(std::ostream &os,
382  int64 min_tex_size = -1);
383 
384  // This returns various GL types (ie, GL_TEXTURE_2D, GL_PROXY_TEXTURE_2D,
385  // GL_TEXTURE_BINDING_2D)
386  virtual int getGLType() const = 0;
387 protected:
388 
390 
391  void deleteObject();
392  void clearID(); //clear ID after deleting resource
393  void setupTextureParameters(RE_Render *r, bool force);
394  void validate();
395 
396  // These return various GL types (ie, GL_TEXTURE_2D, GL_PROXY_TEXTURE_2D,
397  // GL_TEXTURE_BINDING_2D)
398  virtual int getGLProxy() const = 0;
399  virtual int getGLTypeBinding() const = 0;
400  virtual int getGLCreateType() const { return getGLType(); }
401 
402  // These methods must be called from within a locked context
403  virtual bool buildMipMaps(RE_Render *r, const void *data) = 0;
404 
405  bool createTextureID();
406 
407  RE_GPUType getClientType() const;
408 
409  // returns a malloc'ed image with the compressed data, which must be freed.
410  // If no compression is necessary, this will return nullptr.
411  void * compressTexData(const void *src, int &w, int &h);
412  void determineCompressionInternal();
413  void determineTextureSize(RE_Render *r);
414 
415  // OpenGL data
417  int myGLType;
423  time_t myModTime;
425 
426  void updateTextureWrap(RE_Render *r, bool force);
427  void updateFilters(RE_Render *r, bool force);
428 
429 private:
430  void buildFormatTable();
431 
432  // RE data
433  RE_TextureDataType myTextureDataType;
434  RE_GPUType myDataType;
435  RE_GPUType myClientType;
436  RE_TextureFormatExtra myFormatExtra;
437  RE_TextureDimension myTexDimension;
438  int myVectorSize;
439  int myWidth;
440  int myHeight;
441  int myDepth;
442  RE_TextureCompress myCompression;
443  bool myMipMapFlag;
444  bool myMipMapAutoGenFlag;
445  bool myAutoCompressFlag;
446  bool myCompressFlag;
447  bool myValidFlag;
448  bool myMutableFlag;
449  RE_TextureFilter myCurrentFilterState;
450  RE_TextureFilter myFilter;
451  int64 myTexSize;
452  IMG_FileAlphaInfo myAlphaInfo;
453  UT_ValArray<void *> myReferences;
455 
456  uint64 myBindlessHandle;
457  int myResidentCount;
458 
459 protected:
461  friend class RE_OGLRender;
462  friend class RE_OGLFramebuffer;
463  friend class RE_TextureMap;
464 };
465 
466 inline RE_TextureDimension
468 {
469  return myTexDimension;
470 }
471 
472 inline void
474 {
475  myTextureDataType = type;
476 
477  if(myVectorSize > 0)
478  setFormat(myDataType, myVectorSize, myFormatExtra);
479 }
480 
481 inline RE_TextureDataType
483 {
484  return myTextureDataType;
485 }
486 
487 inline bool
489 {
490  return myID != 0 && myValidFlag;
491 }
492 
493 inline RE_TextureID
495 {
496  return myID;
497 }
498 
499 inline RE_GPUType
501 {
502  return myDataType;
503 }
504 
505 inline RE_GPUType
507 {
508  return myClientType;
509 }
510 
511 inline int
513 {
514  return myVectorSize;
515 }
516 
519 {
520  return myFormatExtra;
521 }
522 
523 inline int
525 {
526  return myWidth;
527 }
528 
529 inline int
531 {
532  return myHeight;
533 }
534 
535 inline int
537 {
538  return myDepth;
539 }
540 
541 inline int
543 {
544  return myGLWidth;
545 }
546 
547 inline int
549 {
550  return myGLHeight;
551 }
552 
553 inline int
555 {
556  return myGLDepth;
557 }
558 
559 inline RE_TextureCompress
561 {
562  return myCompression;
563 }
564 
565 inline bool
567 {
568  return myAutoCompressFlag;
569 }
570 
571 inline bool
573 {
574  return true;
575 }
576 
577 inline bool
579 {
580  return myMipMapFlag;
581 }
582 
583 inline bool
585 {
586  return myMipMapFlag && myCanMipMap;
587 }
588 
589 inline bool
591 {
592  return myMipMapAutoGenFlag;
593 }
594 
595 inline RE_TexFiltType
597 {
598  return myCurrentFilterState.getMinFilter();
599 }
600 
601 inline RE_TexFiltType
603 {
604  return myCurrentFilterState.getMagFilter();
605 }
606 
607 inline float
609 {
610  return myCurrentFilterState.getLodBias();
611 }
612 
613 inline int
615 {
616  return myCurrentFilterState.getMaxAnisotropy();
617 }
618 
619 inline bool
621 {
622  return myCurrentFilterState.getWrapS();
623 }
624 
625 inline bool
627 {
628  return myCurrentFilterState.getWrapT();
629 }
630 
631 inline bool
633 {
634  return myCurrentFilterState.getWrapR();
635 }
636 
637 inline const char *
639 {
640  return "RE_OGLTexture";
641 }
642 
643 inline bool
645 {
646  return true;
647 }
648 
649 inline void
651 {
652  myValidFlag = true;
653 }
654 
655 inline int
657 {
658  return 1;
659 }
660 
661 inline float
663 {
664  return float(myWidth) / float(myGLWidth);
665 }
666 
667 inline float
669 {
670  return float(myHeight) / float(myGLHeight);
671 }
672 
673 inline float
675 {
676  return float(myDepth) / float(myGLDepth);
677 }
678 
679 inline int64
681 {
682  return myTexSize;
683 }
684 
685 inline int64
687 {
688  return getScanBytes(myGLWidth);
689 }
690 
691 
692 #endif
int getGLHeight() const
type
Definition: core.h:556
void setFileModTime(time_t time)
virtual int getMaxTextureIndex(RE_Render *r)
float getTexR() const
bool isMipMapped() const
GLint GLint GLint yoffset
Definition: glcorearb.h:412
bool getMipMapAutoGenerate() const
int getGLDepth() const
RE_GPUType getClientType() const
GLuint GLsizei const GLchar * label
Definition: glcorearb.h:2545
bool getWrapS() const
virtual const char * className() const
#define RE_API
Definition: RE_API.h:10
int64 getMemoryUsage(bool inclusive) const override
int64 getTextureSize() const
GT_API const UT_StringHolder time
RE_TextureFormatExtra getFormatExtra() const
RE_TextureSwizzle
CompareResults OIIO_API compare(const ImageBuf &A, const ImageBuf &B, float failthresh, float warnthresh, float failrelative, float warnrelative, ROI roi={}, int nthreads=0)
int getWidth() const
GLdouble GLdouble GLdouble z
Definition: glcorearb.h:848
RE_TexFiltType getMagFilter() const
RE_TextureID myID
GLint level
Definition: glcorearb.h:108
GLboolean GLboolean GLboolean GLboolean a
Definition: glcorearb.h:1222
GLint y
Definition: glcorearb.h:103
GLenum GLenum GLsizei const GLuint GLboolean enabled
Definition: glcorearb.h:2539
RE_TextureDimension
bool getAutoCompression() const
unsigned long long uint64
Definition: SYS_Types.h:117
int getDepth() const
int getMaxAnisotropy() const
float getLodBias() const
virtual int getGLCreateType() const
Temporary container for either a RV_Render and an RE_Render.
virtual bool hasMipMapSupport(RE_Render *)
RE_TexFiltType getMagFilter() const
int getInternalFormat() const
GLenum GLuint GLint GLint layer
Definition: glcorearb.h:1299
RE_TextureDimension getTextureType() const
RE_TexFiltType
bool hasFileModTime() const
RE_GPUType
Definition: RE_Types.h:52
GLint GLsizei GLsizei height
Definition: glcorearb.h:103
GLint GLint GLsizei GLint GLenum GLenum type
Definition: glcorearb.h:108
bool getWrapR() const
RE_TextureID getID() const
RE_TextureCompress myCompression
unsigned int RE_TextureID
bool getWrapT() const
time_t getFileModTime() const
RE_TextureFormatExtra
GLint GLint GLsizei GLint GLenum format
Definition: glcorearb.h:108
GLfloat green
Definition: glcorearb.h:112
RE_TexClampType
int getFormatSize() const
long long int64
Definition: SYS_Types.h:116
virtual bool hasTextureSupport(RE_Render *r)
GLfloat GLfloat GLfloat alpha
Definition: glcorearb.h:112
RE_TextureCompress getCompression() const
RE_TextureBorder
int64 getScanBytes() const
GLint GLint xoffset
Definition: glcorearb.h:411
GLuint const GLchar * name
Definition: glcorearb.h:786
int getMaxAnisotropy() const
int getHeight() const
GLint GLenum GLint x
Definition: glcorearb.h:409
GLdouble t
Definition: glad.h:2397
RE_TexFiltType getMinFilter() const
GR_API int getMaxTextureSize(RE_RenderContext rc)
GLsizei samples
Definition: glcorearb.h:1298
GLint GLint GLsizei GLsizei GLsizei depth
Definition: glcorearb.h:476
uint64 getTextureHandle() const
IMG_FileAlphaInfo
RE_TextureDataType
GLfloat GLfloat GLfloat GLfloat h
Definition: glcorearb.h:2002
virtual bool isValid() const
IMATH_NAMESPACE::V2f IMATH_NAMESPACE::Box2i std::string this attribute is obsolete as of OpenEXR v3 float
Cached object implementation for RE_TextureCache.
float getTexS() const
float getLodBias() const
GLint GLint GLsizei GLint border
Definition: glcorearb.h:108
SIM_API const UT_StringHolder force
RE_TexClampType getWrapR() const
RE_TexClampType getWrapS() const
RE_TextureDataType getDataType() const
GLuint index
Definition: glcorearb.h:786
RE_GPUType getFormatType() const
RE_TexFiltType getMinFilter() const
void setAlphaInfo(IMG_FileAlphaInfo a)
GLint GLsizei width
Definition: glcorearb.h:103
IMG_FileAlphaInfo getAlphaInfo() const
int getGLWidth() const
void setDataType(RE_TextureDataType type)
GLubyte GLubyte GLubyte GLubyte w
Definition: glcorearb.h:857
float getTexT() const
GLboolean r
Definition: glcorearb.h:1222
GLfloat GLfloat blue
Definition: glcorearb.h:112
RE_TextureCompress
int getGLFormat() const
RE_TexClampType getWrapT() const
FMT_INLINE void print(format_string< T...> fmt, T &&...args)
Definition: core.h:2903
bool getMipMap() const
RE_TextureCompare
png_structrp int png_fixed_point red
Definition: png.h:1083
bool isMutable() const
Definition: RE_OGLTexture.h:67
GLint GLint GLint GLint zoffset
Definition: glcorearb.h:477
void setFormat(RE_GPUType data, int vectorsize, RE_TextureFormatExtra format_extra=RE_TEXTURE_FORMAT_EXTRA_NONE)
Definition: format.h:1821
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glcorearb.h:1297
GLenum src
Definition: glcorearb.h:1793