Housekeeping: Let's improve our shader loading routine 1. open/read/close is unix-specific fopen/fread/fclose works better for Windows fseek/ftell/rewind to figure out file size malloc Couldn't we just use fstat? 2. Compilation errors Query, and bail out if we didn't build it example_engine has an example here 3. We can make a helper function for this Textures! A texture is an image applied to an object It allows more detailed specification of colors If you didn't need fancy colors, you don't need these Simple and straitforward textures: Just a picture applied to something Some of you did this in Blender Same idea basically Texture coordinate system Model coordinates are x, y, z Texture coordinates use u and v Range is 0.0 to 1.0 Make these coordinates is called uv mapping Easy for a cube Not as easy for other shapes! To put a texture on an object, we need: Model vertices (like before) Texture coordinates An actual texture We don't need colors if we're using textures No reason to waste memory, it's expensive! Remember to use glActiveTexture and glBindTexture when drawing