KEMBAR78
GFX Part 4 - Introduction to Texturing in OpenGL ES | PPTX
TEXTURING
2014DEFINITION
 Texture – A bitmap buffer in memory, usually containing color data
 Textures are used for showing better realism in scenes
GFX2014 Advanced Graphics Workshop, Bangalore
TEXTURES FOR REALISM
3
2014TEXTURING 3D OBJECTS
 Mapping from a bitmap to a 3D object involves matching the texture coordinates
to the object surface
 Texture coordinates are calculated along with the vertex coordinates
 3D tools output Texture coordinates along with vertex information, for the scene
Approach of data transfers
2014
CORRECT APPROACH OF DATA
TRANSFERS
1. Generate Object (ex, glGenBuffers, glGenTextures)
2. Bind Object to an ID “xyz” (glBindBuffer(xyz), ..)
3. Transfer data to Object (glBufferData, glTexImage2D)
4. Unbind (glBindBuffer(0))
  After this point, the data remains bound to “xyz” and is managed by GPU.
 Can be accessed later by referencing “xyz”
  Applies to VBOs, Textures, …
 Note the implicit “no atomicity” – needs locking
 Pixel Buffer Objects and performance
subTexImage2D
2014HOW TO UPDATE REGIONS ?
 It is possible to update selected regions of already uploaded textures
 Using glTexSubImage2D
 In embedded systems, not used widely
 Performance implications of read-back path
 Remember the client-server paradigm
6
Texture formats
2014TEXTURING BASICS
 Texture Formats available
 RGB* formats, Luminance only formats
 Relevance of YUV
 Texture Filtering
 Maps texture coordinates to object coordinates – think of wrapping cloth over object
 Mipmaps
 Local optimisation – use pre-determined “reduced” size images, if object is far away
from viewer – as compared to filtering full image
 Objective is to reduce bandwidth, not necessarily higher quality
 Application can generate and pass through TexImage2D() for multiple levels
 GPU can generate using GenerateMipMap()
 Occupies more memory
Uv mapping
2014TEXTURING 2D OBJECTS
 Mapping from a bitmap to a rectangle is
straightforward
 0:1 range maps to 0:1 of object size
 TexParameter determines filtering mode
 TexParameter determines REPEAT
 TexCoordinates determine if texture extends to
full size of object or not
S,T = {0:1}
Upscaled
Texcoords {0:10}
+ REPEAT
texture
object
Non-image textures
2014NON-IMAGE TEXTURES
 Textures need not be image data
 Textures can be used to pass per-pixel “attributes” to the fragment shaders
 Bump-maps and similar techniques for passing normal information
 light-maps for lighting information
 ….
9
compression
2014TEXTURE COMPRESSION TYPES
 GLES spec supports RGBA textures, Luminance …
 To reduce memory bandwidth, compression used
 Texture Compression major types
 PVRTC, ETC1, Others
 Android primarily supports ETC1
 iOS supports PVRTC (and no other)
 Extension support queryable using GL API queries
 How to store this information in an uniform manner ?
 Texture file formats
 PVRTC (using Textool converter from IMG) commonly used
 KTX file format
KTX
2014KHRONOS KTX FILE FORMAT
 To render a texture, steps to be used today:
 Application needs apriori knowledge of texture type, format, storage type, mipmap
levels, and filename or the buffer data itself
 Then load into server using TexImage2D()
 Proprietary formats exist to separate this application+texture dependency –
 ex, PVRT from IMG
 ETC from Ericsson
 KTX file format from Khronos is a standard way to store texture information, and
the texture itself
 See next slide for structure of the file
 http://www.khronos.org/opengles/sdk/tools/KTX/
2014KTX FORMAT …
Passing coords
2014TEXTURE COORDINATES TO GPU
 Texture coordinates are passed to GPU as “Attributes” along with the vertices
 Gen-bind-bufferdata, then bindAttrib
 Quiz:
 When does the binding actually come into effect ?
WebGL/Textures
2014NOTE ON WEBGL AND TEXTURES
 Because of the way file loads work on browsers (asynchronous), texture loading
may not happen before the actual draw
 Expect black screen for a very short-while till the Texture image loads from the
website
 On native applications, due to the synchronous nature of loading the texture this
issue will not be present
Programming
PROGRAMMING WITH TEXTURES
 bindTexture
 pixelStorei (webGL only)
 UNPACK_FLIP_Y_WEBGL
 texImage2D
 texParameteri
 TEXTURE_MAG_FILTER
 TEXTURE_MIN_FILTER
 Note: WebGL “null” binding instead of
“0”
 Point Textures
 Rectangular Texture
