GLSL
シェーダープログラムを利用して描画するには、描画命令を発行する前にglUseProgram()で現在のOpenGLコンテキストにプログラムオブジェクトをバインドしておく必要がある。
シェーダープログラムのコンパイルやリンクは時間のかかる処理であり、アプリケーション初期化のボトルネックとなりうるため、直近のソースコード文字列に対応するコンパイル結果はドライバー側でキャッシュされる実装になっていることも多い。なお、OpenGL 4.1で標準化されたGL_ARB_get_program_binaryにより、コンパイル済みバイナリのシリアライズ・逆シリアライズが拡張としてサポートされるようになったが、バイナリがベンダー間で互換性のある中間形式であるかどうかは保証されない。OpenGL 4.5で標準化されたGL_ARB_parallel_shader_compileにより、マルチスレッドを利用したシェーダーの並列コンパイルが拡張としてサポートされるようになった。デバイスドライバーがGLSLコンパイラを内蔵していることから、ドライバーによってシェーダープログラムのコンパイル結果や実行結果が異なる可能性があるなどの品質問題も抱えている。
OpenGL 4.6では中間表現SPIR-Vがサポートされるようになり、オフラインコンパイルが可能になったことから、OpenGLでプログラマブルシェーダーを利用するために必ずしもGLSLを利用する必要はなくなった。なお、Direct3Dのシェーディング言語であるHLSLはリリース当初から、コンパイル結果はベンダー非依存のバイトコードで出力され、またコンパイル済みバイナリの読み込みもサポートしていた。