SLProject 4.0.000
SLGLTextureIBL Class Reference

Texture object generated in run time from another texture. More...

#include <SLGLTextureIBL.h>

Inheritance diagram for SLGLTextureIBL:
[legend]

Public Member Functions

 SLGLTextureIBL ()
 Default constructor. More...
 
 SLGLTextureIBL (SLAssetManager *assetMgr, SLstring shaderPath, SLGLTexture *sourceTexture, SLVec2i size, SLTextureType texType, SLenum target, SLbool readBackPixels=true, SLint min_filter=GL_LINEAR, SLint mag_filter=GL_LINEAR)
 ctor for generated textures More...
 
virtual ~SLGLTextureIBL ()
 
virtual void build (SLint texID=0)
 
void logFramebufferStatus ()
 
- Public Member Functions inherited from SLGLTexture
 SLGLTexture ()
 Default ctor for all stack instances (not created with new) More...
 
 SLGLTexture (SLAssetManager *assetMgr, const SLVCol4f &colors, SLint min_filter=GL_LINEAR, SLint mag_filter=GL_LINEAR, SLint wrapS=GL_REPEAT, const SLstring &name="2D-Texture")
 ctor for 1D texture with internal image allocation More...
 
 SLGLTexture (SLAssetManager *assetMgr, SLint min_filter, SLint mag_filter, SLint wrapS, SLint wrapT, SLenum target=GL_TEXTURE_2D)
 ctor for empty 2D textures More...
 
 SLGLTexture (SLAssetManager *assetMgr, unsigned char *data, int width, int height, int cvtype, SLint min_filter, SLint mag_filter, SLTextureType type, SLint wrapS, SLint wrapT)
 ctor for 2D textures from byte pointer More...
 
 SLGLTexture (SLAssetManager *assetMgr, const SLstring &imageFilename, SLint min_filter=GL_LINEAR_MIPMAP_LINEAR, SLint mag_filter=GL_LINEAR, SLTextureType type=TT_unknown, SLint wrapS=GL_REPEAT, SLint wrapT=GL_REPEAT)
 ctor for 2D textures with internal image allocation More...
 
 SLGLTexture (SLAssetManager *assetMgr, const SLVstring &imageFilenames, SLint min_filter=GL_LINEAR, SLint mag_filter=GL_LINEAR, SLint wrapS=GL_REPEAT, SLint wrapT=GL_REPEAT, const SLstring &name="3D-Texture", SLbool loadGrayscaleIntoAlpha=false)
 ctor for 3D texture with internal image allocation More...
 
 SLGLTexture (SLAssetManager *assetMgr, SLint depth, const SLstring &imageFilename, SLint min_filter=GL_LINEAR, SLint mag_filter=GL_LINEAR, SLint wrapS=GL_REPEAT, SLint wrapT=GL_REPEAT, const SLstring &name="3D-Texture", SLbool loadGrayscaleIntoAlpha=false)
 ctor for 3D texture from a single file with depth as 3rd dimension More...
 
 SLGLTexture (SLAssetManager *assetMgr, const SLstring &imageFilenameXPos, const SLstring &imageFilenameXNeg, const SLstring &imageFilenameYPos, const SLstring &imageFilenameYNeg, const SLstring &imageFilenameZPos, const SLstring &imageFilenameZNeg, SLint min_filter=GL_LINEAR, SLint mag_filter=GL_LINEAR, SLTextureType type=TT_unknown)
 ctor for cube mapping with internal image allocation More...
 
 ~SLGLTexture () override
 
virtual void build (SLint texUnit)
 
void deleteData ()
 Delete all data (CVImages and GPU textures) More...
 
void deleteDataGpu ()
 Deletes the OpenGL texture objects and releases the memory on the GPU. More...
 
void deleteImages ()
 Deletes the CVImages in _images. No more texture mapping in ray tracing. More...
 
void bindActive (SLuint texUnit=0)
 
void fullUpdate ()
 
void drawSprite (SLbool doUpdate, SLfloat x, SLfloat y, SLfloat w, SLfloat h)
 Draws the texture as 2D sprite with OpenGL buffers. More...
 
void cubeUV2XYZ (SLint index, SLfloat u, SLfloat v, SLfloat &x, SLfloat &y, SLfloat &z)
 Computes the unnormalised vector x,y,z from tex. coords. uv with cubemap index. More...
 
void cubeXYZ2UV (SLfloat x, SLfloat y, SLfloat z, SLint &index, SLfloat &u, SLfloat &v)
 Computes the uv and cubemap image index from a unnormalised vector x,y,z. More...
 
SLstring filterString (SLint glFilter)
 Returns OpenGL texture filter as string. More...
 
void texType (SLTextureType bt)
 
void uvIndex (SLbyte i)
 
void bumpScale (SLfloat bs)
 
void minFiler (SLint minF)
 
void magFiler (SLint magF)
 
void needsUpdate (SLbool update)
 
void textureSize (int width, int height)
 
