You create storage for a Texture and upload pixels to it with glTexImage2D (or similar functions, as appropriate to the type of texture). MyTexture :: MyTexture ( const char * pfilePath ) Texture upload and pixel reads For example, one might have a texture object that has a constructor and a destructor like the following: In an object-oriented language like C++, it is often useful to have a class that wraps an OpenGL Object. In case of a core extension, you should check for both the version and the presence of the extension if either is there, you can use the functionality. The correct behavior is to check for the presence of the extension if you want to use the extension API, and check the GL version if you want to use the core API. One of the possible mistakes related to this is to check for the presence of an extension, but instead using the corresponding core functions. Common Mistakes when using deprecated functionality.Mistakes related to measuring Performance.Unexpected Results you can get when using OpenGL.There are also other articles explaining common mistakes: 31 glGetFloatv glGetBooleanv glGetDoublev glGetIntegerv.30 Disable depth test and allow depth writes.22 Selection and Picking and Feedback Mode.9 Checking For Errors When You Compile Your Shader.