2014LAB L2 - TEXTURING

GFX Part 4 - Introduction to Texturing in OpenGL ES

  • 1.
  • 2.
    2014DEFINITION  Texture –A bitmap buffer in memory, usually containing color data  Textures are used for showing better realism in scenes GFX2014 Advanced Graphics Workshop, Bangalore
  • 3.
  • 4.
    2014TEXTURING 3D OBJECTS Mapping from a bitmap to a 3D object involves matching the texture coordinates to the object surface  Texture coordinates are calculated along with the vertex coordinates  3D tools output Texture coordinates along with vertex information, for the scene Approach of data transfers
  • 5.
    2014 CORRECT APPROACH OFDATA TRANSFERS 1. Generate Object (ex, glGenBuffers, glGenTextures) 2. Bind Object to an ID “xyz” (glBindBuffer(xyz), ..) 3. Transfer data to Object (glBufferData, glTexImage2D) 4. Unbind (glBindBuffer(0))   After this point, the data remains bound to “xyz” and is managed by GPU.  Can be accessed later by referencing “xyz”   Applies to VBOs, Textures, …  Note the implicit “no atomicity” – needs locking  Pixel Buffer Objects and performance subTexImage2D
  • 6.
    2014HOW TO UPDATEREGIONS ?  It is possible to update selected regions of already uploaded textures  Using glTexSubImage2D  In embedded systems, not used widely  Performance implications of read-back path  Remember the client-server paradigm 6 Texture formats
  • 7.
    2014TEXTURING BASICS  TextureFormats available  RGB* formats, Luminance only formats  Relevance of YUV  Texture Filtering  Maps texture coordinates to object coordinates – think of wrapping cloth over object  Mipmaps  Local optimisation – use pre-determined “reduced” size images, if object is far away from viewer – as compared to filtering full image  Objective is to reduce bandwidth, not necessarily higher quality  Application can generate and pass through TexImage2D() for multiple levels  GPU can generate using GenerateMipMap()  Occupies more memory Uv mapping
  • 8.
    2014TEXTURING 2D OBJECTS Mapping from a bitmap to a rectangle is straightforward  0:1 range maps to 0:1 of object size  TexParameter determines filtering mode  TexParameter determines REPEAT  TexCoordinates determine if texture extends to full size of object or not S,T = {0:1} Upscaled Texcoords {0:10} + REPEAT texture object Non-image textures
  • 9.
    2014NON-IMAGE TEXTURES  Texturesneed not be image data  Textures can be used to pass per-pixel “attributes” to the fragment shaders  Bump-maps and similar techniques for passing normal information  light-maps for lighting information  …. 9 compression
  • 10.
    2014TEXTURE COMPRESSION TYPES GLES spec supports RGBA textures, Luminance …  To reduce memory bandwidth, compression used  Texture Compression major types  PVRTC, ETC1, Others  Android primarily supports ETC1  iOS supports PVRTC (and no other)  Extension support queryable using GL API queries  How to store this information in an uniform manner ?  Texture file formats  PVRTC (using Textool converter from IMG) commonly used  KTX file format KTX
  • 11.
    2014KHRONOS KTX FILEFORMAT  To render a texture, steps to be used today:  Application needs apriori knowledge of texture type, format, storage type, mipmap levels, and filename or the buffer data itself  Then load into server using TexImage2D()  Proprietary formats exist to separate this application+texture dependency –  ex, PVRT from IMG  ETC from Ericsson  KTX file format from Khronos is a standard way to store texture information, and the texture itself  See next slide for structure of the file  http://www.khronos.org/opengles/sdk/tools/KTX/
  • 12.
  • 13.
    2014TEXTURE COORDINATES TOGPU  Texture coordinates are passed to GPU as “Attributes” along with the vertices  Gen-bind-bufferdata, then bindAttrib  Quiz:  When does the binding actually come into effect ? WebGL/Textures
  • 14.
    2014NOTE ON WEBGLAND TEXTURES  Because of the way file loads work on browsers (asynchronous), texture loading may not happen before the actual draw  Expect black screen for a very short-while till the Texture image loads from the website  On native applications, due to the synchronous nature of loading the texture this issue will not be present Programming
  • 15.
    PROGRAMMING WITH TEXTURES bindTexture  pixelStorei (webGL only)  UNPACK_FLIP_Y_WEBGL  texImage2D  texParameteri  TEXTURE_MAG_FILTER  TEXTURE_MIN_FILTER  Note: WebGL “null” binding instead of “0”  Point Textures  Rectangular Texture
  • 16.
    2014LAB L2 -TEXTURING