Using textures
A basic, white triangle is not very exciting to look at. The next obvious improvement to make to our code is making textures available to the fragment shader, so that they can be sampled and applied to our geometry. Unfortunately, OpenGL does not provide a way of actually loading image data, especially since there are so many different formats to keep up with. For that, we are going to use one of our resources listed at the beginning of this chapter, the STB image loader. It is a small, single header C library, used to load image data into a buffer that can later be used by OpenGL, or any other library for that matter.
The texture class
Remember the remark that everything is going to get much easier at this point? It is true. Let us breeze through the texturing process, starting with a class definition for a texture object:
class GL_Texture { public: GL_Texture(const std::string& l_fileName); ~GL_Texture(); void Bind(unsigned int l_unit); private: GLuint m_texture...