OpenGL(Open Graphics Library)は、GPUに2D・3Dの描画を命令するためのAPI仕様です。1992年に登場し、最新版は2017年に公開された4.6です。「今も使えるのか」「Windows 11ではどこから入手するのか」「Vulkanと何が違うのか」で迷いやすい技術なので、この記事では仕様と実装の関係、主要バージョンの履歴と4.6の新機能、Windows 11での入手と確認の手順、他APIとの選び分けを、macOSでのビルド・実行結果を交えて整理します。
まとめ:OpenGLの最新バージョンと2026年時点での使いどころ
- OpenGLはSGIが1992年に公開した描画APIの仕様で、2006年からKhronos Groupが管理しています。命令を実際に処理する実装はGPUドライバの中にあります。
- 最新版はOpenGL 4.6(2017年7月31日公開)とGLSL 4.60です。4.6ではSPIR-V形式のシェーダー読み込みと異方性フィルタリングなどがコア機能に入りました。
- Windows 11でOpenGL 3.x/4.xを使うときの入手先は、NVIDIA・AMD・IntelなどGPUメーカーのドライバです。OpenGLだけを単体で入れる公式インストーラーはありません。
- AppleはmacOS 10.14でOpenGLを非推奨にしました。macOS 26.6.2で作成できたコンテキストは4.1までで、4.3で入ったcompute shaderは作成できませんでした。
- 新規のゲームや高負荷な描画ならVulkan・DirectX 12・Metal、学習ならOpenGL 3.3以降のcore profile、既存のCAD・可視化ツールの保守なら既存コードが必要とする版とプロファイルを選びます。
OpenGLの定義と仕様・実装の役割分担
OpenGLはライブラリ製品ではなく、関数名・引数・振る舞いを定めた仕様書です。仕様をKhronos Groupが策定し、GPUメーカーがドライバとして実装します。アプリは glDrawArrays のような関数を呼ぶだけで、どのGPUでもドライバが同じ意味の命令として処理します。
起源はSGI(Silicon Graphics)が自社ワークステーション向けに持っていたIRIS GLです。これを他社も実装できる標準として整理し、1992年6月30日にOpenGL 1.0が公開されました。仕様の管理は業界団体OpenGL ARBが担い、2006年7月31日にARBがKhronos Groupへの移管を決議しています。
APIはC言語の関数として定義され、GPU上で動く処理はGLSL(OpenGL Shading Language)という別の言語で書きます。
OpenGLのバージョン履歴と4.6の新機能
「OpenGL 3.3」「4.6」といった版の違いは、使える機能の違いです。3.2以降の公開日は、Khronosが公開しているOpenGL 4.6 core profile仕様書と4.2仕様書の付録の記載です。
| 版 | 公開 | 主な追加・変更 |
|---|---|---|
| 1.0 | 1992年6月30日 | 固定機能パイプライン |
| 2.0 | 2004年 | GLSLを仕様に統合 |
| 3.0 | 2008年 | 非推奨機能を定義 |
| 3.1 | 2009年 | 非推奨機能をコアから削除 |
| 3.2 | 2009年8月3日 | core/compatibility profile |
| 3.3 | 2010年3月11日 | 3.x系の最終版 |
| 4.0 | 2010年3月11日 | テッセレーションシェーダー |
| 4.1 | 2010年7月26日 | OpenGL ES 2.0互換機能 |
| 4.2 | 2011年8月8日 | シェーダーからの画像読み書き |
| 4.3 | 2012年8月6日 | compute shader、デバッグ出力 |
| 4.4 | 2013年7月22日 | 不変バッファ(buffer storage) |
| 4.5 | 2014年8月11日 | Direct State Access |
| 4.6 | 2017年7月31日 | SPIR-Vシェーダー、異方性フィルタ |
3.3と4.0は同じ日に公開されています。Khronosの4.0の発表によると、3.3は4.0の機能をできるだけ前世代のGPUでも使えるようにする目的で同時に策定された版です。古いGPUや仮想環境を対象に含めるなら3.3、コア機能としてテッセレーションを使うなら4.0以上、compute shaderを使うなら4.3以上が必要です。
OpenGL 4.6で追加された機能
4.6仕様書の付録J「New Features」には、次の拡張がコア機能に取り込まれたと記載されています。
GL_ARB_gl_spirv・GL_ARB_spirv_extensions:SPIR-V形式のシェーダーを読み込める。GLSLを実行時にドライバでコンパイルする代わりに、事前に変換したバイナリを渡せるGL_ARB_texture_filter_anisotropic:斜めから見たテクスチャをぼやけにくくする異方性フィルタリング。長く拡張機能として扱われていたGL_ARB_indirect_parameters・GL_ARB_shader_draw_parameters:前者は間接描画の回数をバッファから読み取る機能、後者は描画IDやbaseVertex・baseInstanceを頂点シェーダーから参照する機能GL_KHR_no_error:エラー検出を省いたコンテキストを作れる。開発中のデバッグには向かず、検証済みの製品ビルド用GL_ARB_polygon_offset_clamp、GL_ARB_pipeline_statistics_query、GL_ARB_transform_feedback_overflow_query、GL_ARB_shader_atomic_counter_ops、GL_ARB_shader_group_vote
同じ付録には「4.6のcore profileで新たに非推奨になった機能はない」とも書かれています。仕様上、4.6は同じプロファイルの4.5と上位互換ですが、ドライバ更新後のアプリの動作まで保証するものではありません。
4.6以降の仕様の更新状況
Khronosの仕様レジストリでは、2026年10月時点でも4.6が現行仕様です。新しい版は出ていませんが、4.6の仕様書は2022年5月5日付けの改訂版、GLSL 4.60は2023年8月14日付けの改訂版が掲載されており、記述の修正は続いています。Khronosの新機能はVulkanで追加されており、Vulkanの仕様リポジトリでは2026年10月2日に1.4.365がタグ付けされています。
core profileとcompatibility profileの違い(実行結果)
OpenGL 3.2で導入されたプロファイルは、古い命令を使えるかどうかの切り替えです。core profileでは glBegin/glEnd のような固定機能の命令が使えず、頂点バッファとシェーダーで描画します。compatibility profileは従来版との後方互換を保ちます。
同じGPUでも、どちらを要求するかで報告される版が変わります。macOS 26.6.2・AMD Radeon Pro 5500Mの環境で、CGLからプロファイルだけを変えてコンテキストを作り glGetString を実行した結果が次の表です。
| 要求したプロファイル | GL_VERSION | GLSL |
|---|---|---|
| Legacy(互換) | 2.1 ATI-7.1.6 | 1.20 |
| 3.2 Core | 4.1 ATI-7.1.6 | 4.10 |
core側のコンテキストで glBegin を呼ぶと、描画はされず glGetError が0x502(GL_INVALID_OPERATION)を返しました。古い入門書のコードを動かして何も映らないときは、まずプロファイルの不一致を疑ってください。
Windows 11でOpenGLを入手・確認する手順
MicrosoftのWin32向けOpenGLドキュメントが扱う版は1.1です。Windowsに含まれる opengl32.dll はアプリからの呼び出しを受ける窓口で、OpenGLランタイムがレジストリを見て、GPUドライバに含まれるICD(Installable Client Driver)を読み込む仕組みです。3.x/4.xの機能を提供しているのはこのICDなので、「OpenGL 4.6をインストールする」とはGPUのドライバを入れることを指します。
GPUを確認してドライバを入れる手順
- タスクマネージャーを開き、「パフォーマンス」タブの「GPU」で右上に表示される製品名を確認する(GPUが2つあるノートPCは両方を控える)
- 製品名のメーカー(NVIDIA・AMD・Intel)の公式サイトで、その製品とWindows 11用のドライバを入手してインストールする。ノートPCはPCメーカーのサポートページが推奨ドライバを配っていることもある
- PCを再起動し、次の節の方法で報告される版が上がったかを確かめる
ゲームや3DCGソフトが「OpenGL 4.x が必要」と表示して起動しないときも、この手順で解決することが多いです。ただし、対応できる版の上限はGPUの世代で決まります。Intelの内蔵・単体GPUの対応API表では、Arc A/Bシリーズが4.6なのに対し、2011年前後のHD Graphics 2000/3000は3.1です。最新ドライバを入れても版が上がらなければ、そのGPUでは要件を満たせません。
対応バージョンを確認する方法
- Windows:realtech VRの「GLview(旧OpenGL Extensions Viewer)」で、対応バージョンと拡張機能の一覧を見る
- Linux:mesa-utilsの
glxinfo -Bを実行し、「OpenGL core profile version string」の行を見る - 自作プログラム:コンテキスト作成後に
glGetString(GL_VERSION)を出力する(後述のコードで表示しています)
前節の実行結果のとおり、coreとcompatibilityのどちらで問い合わせたかで数字は変わります。アプリの要件と照らすときは、必要な版に加えて、core/compatibilityのどちらを要求するかも確認してください。
ドライバがOpenGLを持たないPC向けのCompatibility Pack
MicrosoftはMicrosoft Storeで「OpenCL, OpenGL, and Vulkan Compatibility Pack」を無償配布しています(ストアの最終更新は2026年9月2日)。対象はOpenGLのハードウェアドライバが既定で入っていないWindows 10/11のPCで、x86・x64・Arm64のいずれでも入ります。OpenGLの命令をDirectX 12へ変換して実行し、ストアの説明では「OpenGL 3.3以前のアプリをサポートし、4.6までのアプリも動く場合がある」という書き方です。変換にはMicrosoftがMesaへ提供したGLon12が使われています。4.x必須のソフトを確実に動かしたい場合は、この互換パックに頼らずネイティブドライバのあるGPUを選んでください。
OpenGL・Vulkan・DirectX・Metalの違いと選び方
4つのAPIは、管理主体・対応OS・GPUを直接制御する度合いで分かれます。
| API | 管理 | 主な対応OS | 制御の粒度 |
|---|---|---|---|
| OpenGL 4.6 | Khronos | Windows/Linux | 高水準 |
| Vulkan 1.4 | Khronos | Windows/Linux/Android | 低水準 |
| DirectX 12 | Microsoft | Windows/Xbox | 低水準 |
| Metal | Apple | macOS/iOS | 低水準 |
OpenGLはドライバがメモリ管理や命令の順序づけを肩代わりするため、後述の三角形の例はエラー処理込みで70行程度で済みます。Vulkanはそれらをアプリ側で明示的に管理する設計で、同じ描画でも初期化のコードは大幅に増えますが、マルチスレッドでの命令発行やCPU負荷を細かく制御できます。KhronosのVulkan Guideも、VulkanをOpenGLの直接の置き換えではないと説明しています。ブラウザやネイティブで共通のコードを書く選択肢としては、WebGPUの設計に沿ったRustのライブラリ「wgpu」もあります。
OpenGLの設計が足かせになる場面
OpenGLの命令は「現在のコンテキスト」に対して発行されます。Microsoft LearnのwglMakeCurrentの説明にあるとおり、1つのレンダリングコンテキストを同時にカレントにできるスレッドは1つだけです。複数スレッドで同時にOpenGL命令を発行するには、それぞれ別のコンテキストが必要です。同じリソースを使う場合は、共有可能なオブジェクトの共有を設定します。描画命令を複数のCPUコアで並列に組み立てたい大規模なゲームでは、この制約がCPU側の上限になります。
もう1つはドライバ依存です。GLSLのコンパイルはドライバが実行時に行うため、同じシェーダーがあるメーカーのドライバでは通り、別のメーカーでは警告やエラーになることがあります。4.6のSPIR-V対応はこの差を減らす手段ですが、後述のとおりmacOSでは使えません。
新規開発でOpenGLを選ばない場面
macOSやiOSを正式サポートに含める製品で、OpenGLを新規に採用するのは避けるべきです。AppleはApple silicon向けの移行資料で、OpenGLのサポートは将来のmacOSで削除される可能性があるとしてMetalへの移行を促しています。macOS 26のリリースノートでは、Carbon向けのAGLをSDKから外す一方で「OpenGL still remains in the SDK」と明記され、2026年10月20日に確認したmacOS 27のリリースノートにも、OpenGLの削除の記載はありません。ただし将来も提供が続く保証はなく、版の上限が4.1で止まっていること自体が制約です。
前述のmacOS 26.6.2の環境で、3.3 coreを要求して作ったコンテキスト(実際には4.1)に機能を問い合わせた結果は次のとおりでした。
- 拡張機能は46個で、
GL_ARB_compute_shader・GL_ARB_direct_state_access・GL_ARB_gl_spirvはいずれも含まれない glCreateShader(GL_COMPUTE_SHADER)は0を返し、glGetErrorは0x500(GL_INVALID_ENUM)
この検証環境のApple標準のOpenGL実装では、compute shader・Direct State Access・SPIR-V入力を前提にしたコードは動きません。Appleは2018年の非推奨化以降Metalへの移行を求めているため、他のMacでも4.3以降のコア機能を前提にした設計は避けるのが安全です。Windows専用の高負荷なゲームも、DirectX 12かVulkanを前提に設計します。
OpenGLが適しているのは、グラフィックスの原理を学ぶ段階、既存のCADや科学技術計算の可視化ツールを保守する場合、描画負荷の低いツールをWindowsとLinuxで共通化したい場合です。MesaのZinkはOpenGLの命令をVulkanの呼び出しに変換し、GPUが異方性フィルタやdraw indirect countなどの機能を持っていればOpenGL 4.6まで提供できるため、OpenGLで書いた資産をVulkanしかない環境で動かす手段もあります。
OpenGL開発の最小構成:GLFW・GLADと三角形の描画コード
OpenGL自体はウィンドウを作る機能も行列計算の機能も持たないため、実際の開発では補助ライブラリを組み合わせます。
GLFW・GLAD・GLEW・GLMの役割分担
GLFWはウィンドウとOpenGLコンテキストの作成、キーボードやマウスの入力を受け持ちます。現行版は2026年7月31日公開の3.5.1です。GLADとGLEWは、ドライバ内のOpenGL関数を実行時に読み込むローダーで、役割は同じです。GLEWは2026年1月に2.3.1が出ており今も更新されています。GLADは必要なAPIの版を指定してローダーのソースを生成する方式で、GLAD 2はPythonパッケージ glad2(2.0.8)を入れて glad --api gl:core=3.3 --out-path glad c と実行すると生成できます。
3Dの座標変換で使う行列やベクトルの計算は、GLSLと同じ型名・関数名で書けるヘッダーのみのC++ライブラリGLM(現行1.0.3)を使うのが一般的です。古い入門書に出てくるGLUの gluPerspective などは固定機能時代のもので、core profileでは使いません。
core profileで三角形を描く最小コード
次のコードは、OpenGL 3.3 core profileを要求してウィンドウを開き、オレンジの三角形を描きます。macOS 26.6.2(Intel Mac)でGLFW 3.5.1と上記のGLAD生成コードを使ってビルドし、2026年10月20日に描画後の中心のピクセルがRGB(255,128,0)、隅が背景色のRGB(25,25,25)になることを確認しました。
#include <glad/gl.h>
#include <GLFW/glfw3.h>
#include <stdio.h>
static const char *vsSrc =
"#version 330 core\n"
"layout(location = 0) in vec2 aPos;\n"
"void main() { gl_Position = vec4(aPos, 0.0, 1.0); }\n";
static const char *fsSrc =
"#version 330 core\n"
"out vec4 FragColor;\n"
"void main() { FragColor = vec4(1.0, 0.5, 0.0, 1.0); }\n";
int main(void) {
if (!glfwInit()) return 1;
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);
GLFWwindow *win = glfwCreateWindow(640, 480, "triangle", NULL, NULL);
if (!win) { glfwTerminate(); return 1; }
glfwMakeContextCurrent(win);
if (!gladLoadGL(glfwGetProcAddress)) return 1;
printf("GL_VERSION: %s\n", glGetString(GL_VERSION));
GLuint vs = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vs, 1, &vsSrc, NULL);
glCompileShader(vs);
GLuint fs = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fs, 1, &fsSrc, NULL);
glCompileShader(fs);
GLuint prog = glCreateProgram();
glAttachShader(prog, vs);
glAttachShader(prog, fs);
glLinkProgram(prog);
GLint linked;
glGetProgramiv(prog, GL_LINK_STATUS, &linked);
if (!linked) {
char log[1024];
glGetProgramInfoLog(prog, sizeof(log), NULL, log);
fprintf(stderr, "%s\n", log);
glfwTerminate();
return 1;
}
float vertices[] = { -0.5f, -0.5f, 0.5f, -0.5f, 0.0f, 0.5f };
GLuint vao, vbo;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), (void *)0);
glEnableVertexAttribArray(0);
while (!glfwWindowShouldClose(win)) {
int fbWidth, fbHeight;
glfwGetFramebufferSize(win, &fbWidth, &fbHeight);
glViewport(0, 0, fbWidth, fbHeight);
glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(prog);
glDrawArrays(GL_TRIANGLES, 0, 3);
glfwSwapBuffers(win);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
ビルドは、GLFWとpkg-configを入れたmacOS/Linuxなら cc main.c glad/src/gl.c -Iglad/include $(pkg-config --cflags --libs glfw3) -o triangle のように、生成したGLADのソースを一緒にコンパイルし、./triangle で実行します。3.3を要求しましたが、上記のmacOS 26.6.2での実行結果は GL_VERSION: 4.1 ATI-7.1.6 でした。要求した版と互換性のある、より新しい版が返ることがあるためです。
Retinaディスプレイでは、640×480で作ったウィンドウのフレームバッファが1280×960になりました。glViewport やピクセル座標を指定するときは、ウィンドウサイズではなく glfwGetFramebufferSize で取得した値を使ってください。
OpenGL ESとWebGLとの関係
OpenGL ESはスマートフォンや組み込み機器向けのOpenGLの系統で、現行版は3.2です。ブラウザで3D描画を行うWebGLの2.0はOpenGL ES 3.0から派生した仕様で、JavaScriptから呼び出します。Windows版のChromeとFirefoxは、OpenGL ESの命令をDirect3DやVulkanなどへ変換するANGLEを既定のWebGLバックエンドとして使っています。
ブラウザ向けの3D表現を作るなら、WebGLを直接書くより、Three.jsのような3D描画ライブラリから始めるほうが実装量を抑えられます。2Dの描画が中心なら、PixiJSも候補です。
よくある質問
OpenGLは廃止されるのですか?今から学ぶ意味はありますか?
Khronosの仕様レジストリでは、4.6が現在も現行仕様として掲載されています。非推奨にしたのはAppleで、macOSでは互換性のためにAPIが残されているものの、将来削除される可能性が示されています。頂点バッファ、シェーダー、座標変換といったOpenGLで学ぶ概念はVulkan・DirectX 12・Metalでも共通するため、グラフィックスの入門としての価値は残っています。業務で高負荷な描画を新規に作るなら、最初からVulkanなどを検討してください。
OpenGLに対応したグラフィックボードはどう選べばよいですか?
基準は、使いたいソフトの動作要件に書かれたOpenGLの版を、GPUとそのドライバが満たしているかどうかです。GPUメーカーの製品仕様表で対応するOpenGLの版を確認し、Khronos Groupが公開している適合製品の一覧も参考にします。CADソフトは特定のGPUとドライバの組み合わせだけを動作保証していることがあるため、ソフトウェア側の認定リストも確認してください。
OpenGLは無料で使えますか?ライセンスは必要ですか?
アプリからOpenGLのAPIを呼び出すこと自体に、利用料や契約は必要ありません。OpenGLの実装はGPUドライバに含まれており、ウィンドウ作成に使うGLFWはクローズドソースのソフトへの静的リンクも認めるzlib/libpngライセンスです。Khronos Groupとの手続きが関わるのは、ドライバなどOpenGLの実装を開発し、適合製品として公表する側です。
OpenGLはどのプログラミング言語で使いますか?
APIがC言語で定義されており、C/C++から呼び出せます。PythonはPyOpenGL、JavaはLWJGL、C#はOpenTKといったバインディングを通して、同じ関数を呼び出せます。アプリ側の言語にかかわらず、シェーダーは通常GLSLで記述します。OpenGL 4.6ではSPIR-V形式で渡すこともできます。ブラウザで動かしたい場合は、OpenGL ES 3.0をもとにしたWebGL 2.0をJavaScriptから使います。
OpenGLの知識が求められる仕事にはどんなものがありますか?
ゲームエンジンや描画エンジンの開発、CAD・CAEや医用画像などの可視化ソフト、車載メーターや組み込み機器のUI(OpenGL ESが中心)が代表的な分野です。既存製品はOpenGLで書かれ、新規部分はVulkanやDirectX 12で作る職場もあるため、OpenGLに加えてC++、線形代数、GLSL、いずれかの低水準APIを扱えると対応できる案件が広がります。