OpenGL is a graphics programming interface that specifies commands, data objects and rendering behavior independently of a particular graphics processor. An application supplies geometric primitives and programs for programmable stages; the implementation transforms, rasterizes and combines their contributions into a framebuffer. Khronos Group publishes the specification, including the distinction between core and compatibility profiles.[ref]
The OpenGL Graphics System Version 4.6 Core Profile by Khronos Group. Chapter 2, OpenGL Fundamentals; Chapter 11, Programmable Vertex Processing
For example, drawing an opaque triangle requires vertex data, appropriate shader programs and a draw command. The triangle can generate fragments during rasterization; a fragment shader determines their candidate outputs, and a depth buffer test can reject hidden contributions. The interface specifies the results these operations must produce, while implementations can use different internal hardware and scheduling. A rendering command's submission is also distinct from completion of the corresponding device work.[ref]
The OpenGL Graphics System Version 4.6 Core Profile by Khronos Group. Chapters 14, 15 and 17, rasterization, fragment shading and per-fragment operations; §2.3, command execution