void deleteImageAfterBuild (SLbool delImg)
 If deleteImageAfterBuild is set to true you won't be able to ray trace the scene. More...
 
SLuint width ()
 
SLuint height ()
 
SLuint depth ()
 
SLbyte uvIndex ()
 
SLint bytesPerPixel ()
 
SLint bytesOnGPU ()
 
SLint bytesInFile ()
 
CVVImage & images ()
 
SLenum target () const
 
SLuint texID () const
 
SLTextureType texType ()
 
SLfloat bumpScale () const
 
SLCol4f getTexelf (SLfloat u, SLfloat v, SLuint imgIndex=0)
 SLGLTexture::getTexelf returns a pixel color from u & v texture coordinates. More...
 
SLCol4f getTexelf (const SLVec3f &cubemapDir)
 SLGLTexture::getTexelf returns a pixel color at the specified cubemap direction. More...
 
SLbool hasAlpha ()
 
SLMat4f tm ()
 
SLbool autoCalcTM3D () const
 
SLbool needsUpdate ()
 
SLstring typeName ()
 Returns the texture type as string. More...
 
SLstring typeShortName ()
 Returns the texture type short. More...
 
bool isTexture ()
 
SLstring minificationFilterName ()
 
SLstring magnificationFilterName ()
 
void build2DMipmaps (SLint target, SLuint index)
 
SLbool copyVideoImage (SLint camWidth, SLint camHeight, CVPixelFormatGL glFormat, SLuchar *data, SLbool isContinuous, SLbool isTopLeft)
 Copies the image data from a video camera into the current video image. More...
 
SLbool copyVideoImage (SLint camWidth, SLint camHeight, CVPixelFormatGL srcFormat, CVPixelFormatGL dstFormat, SLuchar *data, SLbool isContinuous, SLbool isTopLeft)
 
void calc3DGradients (SLint sampleRadius, const function< void(int)> &onUpdateProgress)
 
void smooth3DGradients (SLint smoothRadius, function< void(int)> onUpdateProgress)
 
SLVec2f dudv (SLfloat u, SLfloat v)
 
- Public Member Functions inherited from SLObject
 SLObject (const SLstring &Name="", const SLstring &url="")
 
virtual ~SLObject ()
 
void name (const SLstring &Name)
 
void url (const SLstring &url)
 
const SLstringname () const
 
const SLstringurl () const
 

Protected Member Functions

void renderCube ()
 Renders 2x2 cube, used to project a texture to a cube texture with 6 sides. More...
 
void renderQuad ()
 Renders a 2x2 XY quad, used for rendering and capturing the BRDF integral. More...
 
void readPixels (int width, int height, string name, bool savePNG)
 Reads back the pixels into an image. More...
 
- Protected Member Functions inherited from SLGLTexture
void load (const SLstring &filename, SLbool flipVertical=true, SLbool loadGrayscaleIntoAlpha=false)
 Loads the texture, converts color depth & applies vertical mirroring. More...
 
void load (const SLVCol4f &colors)
 Loads the 1D color data into an image of height 1. More...
 

Protected Attributes

SLuint _cubeVAO = 0
 
SLuint _cubeVBO = 0
 
SLuint _quadVAO = 0
 
SLuint _quadVBO = 0
 
SLGLTexture_sourceTexture
 2D Texture from the HDR Image More...
 
SLGLProgram_shaderProgram
 Shader program to render the texture. More...
 
SLMat4f _captureProjection
 Projection matrix for capturing the textures. More...
 
SLVMat4f _captureViews
 All 6 positions of the views that represent the 6 sides of the cube map. More...
 
SLbool _readBackPixels
 Flag if generated texture should be read back from GPU into cvMat. More...
 
- Protected Attributes inherited from SLGLTexture
CVVImage _images
 Vector of CVImage pointers. More...
 
SLuint _texID
 OpenGL texture ID. More...
 
SLTextureType _texType
 See SLTextureType. More...
 
SLint _width
 Texture image width in pixels (images exist either in _images or on the GPU or on both) More...
 
SLint _height
 Texture image height in pixels (images exist either in _images or on the GPU or on both) More...
 
SLint _depth
 3D Texture image depth (images exist either in _images or on the GPU or on both) More...
 
SLbyte _uvIndex
 Texture coordinate index in SLMesh (0 = default) More...
 
SLint _internalFormat
 Internal OpenGL format. More...
 
SLint _bytesPerPixel
 Bytes per texture image pixel (images exist either in _images or on the GPU or on both) More...
 
SLint _min_filter
 Minification filter. More...
 
SLint _mag_filter
 Magnification filter. More...
 
SLint _wrap_s
 Wrapping in s direction. More...
 
SLint _wrap_t
 Wrapping in t direction. More...
 
SLenum _target
 texture target More...
 
SLMat4f _tm
 texture matrix More...
 
SLuint _bytesOnGPU
 NO. of bytes on GPU. More...
 
