
The Application Layer
This is where your program invokes drawing commands. The application acts as a controller of the overall process and manages processes such as: creating windows, threads, memory allocation, complex user data-types, and making calls to 3rd party libraries such as OpenGL or DirectX.
The Abstraction Layer
This contains the OpenGL or DirectX API implementations. The Abstraction layer serves as a dispatch to the next layer by implementing hardware-level functionality in a usable and standardized format. In C style terminology, you can think of the Application Layer as the header file which contains only the definitions whereas the Abstraction Layer represents the actual implementation.
The Device Driver
The Abstraction Layer passes its command to the Device Driver (a software communication layer to the hardware). This file can be quite large in size since it interact with so many different pieces.
The Hardware
The hardware simply executes the commands given to it by the Device Driver.