SLuint _bytesInFile
 NO. of bytes in file. More...
 
SLbool _autoCalcTM3D
 Flag if texture matrix should be calculated from AABB for 3D mapping. More...
 
SLfloat _bumpScale
 Bump mapping scale factor. More...
 
SLbool _resizeToPow2
 Flag if image should be resized to n^2. More...
 
SLGLVertexArray _vaoSprite
 Vertex array object for sprite rendering. More...
 
std::atomic< bool > _needsUpdate {}
 Flag if image needs an single update. More...
 
std::mutex _mutex
 Mutex to protect parallel access (used in ray tracing) More...
 
SLbool _deleteImageAfterBuild
 Flag if images should be deleted after build on GPU. More...
 
SLbool _compressedTexture = false
 True for compressed texture format on GPU. More...
 
- Protected Attributes inherited from SLObject
SLstring _name
 name of an object More...
 
SLstring _url
 uniform resource locator More...
 

Additional Inherited Members

- Static Public Member Functions inherited from SLGLTexture
static SLTextureType detectType (const SLstring &filename)
 Detects the texture type from the filename appendix (See SLTexType def.) More...
 
static string internalFormatStr (int internalFormat)
 Returns the internal pixel format from OpenGL. More...
 
- Static Public Attributes inherited from SLGLTexture
static SLfloat maxAnisotropy = -1.0f
 Returns the derivation as [s,t]. More...
 
static SLuint totalNumBytesOnGPU = 0
 Total NO. of bytes used for textures on GPU. More...
 

Detailed Description

Texture object generated in run time from another texture.

This class is mainly used to generate the textures used for reflections in the Image Base Lighting (IBL) techniques. It takes a source texture and projects it into a cube map with different rendering techniques to produces the textures needed in IBL like the irradiance or the prefilter map. This textures can be given to the SLMaterial with IBL. It uses the SLGLFrameBuffer class to render the scene into a cube map. These generated textures only exist on the GPU. There are no images in the SLGLTexture::_images vector.

Constructor & Destructor Documentation

◆ SLGLTextureIBL() [1/2]

SLGLTextureIBL::SLGLTextureIBL ( )
inline

Default constructor.

◆ SLGLTextureIBL() [2/2]

SLGLTextureIBL::SLGLTextureIBL ( SLAssetManager assetMgr,
SLstring  shaderPath,
SLGLTexture sourceTexture,
SLVec2i  size,
SLTextureType  texType,
SLenum  target,
SLbool  readBackPixels = true,
SLint  min_filter = GL_LINEAR,
SLint  mag_filter = GL_LINEAR 
)

ctor for generated textures

ctor for generated textures from hdr textures

◆ ~SLGLTextureIBL()

SLGLTextureIBL::~SLGLTextureIBL ( )
virtual

Member Function Documentation

◆ build()

void SLGLTextureIBL::build ( SLint  texUnit = 0)
virtual

Build the texture into a cube map, rendering the texture 6 times and capturing each time one side of the cube (except for the BRDF LUT texture, which is completely generated by calculations directly with the shader).

Todo:
: Priority 1: These frame buffer ops do not work properly on iOS & Android. This is probably the most difficult OpenGL code in the project.

Reimplemented from SLGLTexture.

◆ logFramebufferStatus()

void SLGLTextureIBL::logFramebufferStatus ( )

◆ readPixels()

void SLGLTextureIBL::readPixels ( int  width,
int  height,
string  name,
bool  savePNG 
)
protected

Reads back the pixels into an image.

◆ renderCube()

void SLGLTextureIBL::renderCube ( )
protected

Renders 2x2 cube, used to project a texture to a cube texture with 6 sides.

◆ renderQuad()

void SLGLTextureIBL::renderQuad ( )
protected

Renders a 2x2 XY quad, used for rendering and capturing the BRDF integral.

Member Data Documentation

◆ _captureProjection

SLMat4f SLGLTextureIBL::_captureProjection
protected

Projection matrix for capturing the textures.

◆ _captureViews

SLVMat4f SLGLTextureIBL::_captureViews
protected

All 6 positions of the views that represent the 6 sides of the cube map.

◆ _cubeVAO

SLuint SLGLTextureIBL::_cubeVAO = 0
protected

◆ _cubeVBO

SLuint SLGLTextureIBL::_cubeVBO = 0
protected

◆ _quadVAO

SLuint SLGLTextureIBL::_quadVAO = 0
protected

◆ _quadVBO

SLuint SLGLTextureIBL::_quadVBO = 0
protected

◆ _readBackPixels

SLbool SLGLTextureIBL::_readBackPixels
protected

Flag if generated texture should be read back from GPU into cvMat.

◆ _shaderProgram

SLGLProgram* SLGLTextureIBL::_shaderProgram
protected

Shader program to render the texture.

◆ _sourceTexture

SLGLTexture* SLGLTextureIBL::_sourceTexture
protected

2D Texture from the HDR Image


The documentation for this class was generated from the following files: