「OpenGL」の版間の差分
126.63.164.70 (会話) による ID:101641802 の版を取り消し 改竄をリバート。記述内容について言及していないサイトを出典として追加するな。冗長な内部リンクを繰り返し張るな。Wikipedia:記事どうしをつなぐ#リンクの冗長・繰返し タグ: 取り消し |
Wineやゲームエンジンに関して追記。 |
||
23行目: | 23行目: | ||
}} |
}} |
||
{{読み仮名_ruby不使用|'''OpenGL'''|オープンジーエル|{{lang-en-short|Open Graphics Library}}}}は、[[クロノス・グループ]] ({{lang-en-short|Khronos Group}}) が策定している、グラフィックスハードウェア向けの2次元/3次元[[コンピュータグラフィックス]]ライブラリである。[[シリコングラフィックス|SGI]]社内で自社のCG[[ワークステーション]]向けにクローズドに策定された[[アプリケーションプログラミングインタフェース|API]]仕様が改良されて公開され、後に大きなシェアを持つに至った。現在は多様な描画デバイスを包括するグラフィックスAPIの[[オープン標準]]規格として策定が行なわれている。 |
{{読み仮名_ruby不使用|'''OpenGL'''|オープンジーエル|{{lang-en-short|Open Graphics Library}}}}は、[[クロノス・グループ]] ({{lang-en-short|Khronos Group}}) が策定している、グラフィックス[[ハードウェア]]向けの2次元/3次元[[コンピュータグラフィックス]]ライブラリである。[[シリコングラフィックス|SGI]]社内で自社のCG[[ワークステーション]]向けにクローズドに策定された[[アプリケーションプログラミングインタフェース|API]]仕様が改良されて公開され、後に大きなシェアを持つに至った。現在は多様な描画デバイスを包括するグラフィックスAPIの[[オープン標準]]規格として策定が行なわれている。 |
||
== 概要 == |
== 概要 == |
||
36行目: | 36行目: | ||
[[オープン標準]]として公開され、幅広い処理系に対応しているため、家庭用・業務用問わず広く普及している。描画デバイスの実装を隠蔽する抽象化層として機能するため、移植性が高い。また、描画演算処理をOpenGLに対応する専用ハードウェア ([[Graphics Processing Unit|GPU]]) に委ねることで非常に高速に動作し([[ハードウェアアクセラレーション]])、[[CPU]]のみによるソフトウェア描画と比較して高いフレームレートを維持したまま高解像度かつ複雑な3Dグラフィックスをリアルタイム描画できる{{efn|3Dグラフィックスの描画では、特に[[ラスタライズ]]処理の負荷が高く、[[画面解像度]]や3Dシーンの複雑度が上がるとCPUでは描画速度を維持することができなくなる。専用のラスタライザユニットを搭載し、また並列処理能力の高いGPUに処理を委譲することで、スケーラビリティを確保することができる。}}。有償・無償の豊富な補助ライブラリがあることも特色として挙げられる。Windows, Mac OS, Linux, BSD等の様々なOSの上で利用可能であり、個人でも無料のソフトウェア群のみでGPUの能力を活用した3Dプログラミング環境を整備できる。開発・実行環境として広範なプラットフォームをサポートすることから、3次元コンピュータグラフィックスの学習や学術研究、クロスプラットフォームな[[クローズドソース]]/[[オープンソースソフトウェア]]開発などにも適している。 |
[[オープン標準]]として公開され、幅広い処理系に対応しているため、家庭用・業務用問わず広く普及している。描画デバイスの実装を隠蔽する抽象化層として機能するため、移植性が高い。また、描画演算処理をOpenGLに対応する専用ハードウェア ([[Graphics Processing Unit|GPU]]) に委ねることで非常に高速に動作し([[ハードウェアアクセラレーション]])、[[CPU]]のみによるソフトウェア描画と比較して高いフレームレートを維持したまま高解像度かつ複雑な3Dグラフィックスをリアルタイム描画できる{{efn|3Dグラフィックスの描画では、特に[[ラスタライズ]]処理の負荷が高く、[[画面解像度]]や3Dシーンの複雑度が上がるとCPUでは描画速度を維持することができなくなる。専用のラスタライザユニットを搭載し、また並列処理能力の高いGPUに処理を委譲することで、スケーラビリティを確保することができる。}}。有償・無償の豊富な補助ライブラリがあることも特色として挙げられる。Windows, Mac OS, Linux, BSD等の様々なOSの上で利用可能であり、個人でも無料のソフトウェア群のみでGPUの能力を活用した3Dプログラミング環境を整備できる。開発・実行環境として広範なプラットフォームをサポートすることから、3次元コンピュータグラフィックスの学習や学術研究、クロスプラットフォームな[[クローズドソース]]/[[オープンソースソフトウェア]]開発などにも適している。 |
||
OpenGL APIは[[C言語]]関数群の形で提供され、またクロノスグループが策定・公開しているのは、OpenGL API仕様のドキュメントおよび[[C言語|C]]/[[C++]]用のヘッダーファイルだが、[[Fortran]]や[[Java]]などの他言語向けのラッパー/バインディングも存在する<ref>[https://www.opengl.org/about/ OpenGL Overview]</ref>。OpenGLの実装は、主にハードウェアベンダーまたは[[オペレーティングシステム]]によって提供される[[デバイスドライバー]]である。 |
OpenGL APIは[[C言語]]関数群の形で提供され、またクロノスグループが策定・公開しているのは、OpenGL API仕様のドキュメントおよび[[C言語|C]]/[[C++]]用のヘッダーファイルだが、[[Fortran]]や[[Java]]などの他言語向けのラッパー/バインディングも存在する<ref>[https://www.opengl.org/about/ OpenGL Overview]</ref>。OpenGLの実装は、主にハードウェアベンダーまたは[[オペレーティングシステム]] (OS) によって提供される[[デバイスドライバー]]である。 |
||
OpenGLの最初の仕様では、[[テクスチャマッピング]]が標準的にサポートされておらず、1997年のOpenGL 1.1でようやく拡張機能から必須機能に格上げとなるなど、ゲーム開発によく使われるようなエフェクト処理のサポートが弱かった。2004年に発表されたOpenGL 2.0で高水準[[シェーディング言語]] ([[GLSL]]) を標準化したが、その後も[[DirectX]] ([[Direct3D]]) と比べて標準化が遅く、必須機能としてのサポート追加は数年遅れとなることが多かった。しかし、OpenGL 4.0のリリース以降はGPUの進化に合わせたOpenGL APIの対応が進み、主要な機能に関しては、OpenGL 4.3以降と[[DirectX]] 11 ([[Direct3D]] 11) 以降との差異はほとんど無くなっている。とはいえ、OpenGLとDirect3Dは、その設計思想の違いから1対1で対応するものではないため、移植性は完全ではなく、また性能面ではハードウェアおよびドライバーのOpenGL/Direct3D最適化レベルに依存する<ref>[https://web.archive.org/web/20160429193919/http://www.ryoyo.co.jp/product/supplier_list/p73/p81-04-02.html QuadroとGeForceの違い |菱洋エレクトロ株式会社], [[Internet Archive]]</ref>ため、利用分野やプラットフォームに応じた住み分けも依然として根強く残っている。 |
OpenGLの最初の仕様では、[[テクスチャマッピング]]が標準的にサポートされておらず、1997年のOpenGL 1.1でようやく拡張機能から必須機能に格上げとなるなど、ゲーム開発によく使われるようなエフェクト処理のサポートが弱かった。2004年に発表されたOpenGL 2.0で高水準[[シェーディング言語]] ([[GLSL]]) を標準化したが、その後も[[DirectX]] ([[Direct3D]]) と比べて標準化が遅く、必須機能としてのサポート追加は数年遅れとなることが多かった。しかし、OpenGL 4.0のリリース以降はGPUの進化に合わせたOpenGL APIの対応が進み、主要な機能に関しては、OpenGL 4.3以降と[[DirectX]] 11 ([[Direct3D]] 11) 以降との差異はほとんど無くなっている。とはいえ、OpenGLとDirect3Dは、その設計思想の違いから1対1で対応するものではないため、移植性は完全ではなく、また性能面ではハードウェアおよびドライバーのOpenGL/Direct3D最適化レベルに依存する<ref>[https://web.archive.org/web/20160429193919/http://www.ryoyo.co.jp/product/supplier_list/p73/p81-04-02.html QuadroとGeForceの違い |菱洋エレクトロ株式会社], [[Internet Archive]]</ref>ため、利用分野やプラットフォームに応じた住み分けも依然として根強く残っている。 |
||
46行目: | 46行目: | ||
もともとOpenGLはワークステーション発祥のグラフィックスAPIであり、工業製品などの設計・製造の過程で用いられる[[CAD]]/[[CAM]]/[[CAE]]で必要となる正確・高精度なモデル描画を最優先の用途としていた。また、[[ポリゴン]]の頂点座標変換や陰影計算などのジオメトリ処理を当初からグラフィックス処理専用チップに実行させることが前提であったため、OpenGL対応ハードウェアを利用することで大量のポリゴンの高速な描画を実現することができた<ref>{{Cite web |title=新連載-語りたい3D系ユーザーのためのOpenGL考察1 |url=https://www.cqpub.co.jp/try/1999-3rd/opengl.htm |website=www.cqpub.co.jp |access-date=2024-08-24}}</ref>。一方、Direct3Dでは当初ジオメトリ処理にCPUを用いており、ハードウェアT&Lに対応したのは1999年リリースのDirect3D 7以降である。またDirect3Dは正確性よりも描画速度が優先されるゲームグラフィックス用途に最適化されていたため、きわどい位置でポリゴンが交差した場合など、描画結果が正確でない場合があった。そのため、利用者からはOpenGLのほうがCADや3次元可視化などの業務用に強いという見方がなされていた。 |
もともとOpenGLはワークステーション発祥のグラフィックスAPIであり、工業製品などの設計・製造の過程で用いられる[[CAD]]/[[CAM]]/[[CAE]]で必要となる正確・高精度なモデル描画を最優先の用途としていた。また、[[ポリゴン]]の頂点座標変換や陰影計算などのジオメトリ処理を当初からグラフィックス処理専用チップに実行させることが前提であったため、OpenGL対応ハードウェアを利用することで大量のポリゴンの高速な描画を実現することができた<ref>{{Cite web |title=新連載-語りたい3D系ユーザーのためのOpenGL考察1 |url=https://www.cqpub.co.jp/try/1999-3rd/opengl.htm |website=www.cqpub.co.jp |access-date=2024-08-24}}</ref>。一方、Direct3Dでは当初ジオメトリ処理にCPUを用いており、ハードウェアT&Lに対応したのは1999年リリースのDirect3D 7以降である。またDirect3Dは正確性よりも描画速度が優先されるゲームグラフィックス用途に最適化されていたため、きわどい位置でポリゴンが交差した場合など、描画結果が正確でない場合があった。そのため、利用者からはOpenGLのほうがCADや3次元可視化などの業務用に強いという見方がなされていた。 |
||
業務用の製品として、正確なモデル描画や安定した動作を保証した[[ビデオカード |
業務用の製品として、正確なモデル描画や安定した動作を保証した[[ビデオカード]](グラフィックスカード)が存在し、これらは主にハードウェアやデバイスドライバーがOpenGLに最適化されていることが謳われている<ref>{{Cite web |title=Quadroとは?GeForceとの違いや性能比較も |url=https://dosparaplus.com/library/details/001019.html |website=法人様向けパソコンならドスパラプラス |access-date=2024-08-25 |language=ja}}</ref><ref>{{Cite web |title=ついに登場!ATI完全オリジナルFireGLカード「FireGL 8800」 |url=https://ascii.jp/elem/000/000/329/329669/ |website=ASCII.jp |access-date=2024-08-25 |language=ja |last=ASCII}}</ref><ref>{{Cite web |title=スーパーコンピューターの系譜 ATIから続くAMDのGPGPU戦略 (1/3) |url=https://ascii.jp/elem/000/001/029/1029971/ |website=ASCII.jp |access-date=2024-08-27 |language=ja |last=ASCII}}</ref>。ただし、Direct3D 11.xとOpenGL 4.xの違いはすでにほとんどなくなっており、Direct3Dであってもドライバーレベルの対応によってOpenGL同様の高精度・高安定性を実現できるようになっていること、またDirect3D 12に至っては両者をしのぐ機能や速度性能を実現していることから、業務用の[[アプリケーションソフトウェア]]であってもWindowsではOpenGLによる描画モードのサポートを終了し、Direct3Dのみをサポートする事例も増えている。詳細は後述の[[#DirectXとの関係]]を参照のこと。 |
||
のちにWindowsだけでなくmacOSやLinuxなどにも[[クロスプラットフォーム|マルチプラットフォーム]]展開されるゲーム開発でもOpenGLが利用されるようになった<ref>{{Cite web |
のちにWindowsだけでなくmacOSやLinuxなどにも移植あるいは[[クロスプラットフォーム|マルチプラットフォーム]]展開される[[パソコンゲーム|PCゲーム]]開発でもOpenGLが利用されるようになった<ref>[https://www.4gamer.net/games/107/G010729/20130322107/ ValveはなぜSource EngineをLinux+OpenGL環境へ移植したのか。GTC 2013のValveセッションレポート]</ref>。[[Android (オペレーティングシステム)|Android]]や[[iOS]]といったモバイルOSで利用可能なOpenGL ESは、OpenGLと類似のAPIであり、異なるOS間でコードを相互移植・流用しやすいというメリットもある<ref>{{Cite web|title=OpenGLとは?OpenGLの基礎をわかりやすく解説!OpenGLのメリットは?導入手順とバージョン確認の方法も確認|url=https://freelance.shiftinc.jp/column/opengl|website=toiroフリーランス|publisher=株式会社SHIFT|access-date=2024-09-01|language=ja}}</ref>。しかし、Windows以外のプラットフォームでもVulkanや[[Metal (API)|Metal]]といった後発のローレベルAPIによる置き換えが進んでいる。Linux上でWindowsアプリケーションを直接実行させるための[[Windows API]]エミュレーションレイヤーである[[Wine]]では、従来はDirect3D互換実装のバックエンドにOpenGLが使われていたが、Vulkanをバックエンドに使うライブラリも開発されている<ref>[https://gihyo.jp/lifestyle/serial/01/ganshiki-soushi-2/0035 第35回 Days of WINE and Struggles again[4] | gihyo.jp]</ref><ref>[https://pc.watch.impress.co.jp/docs/news/1139387.html Linux版SteamにVulkan対応のWine実装でWindowsゲームもプレイ可能に - PC Watch]</ref>。[[Unreal Engine]]や[[Unity (ゲームエンジン)|Unity]]といった[[ゲームエンジン]]では、ゲーム開発者はグラフィックスAPIを直接利用する必要がなく、実行環境に応じて自動的に最適なAPIによるレンダリングバックエンド実装が使われるが、従来のOpenGL/OpenGL ESに加えてローレベルAPIのサポートも追加されている<ref>[https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5.0-release-notes?application_version=5.0 Unreal Engine 5.0 リリース ノート | Unreal Engine 5.0 ドキュメンテーション | Epic Developer Community]</ref><ref>[https://dev.epicgames.com/documentation/ja-jp/unreal-engine/linux-development-requirements-for-unreal-engine Unreal Engine の Linux の開発要件 | Unreal Engine 5.4 ドキュメンテーション | Epic Developer Community]</ref><ref>[https://docs.unity3d.com/ja/2017.4/Manual/GraphicsAPIs.html グラフィックス API サポート - Unity マニュアル]</ref><ref>[https://docs.unity3d.com/ja/2017.4/Manual/Metal.html Metal - Unity マニュアル]</ref>。後述の[[#macOSでの非推奨化]]も参照のこと。 |
||
== 歴史 == |
== 歴史 == |
2024年8月31日 (土) 22:02時点における版
作者 | シリコングラフィックス |
---|---|
開発元 | クロノス・グループ |
初版 | IRIS GL / 1992年 |
最新版 |
4.6
/ 2017年7月31日 |
対応OS | Windows、Mac OS、Linux、BSDなど |
プラットフォーム | クロスプラットフォーム |
対応言語 | C/C++、Java、その他 |
種別 | 3DグラフィックスAPI |
公式サイト |
www |
英: Open Graphics Library)は、クロノス・グループ (英: Khronos Group) が策定している、グラフィックスハードウェア向けの2次元/3次元コンピュータグラフィックスライブラリである。SGI社内で自社のCGワークステーション向けにクローズドに策定されたAPI仕様が改良されて公開され、後に大きなシェアを持つに至った。現在は多様な描画デバイスを包括するグラフィックスAPIのオープン標準規格として策定が行なわれている。
(オープンジーエル、概要
OpenGLは、SGIをはじめ、ヒューレット・パッカード (HP)、サン・マイクロシステムズ(現オラクル)、IBM、SONY-NEWSなどのUNIXワークステーション[注釈 1]のほか、Linux、FreeBSDなどのPC UNIXに加え、Windows、macOS等で使用できるクロスプラットフォームなグラフィックスAPIである。また、モバイルデバイス[注釈 2]や家電など組み込み用途向けのサブセット版であるOpenGL ES (OpenGL for Embedded Systems) 規格も存在する。そのほか、航空機や車載ソリューションといったセーフティクリティカルシステム向けのOpenGL SC規格も存在する[1]。
オープン標準として公開され、幅広い処理系に対応しているため、家庭用・業務用問わず広く普及している。描画デバイスの実装を隠蔽する抽象化層として機能するため、移植性が高い。また、描画演算処理をOpenGLに対応する専用ハードウェア (GPU) に委ねることで非常に高速に動作し(ハードウェアアクセラレーション)、CPUのみによるソフトウェア描画と比較して高いフレームレートを維持したまま高解像度かつ複雑な3Dグラフィックスをリアルタイム描画できる[注釈 3]。有償・無償の豊富な補助ライブラリがあることも特色として挙げられる。Windows, Mac OS, Linux, BSD等の様々なOSの上で利用可能であり、個人でも無料のソフトウェア群のみでGPUの能力を活用した3Dプログラミング環境を整備できる。開発・実行環境として広範なプラットフォームをサポートすることから、3次元コンピュータグラフィックスの学習や学術研究、クロスプラットフォームなクローズドソース/オープンソースソフトウェア開発などにも適している。
OpenGL APIはC言語関数群の形で提供され、またクロノスグループが策定・公開しているのは、OpenGL API仕様のドキュメントおよびC/C++用のヘッダーファイルだが、FortranやJavaなどの他言語向けのラッパー/バインディングも存在する[2]。OpenGLの実装は、主にハードウェアベンダーまたはオペレーティングシステム (OS) によって提供されるデバイスドライバーである。
OpenGLの最初の仕様では、テクスチャマッピングが標準的にサポートされておらず、1997年のOpenGL 1.1でようやく拡張機能から必須機能に格上げとなるなど、ゲーム開発によく使われるようなエフェクト処理のサポートが弱かった。2004年に発表されたOpenGL 2.0で高水準シェーディング言語 (GLSL) を標準化したが、その後もDirectX (Direct3D) と比べて標準化が遅く、必須機能としてのサポート追加は数年遅れとなることが多かった。しかし、OpenGL 4.0のリリース以降はGPUの進化に合わせたOpenGL APIの対応が進み、主要な機能に関しては、OpenGL 4.3以降とDirectX 11 (Direct3D 11) 以降との差異はほとんど無くなっている。とはいえ、OpenGLとDirect3Dは、その設計思想の違いから1対1で対応するものではないため、移植性は完全ではなく、また性能面ではハードウェアおよびドライバーのOpenGL/Direct3D最適化レベルに依存する[3]ため、利用分野やプラットフォームに応じた住み分けも依然として根強く残っている。
しかし、OpenGLは根本的なAPI設計が古く、すでに最新のCPUやGPUの性能を十分に引き出すことができなくなっており、またデバイスドライバー実装の品質管理などにも問題を抱えている。2016年に後継のVulkanが発表された後は、OpenGLのバージョンアップはほとんどなされていない。非推奨扱いになったり、ドライバーが提供されなくなったりしている環境も存在する。後述の#Vulkanも参照のこと。
なお、例えばOpenGLプログラマブルシェーダーを利用するには特定のバージョン以降のOpenGLに対応したハードウェアが必要であるなど、OpenGL対応を謳っているデバイスでも最新のOpenGL機能が使えるとは限らない。また、Intel GMAやIntel HD Graphicsなどのように、DirectX 9.0c(シェーダーモデル3.0)には対応するがOpenGL 2.0には対応しなかったり、DirectX 10(シェーダーモデル4.0)には対応するがOpenGL 3.2には対応しなかったり、DirectX 11(シェーダーモデル5.0)には対応するがOpenGL 4.3には対応しなかったり、さらにはOSによってOpenGLの対応バージョンに違いがあったり[4]と、DirectXと比べて同等世代のOpenGLへの対応が遅い環境も存在する。
もともとOpenGLはワークステーション発祥のグラフィックスAPIであり、工業製品などの設計・製造の過程で用いられるCAD/CAM/CAEで必要となる正確・高精度なモデル描画を最優先の用途としていた。また、ポリゴンの頂点座標変換や陰影計算などのジオメトリ処理を当初からグラフィックス処理専用チップに実行させることが前提であったため、OpenGL対応ハードウェアを利用することで大量のポリゴンの高速な描画を実現することができた[5]。一方、Direct3Dでは当初ジオメトリ処理にCPUを用いており、ハードウェアT&Lに対応したのは1999年リリースのDirect3D 7以降である。またDirect3Dは正確性よりも描画速度が優先されるゲームグラフィックス用途に最適化されていたため、きわどい位置でポリゴンが交差した場合など、描画結果が正確でない場合があった。そのため、利用者からはOpenGLのほうがCADや3次元可視化などの業務用に強いという見方がなされていた。
業務用の製品として、正確なモデル描画や安定した動作を保証したビデオカード(グラフィックスカード)が存在し、これらは主にハードウェアやデバイスドライバーがOpenGLに最適化されていることが謳われている[6][7][8]。ただし、Direct3D 11.xとOpenGL 4.xの違いはすでにほとんどなくなっており、Direct3Dであってもドライバーレベルの対応によってOpenGL同様の高精度・高安定性を実現できるようになっていること、またDirect3D 12に至っては両者をしのぐ機能や速度性能を実現していることから、業務用のアプリケーションソフトウェアであってもWindowsではOpenGLによる描画モードのサポートを終了し、Direct3Dのみをサポートする事例も増えている。詳細は後述の#DirectXとの関係を参照のこと。
のちにWindowsだけでなくmacOSやLinuxなどにも移植あるいはマルチプラットフォーム展開されるPCゲーム開発でもOpenGLが利用されるようになった[9]。AndroidやiOSといったモバイルOSで利用可能なOpenGL ESは、OpenGLと類似のAPIであり、異なるOS間でコードを相互移植・流用しやすいというメリットもある[10]。しかし、Windows以外のプラットフォームでもVulkanやMetalといった後発のローレベルAPIによる置き換えが進んでいる。Linux上でWindowsアプリケーションを直接実行させるためのWindows APIエミュレーションレイヤーであるWineでは、従来はDirect3D互換実装のバックエンドにOpenGLが使われていたが、Vulkanをバックエンドに使うライブラリも開発されている[11][12]。Unreal EngineやUnityといったゲームエンジンでは、ゲーム開発者はグラフィックスAPIを直接利用する必要がなく、実行環境に応じて自動的に最適なAPIによるレンダリングバックエンド実装が使われるが、従来のOpenGL/OpenGL ESに加えてローレベルAPIのサポートも追加されている[13][14][15][16]。後述の#macOSでの非推奨化も参照のこと。
歴史
元々はSGIが自社ワークステーションで使用していたIRIS GLというライブラリを改良し、移植性を高めたものである[17]。
1992年以降は、OpenGL Architecture Review Board (ARB) により監修されることとなる。このARBには、3Dlabs、Apple、AMD(旧ATI)、デル、エバンス・アンド・サザランド(E&S)、HP、IBM、インテル、Matrox、NVIDIA、シリコングラフィックス、サン・マイクロシステムズ(現オラクル)が参加している。2006年9月21日以降からは、100以上の企業で構成される標準化団体クロノス・グループ (The Khronos Group) へ管理が移行し、OpenGL ARB Working Group (OpenGL ARB WG) となった。
オープンな仕様であるため、各種OSに移植または互換GLが作成され、またグラフィックチップベンダーもオープンソースOS用のドライバーを用意するなど汎用性に富むライブラリとなっている。ベンダー独自の機能にも、「拡張」(Extension)という形で柔軟に対応できるため、いち早く最新の3Dグラフィックスハードウェアによる先進技術を利用できる反面、ハードウェアを限定した汎用性のないアプリケーションも開発できてしまう。ベンダー拡張の中には、のちに標準仕様として取り込まれたものもある。
OpenGLの標準化はDirectX (Direct3D) と比較すると遅い傾向にある。OpenGL 3.0以降、仕様の更新頻度は高まり、テッセレーションの標準化(DirectX 11.0とOpenGL 4.0)に関してはリリース時期にそれほど時間差はなかったが、コンピュートシェーダーの標準化(DirectX 11.0とOpenGL 4.3)に関しては時間差が大きかった。しかし、OpenGLのほうが先行して導入・標準化し、のちにDirectXが追従した機能もいくつか存在する[18]。ASTCやETC/EACのようにOpenGL/OpenGL ESでしかサポートされていないものもある[19][注釈 4]。
特徴
OpenGLは画面(フレームバッファ)に描画することを前提に設計されている。3DCGを描画できると言っても、オフラインレンダラー(POV-Rayなど)のようなレイトレーシング法は標準ではサポートされておらず、ポリゴンなどのプリミティブ形状をリアルタイムに順序をもってラスタライズ(画素化)して合成することで3DCGを描画する。そのため、形状同士が反映し合うような鏡のような反射、ガラスの屈折、投影、交差した半透明形状などを表現するには、そのためのアルゴリズムを実装する必要がある。効率良く描画を行わせるためには、アルゴリズムの特性を理解した高度なプログラミングが必要とされる。
柔軟な画像処理を行うために、奥行き情報を記録してZバッファ法などに利用できる「デプスバッファ」、形状のインデックスを記録してマスク処理などを行える「ステンシルバッファ」、高精度なカラー合成などを行える「蓄積バッファ」など、特殊な画素情報がサポートされている。また、元来OpenGLやGPU内で固定的に処理されてきた頂点データやフラグメント(ラスタライズにより生成される画素)の処理をGPUの強力な処理能力を活かしつつプログラミング可能にするプログラマブルシェーダーの登場と、それを制御するシェーディング言語GLSLの採用により、さらに多種多様な表現が可能になった。
また、OpenGL 2.0ではパーティクル機能を主眼に置いたポイントスプライトをサポートしている。一般的にパーティクルや2次元画像のオブジェクトを3次元空間に合成する場合は、平板なポリゴンにテクスチャを張り、常に視点と平行になるよう調整する「ビルボード」と呼ばれる手法が使われているが、ポイントスプライトを使うことでビルボードに代わり、座標計算やプログラミングのコストを軽減できる。
なお、OpenGL 2.xまではプリミティブの描画を記録・再生するDisplay Listと呼ばれる機能や、Begin/Endブロックによるプリミティブ描画コマンドのCPUベース記述モードといった上位レベル機能が存在したが、OpenGL 3.0のコアプロファイルでは廃止予定の非推奨機能となった[22]。
コード例
C/C++向けのOpenGLコード例を示す。
- OpenGL 2.xまでの固定機能で三角形を描画する例。
// Direct3D デバイス/デバイスコンテキストとは異なり、
// 描画ターゲットとなる OpenGL レンダリングコンテキストは暗黙のグローバルステートとなっており、
// 関数引数に対して明示的に指定しない。
// コンテキストはスレッドローカル変数として管理される。
// https://www.khronos.org/opengl/wiki/OpenGL_Context
glDisable(GL_LIGHTING);
glBegin(GL_TRIANGLES);
{
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2f(0.0f, +1.0f);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex2f(-1.0f, 0.0f);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex2f(+1.0f, 0.0f);
}
glEnd();
他にも、ユーザーメモリ頂点配列/エレメント配列(CPU側データ)や、頂点バッファ/エレメントバッファ(GPU側データ)を利用した、より高速な描画方法がある。なお、Direct3Dの頂点宣言・頂点レイアウトに似た機能として Vertex Array Object (VAO) および Vertex Attribute [23]が存在するが、Direct3Dのように頂点バッファと頂点属性を完全に分離して扱えるものではない。頂点宣言・頂点レイアウトの互換機能 GL_ARB_vertex_attrib_binding [24]が標準化されているのはOpenGL 4.3/ES 3.0以降である[25]。
プログラマブルシェーダー
プログラマブルシェーダーを利用する場合は、GLSL言語等を使いシェーダープログラムを別途作成して、glUseProgram()関数を使ってあらかじめレンダリングコンテキストにプログラムオブジェクトをセットしてから描画関数を呼び出す必要がある。
補助・拡張ライブラリ
OpenGLそのものは、ハードウェアおよびデバイスドライバー層に近い低次のライブラリである。そのため、よりアプリケーションソフトウェア層に近い、多くの高次の補助・拡張ライブラリが存在する。主に、3D描画機能を簡易化・拡張するもの、ウインドウシステムをサポートするもの、グラフィックス面以外の機能を付加するものに分けられる。
C/C++向け
- GLU - カメラや球、円筒、曲面などの取り扱いを補助する
- GLX - X Window SystemでOpenGLを利用するためのライブラリ
- WGL - Microsoft WindowsでOpenGLを利用するためのライブラリ (Windows APIおよびGDIの一部)
- CGL, AGL, NSOpenGL (Cocoaの一部) - macOSでOpenGLを利用するためのライブラリ
- EGL - OpenGL ES, OpenVGといったKhronosの描画APIと、下層のプラットフォーム固有ウィンドウシステムをつなぐインターフェイス[26]
- GLUT - クロスプラットフォームのOpenGL対応ウィジェット・ツールキット
- FreeGLUT - GLUTの機能を強化した、上位互換ライブラリ[27]
- GLUI - GLUTをベースにしたウィジェットライブラリ
- AUX - ウィジェット・ツールキットであるが、古くなっておりGLUTの使用が推奨されている
- GLee - OpenGL拡張の使用を容易にするライブラリ。開発は停止しており、公式バージョンの配布もされていない[28][29]。
- GLEW - GLSLなどのOpenGL拡張の使用を容易にするライブラリ[30]。OpenGL 4.6に対応。
- GLFW - クロスプラットフォームのOpenGL対応フレームワークツールキット[31]。OpenGL ESおよびVulkanにも対応。
- GLUS (Graphic Library UtilitieS) - 公式のクロスプラットフォームなユーティリティ。OpenGL ESにも対応 [32]
- OpenGL Mathematics (GLM) - GLSLライクに記述できるC++向けの算術ライブラリ[33]
- OpenSceneGraph
- FLTK - クロスプラットフォームのOpenGL対応ウィジェット・ツールキット
- Open Inventor
- ToGL - Valve Softwareが開発した、Direct3DからOpenGLへの変換レイヤー[34]
- SDL - クロスプラットフォームなマルチメディアライブラリ
その他の言語向け
C/C++以外の主要なOpenGL言語バインディング(ラッパー)とライブラリには以下のようなものがある。
- OpenTK - C#向けのローレベルなOpenGL/OpenGL ES/OpenALバインディング[35]
- Java OpenGL (JOGL) - Java向けのバインディング
- LWJGL - Java向けのゲーム開発用ライブラリ
なお、WebGLはJavaScript向けの単なるラッパーや言語バインディングではなく、OpenGL ES派生の別規格である。
DirectXやVulkanとは異なり、具体的な公式ソフトウェア開発キット (SDK) や開発者向けのソフトウェアスイートは提供されていない。KhronosによるOpenGL SDKのサイトでは、APIリファレンスへのリンクや、補助ライブラリおよび開発ツールへのリンクが記載されているのみである[36][37]。NVIDIAのように、自社GPU向けのOpenGL拡張ヘッダーや開発ツールを含むSDKを提供しているベンダーもある[38]。
バージョンの変遷
OpenGL 1.1
テクスチャに対応。Windowsの標準ドライバーおよびWGLで標準サポートされているのは、このOpenGL 1.1である[39]。
OpenGL 1.5
2003年にリリースされたOpenGL 1.5では、拡張機能としてプログラマブルシェーダーのための高級言語(GLSL 1.0)に初めて対応した[40]。
OpenGL 2.x
2004年にリリースされたOpenGL 2.0では、シェーディング言語GLSLのバージョン1.1対応が標準仕様として盛り込まれた。
全般的な機能はDirect3D 9のシェーダーモデル2.0および3.0世代に相当する。
OpenGL 3.x
2008年にリリースされたOpenGL 3.0では、肥大化したOpenGL APIセット自体のシェイプアップを目的として2.x以前の世代を切り捨てる大幅なアップデートが行われ、多くの機能が非推奨・廃止予定になった。翌2009年3月に発表されたOpenGL 3.1では固定機能シェーダーが標準仕様から取り除かれ、拡張機能扱いとなった(GL_ARB_compatibility)。また同年8月に発表されたOpenGL 3.2では、コアプロファイルと互換プロファイルの概念が導入されたほか、Direct3D 10で導入されたジオメトリシェーダーに正式対応した[41]。互換プロファイルでは固定機能シェーダーが含まれるように再定義されたが、互換プロファイルをサポートするかどうかは実装に依存する。
固定機能シェーダーの廃止やジオメトリシェーダーの対応などは、Direct3D 10の仕様と合致しており、シェーダーモデル4.x世代に相当する。
OpenGL 4.x
2010年3月11日に OpenGL 4.0 を発表[42]。Direct3D 11のハル シェーダー、テッセレータおよびドメイン シェーダーに相当する、テッセレーション制御シェーダー、テッセレーション プリミティブ ジェネレーターおよびテッセレーション評価シェーダーが搭載された[43]。
2010年7月26日に OpenGL 4.1 を発表[44]。シェーダープログラムバイナリの取得やビューポート配列の対応など。
2011年8月8日に OpenGL 4.2 を発表[45]。シェーダーにおけるアトミックカウンターの実装など。
2012年8月6日に OpenGL 4.3 を発表[46]。Direct3D 11のコンピュート シェーダーと同様のGPGPU用演算シェーダーが追加搭載された[47]。また、次世代テクスチャ圧縮技術であるASTCのサポートが公式拡張として定義された[48]。
2013年7月22日に OpenGL 4.4 を発表[49]。バッファ制御や非同期クエリ対応など[50]。
2014年8月11日に OpenGL 4.5 を発表[46]。Direct State Access (DSA) 対応など[51]。
2015年8月10日にOpenGL 2015 ARB Extensionsとして、OpenGL ES 3.2互換機能やシェーダーの並列コンパイル機能などが拡張として追加された[52]。
2017年7月31日に OpenGL 4.6 を発表[53]。SPIR-Vの導入、Vulkan/Direct3Dとの相互運用性の強化など。
以前はOpenGL仕様のアップデートの速度や頻度はDirect3Dに比べて非常にゆっくりとしたものであったが、OpenGL 4の機能の中にはDirect3D 11と同等あるいはそれ以上に素早く追加されたものもある。全般的な機能はシェーダーモデル5.x世代に相当する。
Vulkan
SIGGRAPH 2014で、レガシーな設計が蓄積しているOpenGLをリセットし、ゼロから構築し直して刷新する、次世代の標準3D API規格(OpenGL Next Generation, glNext)の策定が始められることがアナウンスされた。このとき、マルチスレッド対応やシェーディング中間言語などの近代的な技術が導入されることが発表された[54]。
GDC 2015では、新規格の名称が"Vulkan"(ドイツ語で"火山")となることが発表され[55]、Direct3D 12同様のコマンドキューベースのマルチスレッドレンダリング機能や、OpenCLとのプログラミング基盤共通化をもたらすSPIR-V中間表現[56]を導入することが明らかにされた。また、VulkanにはAMD独自のローレベルグラフィックスAPIであるMantleが要素技術として取り込まれることが発表された[57]。
2016年2月16日、Vulkan 1.0の正式仕様がリリースされた[58]。
なお、Vulkanはハードウェアの詳細な制御を可能とするローレベルAPIである一方、従来のOpenGLはCPU-GPU間の同期などの煩雑な処理を自動で行なってくれる上位層のAPIとして、今後もメンテナンスおよびアップデートが継続されることになっている[59]。ただし、2017年にリリースされたOpenGL 4.6を最後にOpenGLのバージョンアップは止まっており、以降は仕様書のメンテナンスだけにとどまっている[60]。
問題点
OpenGL 3.xで固定機能を分離するなどのシェイプアップは図られたが、しかしOpenGLは互換性維持という名目で、1.xや2.x時代に設計された古いAPI構造の大部分をいまだに踏襲している。一方で競合APIのDirect3Dは互換性を切り捨てながらも思い切った仕様変更により、APIをその当時の技術トレンドや先進技術に即した形で洗練してきた[61]。またDirect3Dは公式ドキュメントが充実していることや、習得がしやすいことも評価されている[62]。実際にOpenGL仕様そのものに対して、開発者から不満の声も上がっている[63][64][65]。ここではOpenGLの弱点や問題点、および不足機能に関して記述する。なお、これらはOpenGLだけでなくOpenGL ESにも共通して言えることである。
文字列の描画
OpenGL単体では、WindowsのGDI/GDI+やmacOSのCore Graphicsのような上位レベルの文字列描画用APIが用意されていない[66][67][68]ため、あらかじめ文字が描画されたテクスチャを(画像ファイルから読み込むなどして)利用するか、プラットフォーム依存の上位レベルAPI(例えばWindowsの場合はwglUseFontOutlines()
関数[69]など)と連携する必要がある(クロスプラットフォームのユーティリティライブラリであるGLUTなどを使用すると、文字・文字列を描画することができるが、その機能はごく限られており、あくまでデバッグ用途などの簡易的なサポートにとどまる)。NVIDIA拡張としてはGL_NV_Path_Rendering[70][71][72][73]が存在し、高度なプリミティブ描画のGPUアクセラレーションやフォントもサポートするが、標準化はされていない。
なお、Direct3Dも同様に文字列描画が弱点であるが、Microsoft Windows 7に搭載されたDirectX 11以降ではDirect2DやDirectWriteといった複雑な2D描画や文字列描画に特化した上位レベルの派生APIや、DXGIを経由したDirect3Dとの相互運用・連携機能も整備されている。また、WPFではハードウェアに応じてDirect3Dが使用されるが、Direct2D/DirectWriteのようにAPIが高度に抽象化されており、複雑な2D描画や文字列描画にはDirect3DやOpenGLを直接使用するよりも向いている。
マルチGPU
Direct3DではDXGIアダプターを列挙することで、複数のGPUを搭載したシステムにおいて任意のGPUを選択的に使用することが可能となっている[74]。これにより、Direct3Dのコンピュートシェーダー(DirectCompute)ではCUDAやOpenCLのように複数のGPUを利用して各々にGPGPU演算処理を分散実行させ、アプリケーションソフトウェアの並列処理性能を向上させるといった使い方ができる。一方、OpenGLで複数のGPUを選択的に使用したり、それぞれのGPUに対してレンダリングコンテキストやリソースを作成したりする機能はOpenGL 4.6時点でも標準化されていない。Windows環境においては、2006年にNVIDIAからWGL_NV_gpu_affinity[75][76]、2009年にAMDからWGL_AMD_gpu_association[77]というWGL拡張がそれぞれ提供されているが、AMD拡張のほうはRadeonでもFireProでも使用できる[78]ものの、NVIDIA拡張のほうはGeForceでは使用できず、Quadroのみの対応となっている[79]。Windows以外のプラットフォームではAMDによるX Window System向けのGLX拡張GLX_AMD_gpu_association[80]のみで、NVIDIAからは提供されておらず、アプリケーション側からリソースを割り当てるGPUを個別に指定する手段がない。
なお、NVIDIA SLIに対応した複数のGPUを用いてSLI構成を行なうことによりGPUドライバー側で分散処理を実行させることはできるが、SLIは主にOpenGLやDirect3Dにおけるグラフィックスフレームのレンダリングを自動的に分散処理して高速化する技術であり、SLI環境下でのGPGPU分散処理を行なう場合は注意点や制約が存在する[81](NVIDIA GPUにおけるGPGPUはすべてCUDA基盤を利用しているため、このSLI環境における制約はCUDA/OpenCL/DirectCompute/OpenGL Compute Shaderを問わない)。同様にAMD CrossFire (CrossFireX) も分散レンダリングのためのマルチGPU技術であり、またDirect3D 9/10/11およびOpenGLアプリケーションでCrossFireを利用するにはフルスクリーンモード(排他モード)で動作している必要がある[82][83]。さらに、AMDマルチGPU環境でOpenCLを利用したGPGPU分散処理を行なう場合、CrossFire (CrossFireX) をOFFにすることが推奨されている[84]。なお、SLIやCrossFire/CrossFireXではメモリのミラーリングが行なわれるため、複数のGPUを搭載していても、使用できるメモリ総量は各GPUメモリの合計値とはならない。一方、DirectX 12(WDDM 2.0)ではSLIやCrossFireといったベンダー独自技術に依存しない形でマルチGPUにネイティブ対応し、標準で分散レンダリングを可能とするほか、複数GPUのビデオメモリを単一のメモリプールに統合することも可能となっている[85][86]。
また、Adobe PhotoshopではバージョンCS4以降、OpenGLによるハードウェアアクセラレーションが導入されている[87]が、マルチGPU環境は推奨されていない[88]。
コンピュート機能(GPGPU機能)とウィンドウ/レンダリングコンテキスト
DirectCompute (Direct3D 11/12) ではCUDAおよびOpenCL同様に、OSのウィンドウシステム(ユーザーインターフェイス)とは直接関連しない完全なオフスクリーンオブジェクトであるDirect3Dデバイスおよびデバイスコンテキストを作成するだけで、コンピュート機能を利用することが可能となっている(コンピュートシェーダーの実行つまりコンピュートカーネルの発行には、DXGIスワップチェーンの作成およびプレゼンテーションは不要)[89]。一方、OpenGL APIは必ずレンダリングコンテキストを作成してから使用する必要があり、また描画命令を発行するためにはレンダリングコンテキストをバインドするサーフェイスを、OSのウィンドウシステムに関与するAPIを利用して作成する必要がある(例えばWindowsの場合はウィンドウDCまたはメモリDCといったGDIのデバイスコンテキストが必要)[90][91]。OpenGL 4.3では汎用計算向けのコンピュートシェーダーが搭載されたが、この制約のためにOpenGLでコンピュートシェーダーを利用する場合は必ずOSのウィンドウシステムへのアクセスが必要となってしまう。シミュレーションの可視化など、OpenGLコンピュートシェーダーを必ずグラフィックス連携用途に使うことを前提としている場合は大きな問題にならないが、完全なオフスクリーンで純粋にコンピュート機能を利用しようとする場合には障壁となりうる(OpenGL 4.6時点での代替策、すなわち完全オフスクリーンでのコンピュート実行はOpenCLに頼らざるを得ない)。
マルチスレッド対応
Direct3D 11ではイミディエイトコンテキスト/ディファードコンテキストという形で、マルチコアCPUにおいてマルチスレッドを活用して描画パフォーマンスを向上する仕組みが導入され[92]、Direct3D 12ではさらにコマンドキューベースのマルチスレッドレンダリング機能による描画効率の向上が図られているが、OpenGLでは4.6時点で相当機能をサポートしていない。また、Direct3D 11ではデバイスインターフェイスのメソッド呼び出しがスレッドセーフであり、サブスレッドからのリソース生成や複数のスレッドからのリソース同時生成に標準で対応している(同時利用可能なスレッド数はドライバーに依存する[93])が、OpenGLではレンダリングコンテキストを作成したスレッドのみがリソースを扱えるようになっているため、サブスレッドでリソース生成を行なうにはwglShareLists()関数[94][95]やglXCreateContext()関数[96]といったプラットフォーム依存のAPIを利用して明示的にコンテキスト共有を行なう必要がある。OpenGL 4.6ではGL_KHR_parallel_shader_compileとして複数のシェーダーの並列コンパイルに対応したが、コア機能ではなく拡張扱いである[97][98]。
ドライバー品質とGLSLコンパイラー
Direct3D (Windows) にはWHQL (Windows Hardware Quality Lab) [99]というドライバー品質保証の仕組みが存在するが、OpenGLコミュニティ総体にはそういったドライバー認証システムは存在していなかった [1]。またDirect3Dとは違ってOpenGLおよびOpenGL ESドライバーはベンダーや個々の製品によって出来不出来の差が激しく、このドライバー品質問題に関して開発者やユーザーから不満の声が上がっていた[100][101]。さらに、GLSLのリファレンスコンパイラー実装はKhronosグループによって提供されている[102]ものの、OpenGL/OpenGL ESにおいてはシェーダープログラムの共通バイトコード仕様が定義されていないためにGLSLオフラインコンパイラーは存在せず、シェーダープログラムのコンパイルはベンダーごとのドライバーに実装されたGLSLオンラインコンパイラーによって実行時になされる。しかし、OpenGL仕様にはエラーハンドリングなどに関して厳密に規定されていないあいまいな部分が存在することから、現実問題としてベンダーごとにコンパイラーの挙動が異なるという処理系依存動作を許可してしまっているのが実態であり、これがアプリケーション開発者の負担増加につながり、またドライバーやアプリケーションプログラムにおけるバグの温床となってしまう[103][104]。
OpenGL 4.4以降においては、Khronosグループによる品質保証制度を新設し、品質問題の改善を進めることとなった[105]。また、OpenGLの後継APIとなるVulkanでは、前述のようにシェーダープログラムの中間言語としてSPIR-Vを採用している。OpenGL 4.6ではSPIR-Vのサポートがコア機能として組み込まれた。
GoogleによるANGLEプロジェクト[106]はもともと、Direct3Dなどの他のグラフィックスAPIをラップしてOpenGL ES APIをエミュレートすることで、ブラウザのWebGLの実装に利用するためのライブラリだったが[107]、ネイティブのOpenGLドライバーやOpenGL ESドライバーの品質問題を回避する目的でも使われている(Windows上ではDirect3DがプライマリAPIであり、ドライバー品質もOpenGLより安定している)[108]。ANGLEプロジェクトでは他にも、Vulkan APIをラップしてOpenGL ES APIをエミュレートすることで、OpenGLドライバーの品質問題だけでなく、パフォーマンスを改善する取り組みが行なわれており、WindowsだけでなくLinuxやAndroidでも利用できる[109]。後述のようにOpenGLやOpenGL ESが非推奨となってしまったmacOS/iOS上で、Metal APIをラップしてOpenGL ES APIをエミュレートする取り組みも進められている。
DirectXとの関係
この節には独自研究が含まれているおそれがあります。 |
OpenGLは3Dグラフィックスを専門的に扱うライブラリである。対してMicrosoft DirectXは、ゲーム開発での利用を主な用途としており、グラフィックスのみならずサウンドや入力関連のAPIを含んでいる点で性質が異なる。 なお、OpenGLと直接比較されるべきAPIは、DirectX製品の一部、グラフィックスを司るDirect3Dである。
DirectXは主にWindowsやXboxプラットフォームでのゲーム開発等で多く用いられる(Linux上でDirectXを動作させるCedegaなどの例もある)。対してOpenGLはクロスプラットフォームであり、Windowsだけでなく様々なOSに実装が提供されている。Windows環境ではDirectXとOpenGLを両立させることも可能である。
発祥がワークステーションであることやクロスプラットフォームであることから、CADや工業デザイン、科学技術計算や医療での視覚化等の業務分野では、クロスプラットフォームなアプリケーションに限らずWindows専用アプリケーションであっても、Direct3D等のエンタテインメント用途重視のグラフィックスAPIよりもOpenGLが用いられることが多い。そのため、ワークステーションや業務向けのGPUやビデオカード製品には、OpenGLに最適化された仕様のものが販売される傾向がある。OpenGL向けと称されているGPUにはNVIDIA社の『NVIDIA Quadro/NVIDIA RTX』シリーズや、AMD (旧ATI) の『AMD FirePro/AMD Radeon Pro (旧ATI FirePro/ATI FireGL)』シリーズが存在し、デバイスドライバーを含めた仕様がOpenGL用に最適化されている。しかしその反面、これらの製品はDirectX (Direct3D) への最適化が甘く、DirectXを使用したアプリケーションにおける性能が芳しくない傾向もある[注釈 5]。なお、業務用アプリケーションソフトウェアの中には、ドライバーの品質や安定性などの観点から、OpenGL/Direct3Dを問わず、これらのプロフェッショナル向けグラフィックスハードウェア製品のみ動作保証しているものもある。例えば、Windows版のAutoCADはかつてOpenGLを使用していたものの、バージョン2008以降はWindows VistaではDirect3Dが使用されるようになり[114]、またバージョン2022以降はDirect3D 12が優先的に使用されるようになっている[115]が、テスト済みの認定ハードウェアにはゲーミング用途のコンシューマー向け製品は含まれておらず、プロフェッショナル向け製品のみである[116]。
後発のローレベルAPIが台頭してOpenGLの進化が止まり、将来性が見込めなくなったことなどを受けて、業務用やデザイン用途のソフトウェアでもOpenGLのサポートを打ち切るケースも出ている。Windows版のShade3Dは、かつてプレビュー表示においてOpenGL/Direct3D両方に対応していたが、OpenGL対応はバージョン17が最後となり、バージョン18以降はDirect3D対応のみとなった[117][118]。
GeForceやRadeonのようなコンシューマー向けGPUのWindowsドライバーは、OpenGLではなくDirect3Dに最適化されているが、コンシューマー向けGPUとWindowsドライバーによるOpenGLが、常にDirect3Dよりも遅いわけではない(場合によってはOpenGLのほうが高速になることもある)[62]。
なお、WindowsだけでなくLinuxおよびMac (macOS) に対してもGPUベンダーからOpenGL対応のドライバーが供給されているが、Macに関してはWindowsおよびLinuxと異なり、そもそもベンダーが正式対応しているハードウェアが限られている[119][120][121][122][123]。
シリコングラフィックスとマイクロソフトはかつてOpenGLとDirect3Dの統合を目標として、Fahrenheitと呼ばれる3DグラフィックスAPIの共同開発を1997年に開始したことがあるが[124]、1999年の末までに計画は事実上頓挫している。また、マイクロソフト社はOpenGL ARBの設立時のメンバーでもあったが、2003年に脱退した。その後、シリコングラフィックスの倒産やOpenGL仕様のKhronosグループへの移管など紆余曲折を経て、2014年にはOpenGL 4.5の発表とともに、マイクロソフトがKhronosグループに参加することが明らかになった[125]。
OpenCLとの関係
OpenGL仕様を管理しているKhronosグループによって同様に管理されているオープン仕様のAPIとして、GPGPUを含む異種計算資源混在環境(ヘテロジニアス環境)用の並列コンピューティングAPIであるOpenCLが存在する。OpenCLにはDirect3DおよびOpenGLのグラフィックスリソースを扱うことのできる相互運用機能が存在するが、一方でOpenGLはバージョン4.3でDirectX同様にGPGPU用の演算シェーダーを導入している。ただし、OpenCLは依然としてヘテロジニアス環境に特化した幅広いプラットフォーム対応APIであるが、OpenGLの演算シェーダーはよりグラフィックス用途に特化したGPGPU用のものとなり、競合するというよりはむしろ相補的な役割を担うことになる。
macOSでの非推奨化
2018年6月5日、AppleはWWDC 2018でOpenGL/OpenCLの非推奨化を発表し、macOS Mojaveにおいて(サポートはまだ打ち切られないものの)OpenGL/OpenCLは非推奨APIとなった。macOSがネイティブにサポートするOpenGLのバージョンは4.1が最後となっている[126]。
OpenGLの代替として推奨されているAPIはMetalであるが、MetalはVulkan同様、OpenGLよりもハードウェア層に近いローレベルAPIであり、アプリケーション開発向けというよりミドルウェア開発向けに位置する。
ARM版Windowsでの利用
Microsoft Surface Pro Xのように、ARMアーキテクチャベースのWindows環境では、opengl32.dllやglu32.dllのネイティブバイナリは用意されているものの、通例GPUベンダーのOpenGLドライバーが提供されておらず、OpenGL 1.2以降の機能を利用することができない。マイクロソフトはARM版のWindows 10/Windows 11向けに、OpenCL/OpenGL/Vulkanアプリケーションを動作させるための互換機能パック(Compatibility Pack)を提供している[127]。これはDirectX 12上に構築されたマッピングレイヤーであり、Mesaからフォークしたライブラリなどが含まれる[128][129]。2024年6月現在、OpenGL 3.3以前のAPI互換機能がサポートされている。
クアルコムのSoCであるSnapdragon X Elite内蔵のAdreno GPUでは、マッピングレイヤーを介したOpenGL 4.6のサポートが予定されている[130]。
脚注
注釈
- ^ これらのワークステーションは、のちに比較的安価なPC/AT互換機の「PCワークステーション」に取って代わられている。
- ^ フィーチャーフォンやスマートフォンなどの携帯電話、PDA(携帯情報端末)、タブレットなどを含む。
- ^ 3Dグラフィックスの描画では、特にラスタライズ処理の負荷が高く、画面解像度や3Dシーンの複雑度が上がるとCPUでは描画速度を維持することができなくなる。専用のラスタライザユニットを搭載し、また並列処理能力の高いGPUに処理を委譲することで、スケーラビリティを確保することができる。
- ^ かつてDirect3DでのASTCサポートが計画されていたが、2019年現在、実現には至っていない[20][21]。
- ^ 例えば同じTU104チップを採用し、TDPとVRAM搭載量以外の主要スペックがほぼ同一の「Quadro RTX 5000」と「GeForce RTX 2080 SUPER」を比較したとき、Direct3DのベンチマークスコアはGeForceのほうが上である[110][111][112][113]。
出典
- ^ OpenGL SC Overview - The Khronos Group Inc
- ^ OpenGL Overview
- ^ QuadroとGeForceの違い |菱洋エレクトロ株式会社, Internet Archive
- ^ ホイール欲しい ハンドル欲しい » Intel HD Graphics 4000 GPU と OpenGL
- ^ “新連載-語りたい3D系ユーザーのためのOpenGL考察1”. www.cqpub.co.jp. 2024年8月24日閲覧。
- ^ “Quadroとは?GeForceとの違いや性能比較も”. 法人様向けパソコンならドスパラプラス. 2024年8月25日閲覧。
- ^ ASCII. “ついに登場!ATI完全オリジナルFireGLカード「FireGL 8800」”. ASCII.jp. 2024年8月25日閲覧。
- ^ ASCII. “スーパーコンピューターの系譜 ATIから続くAMDのGPGPU戦略 (1/3)”. ASCII.jp. 2024年8月27日閲覧。
- ^ ValveはなぜSource EngineをLinux+OpenGL環境へ移植したのか。GTC 2013のValveセッションレポート
- ^ “OpenGLとは?OpenGLの基礎をわかりやすく解説!OpenGLのメリットは?導入手順とバージョン確認の方法も確認”. toiroフリーランス. 株式会社SHIFT. 2024年9月1日閲覧。
- ^ 第35回 Days of WINE and Struggles again[4] | gihyo.jp
- ^ Linux版SteamにVulkan対応のWine実装でWindowsゲームもプレイ可能に - PC Watch
- ^ Unreal Engine 5.0 リリース ノート | Unreal Engine 5.0 ドキュメンテーション | Epic Developer Community
- ^ Unreal Engine の Linux の開発要件 | Unreal Engine 5.4 ドキュメンテーション | Epic Developer Community
- ^ グラフィックス API サポート - Unity マニュアル
- ^ Metal - Unity マニュアル
- ^ 日本SGI - OpenGL, Internet Archive
- ^ [SIGGRAPH]ついにDirectX 11を凌駕した!? Khronosに聞く「OpenGL 4.2」の正体 - 4Gamer.net
- ^ OpenGLはDirectX 11を超え,OpenGL ESは据え置き型ゲーム機と同等以上に。Khronosの最新動向レポート - 4Gamer.net
- ^ Adaptive Scalable Texture Compression (Preliminary) | Microsoft Docs
- ^ D3D11_ASTC_PROFILE enumeration (Preliminary) | Microsoft Docs
- ^ The OpenGL® Graphics System: A Specification (Version 3.0 - August 11, 2008), Mark Segal, Kurt Akeley; Editor (version 1.1): Chris Frazier; Editor (versions 1.2-3.0): Jon Leech; Editor (version 2.0): Pat Brown
- ^ Vertex Specification - OpenGL Wiki
- ^ GL_ARB_vertex_attrib_binding | Khronos
- ^ ホイール欲しい ハンドル欲しい » OpenGL ES 3.0 / OpenGL 4.3 VertexArrayObject と VertexAttribBinding
- ^ EGL Overview - The Khronos Group Inc
- ^ The freeglut Project :: About
- ^ OpenGL Loading Library - OpenGL Wiki
- ^ SLUDGE Adventure Game Engine - Home
- ^ GLEW: The OpenGL Extension Wrangler Library
- ^ GLFW - An OpenGL library
- ^ GLUS - Modern OpenGL, OpenGL ES and OpenVG Utilities now part of the OpenGL SDK - khronos.org news
- ^ OpenGL Mathematics
- ^ ValveSoftware/ToGL: Direct3D to OpenGL abstraction layer
- ^ The Open Toolkit | OpenTK
- ^ OpenGL SDK | Libraries
- ^ OpenGL SDK | Tools
- ^ OpenGL | NVIDIA Developer
- ^ OpenGL - Windows applications | Microsoft Docs
- ^ "The OpenGL(R) Graphics System: A Specification (Version 1.5)", p.294
- ^ T.Teranishi:OpenGL:version
- ^ Khronos Unleashes Cutting-Edge, Cross-Platform Graphics Acceleration with OpenGL 4.0 - Khronos Group Press Release
- ^ Game Developers Conference(GDC) 2010現地レポート - GAME Watch
- ^ Khronos Drives Evolution of Cross-Platform 3D Graphics with Release of OpenGL 4.1 Specification - Khronos Group Press Release
- ^ Khronos Enriches Cross-Platform 3D Graphics with Release of OpenGL 4.2 Specification - Khronos Group Press Release
- ^ a b Khronos Group Announces Key Advances in OpenGL Ecosystem - Khronos Group Press Release
- ^ 「OpenGL 4.3」および「OpenGL ES 3.0」が発表される | SourceForge.JP Magazine
- ^ Khronos Releases ASTC Next-Generation Texture Compression Specification - Khronos Group Press Release
- ^ Khronos Releases OpenGL 4.4 Specification - Khronos Group Press Release
- ^ Khronos、シェアード・バーチャル・メモリなどをサポートするOpenCL 2.0 ~OpenGL 4.4の仕様も公開 - PC Watch
- ^ OpenGL 4.5が正式リリース - Direct State Accessなどを追加 | マイナビニュース
- ^ Khronos Expands Scope of 3D Open Standard Ecosystem - Khronos Group Press Release
- ^ Khronos Releases OpenGL 4.6 with SPIR-V Support - The Khronos Group Inc
- ^ OpenGL 3Dの次世代規格の策定作業がKhronos Groupの指揮下に始まる…ハードウェア重視、マルチスレッド、共通シェーディング言語など - TechCrunch
- ^ [GDC 2015]Khronos,新世代グラフィックスAPI「Vulkan」を正式発表。OpenGL時代のしがらみを捨てた,スリムでハイエンドなAPIに - 4Gamer.net
- ^ SPIR - The first open standard intermediate language for parallel compute and graphics
- ^ [GDC 2015]Khronos,新世代グラフィックスAPI「Vulkan」でAMDの「Mantle」を採用 - 4Gamer.net
- ^ 新世代の低オーバーヘッドなグラフィックスAPI「Vulkan」,ついに正式始動 - 4Gamer.net
- ^ Vulkan on NVIDIA GPUs; Piers Daniell, Driver Software Engineer, OpenGL and Vulkan
- ^ Khronos OpenGL® Registry - The Khronos Group Inc
- ^ Carmack: Direct3D is now better than OpenGL | bit-gamer.net
- ^ a b Valve: OpenGL is faster than DirectX - even on Windows - ExtremeTech
- ^ Rich Geldreich's Tech Blog: Things that drive me nuts about OpenGL
- ^ OpenGL/ES,GLSLのバグとKhronosの不備 - リンゴをかじれ, Internet Archive
- ^ OpenGL Is Broken – The Burning Basis Vector
- ^ OpenGL FAQ / 17 Using Fonts
- ^ OpenGL Programming/Modern OpenGL Tutorial Text Rendering 01 - Wikibooks, open books for an open world
- ^ fractious: Rendering Text in OpenGL on Android
- ^ wglUseFontOutlinesW function (wingdi.h) - Win32 apps | Microsoft Learn
- ^ GL_NV_path_rendering | Khronos Registry - The Khronos Group Inc
- ^ GL_NV_path_rendering | NVIDIA
- ^ NVIDIA、ついにAdobe Illustrator CCの GPUアクセラレーション対応を発表|NVIDIA
- ^ NV Path Rendering | NVIDIA Developer
- ^ DXGI overview - Win32 apps | Microsoft Docs
- ^ WGL_NV_gpu_affinity | Khronos Registry - The Khronos Group Inc
- ^ HD is now 8MP & HDR - NVISION 08 | Ian Williams - Manager, PSG Applied Engineering
- ^ WGL_AMD_gpu_association | Khronos Registry - The Khronos Group Inc
- ^ OpenGL Hardware Database by Sascha Willems | Reports supporting WGL_AMD_gpu_association
- ^ OpenGL Hardware Database by Sascha Willems | Reports supporting WGL_NV_gpu_affinity
- ^ GLX_AMD_gpu_association | Khronos Registry - The Khronos Group Inc
- ^ Programming Guide :: CUDA Toolkit Documentation
- ^ How to Configure Discrete Graphics Cards to Run In AMD CrossFire™ Mode (Article Number: DH-018) | AMD
- ^ How to Configure Discrete Graphics Cards to Run in AMD CrossFire™ Mode (Article Number: DH2-018) | AMD
- ^ Frequently Asked Questions AMD OpenCL™ Coding Competition : OpenCL Questions : 26. Does the AMD APP SDK v2.4 with OpenCL 1.1 support work on multiple GPUs (ATI CrossFire)?
- ^ AMD、Windows 10/DirectX 12への対応は万全とアピール - PC Watch
- ^ DirectX 12の異種混合GPU「EMA」でGeForceとRadeonをハイブリッドすると意外な結果に - GIGAZINE
- ^ GPU と OpenGL の機能と制限(Photoshop CS4/CS5)
- ^ Photoshop CC GPU FAQ
- ^ directx-sdk-samples/BasicCompute11.cpp at master · walbourn/directx-sdk-samples
- ^ wglCreateContext function (wingdi.h) - Win32 apps | Microsoft Docs
- ^ wglMakeCurrent function (wingdi.h) - Win32 apps | Microsoft Docs
- ^ Direct3D 11 のマルチスレッドの概要 | Microsoft Docs
- ^ マルチスレッドによるオブジェクトの作成 | Microsoft Docs
- ^ wglShareLists function (wingdi.h) - Win32 apps | Microsoft Docs
- ^ OpenGL and multithreading - OpenGL Wiki
- ^ glXCreateContext | Khronos
- ^ クロノス・グループ、SPIR-V機能を搭載した「OpenGL® 4.6」を発表 - Press Release - Khronos Group
- ^ OpenGL 4.6の進化点やOpenCLの将来について,Khronos Group代表のNeil Trevett氏に聞いてみた - 4Gamer.net
- ^ WHQL Release Signature - Windows drivers | Microsoft Docs
- ^ Dolphin Emulator - Dolphin Emulator and OpenGL drivers - Hall of Fame/Shame
- ^ Rich Geldreich's Tech Blog: The Truth on OpenGL Driver Quality
- ^ Reference Compiler
- ^ 2年間ずっとわからなかったOpenGLのバグ - リンゴをかじれ, Internet Archive
- ^ opengl:glsl [HYPERでんち]
- ^ 「OpenGL 4.4」および「OpenCL 2.0」が発表される | SourceForge.JP Magazine:
- ^ google/angle: A conformant OpenGL ES implementation for Windows, Mac, Linux, iOS and Android.
- ^ Googleが「ANGLE」プロジェクト、Windows向けにWebGL互換レイヤ | マイナビニュース
- ^ Qt 5 on Windows ANGLE and OpenGL/ja - Qt Wiki
- ^ Google Developers Japan: Android Q ベータ版の概要
- ^ NVIDIA Quadro RTX 5000 Specs | TechPowerUp GPU Database
- ^ NVIDIA GeForce RTX 2080 SUPER Specs | TechPowerUp GPU Database
- ^ PassMark - Quadro RTX 5000 - Price performance comparison
- ^ PassMark - GeForce RTX 2080 SUPER - Price performance comparison
- ^ AutoCAD 2008 の動作環境
- ^ AutoCAD 製品で旧バージョンの DirectX を使用する方法
- ^ AutoCAD | 認定グラフィックス ハードウェア | Autodek サポート
- ^ Shade3D 公式 | 【重要】Windows版Shade3Dシリーズをご利用のお客様へ
- ^ Shade3D 公式 | 動作環境 Ver.18
- ^ “Mac向けGeForce GTX 285”. 2013年3月31日閲覧。
- ^ Quadro K5000 for Mac GPUスペック、特徴、ドライバ、サポート | NVIDIA
- ^ EVGA | 記事 | EVGA GTX 680 Mac 版グラフィックカード
- ^ Sapphire、Mac Pro向けのRadeon HD 7950ビデオカード ~Mac OS X向けのEFIとWindows向けのUEFIを切り替え可能 - PC Watch
- ^ ASCII.jp:パーツ換装でMac Pro(Mid 2012)を徹底パワーアップ! (4/6)
- ^ “Microsoft、SGIと共同でグラフィックスプラットフォームを開発”. PC Watch (1997年12月18日). 2012年8月30日閲覧。
- ^ Khronos Groupが「OpenGL 4.5」をリリース | SourceForge.JP Magazine
- ^ OpenGL および OpenCL グラフィックスを扱う Mac コンピュータ - Apple サポート
- ^ OpenCL™、OpenGL®、および Vulkan® 互換機能パック - Microsoft Apps
- ^ Microsoft、ARM環境で「OpenCL」「OpenGL」アプリを動作させる互換機能パックを公開 - 窓の杜
- ^ Announcing the OpenCL™ and OpenGL® Compatibility Pack for Windows 10 on ARM - DirectX Developer Blog
- ^ クアルコム、「Snapdragon X Elite」搭載PCでほとんどのWindowsゲームが動くと予告 | Gadget Gate
関連項目
- DirectX
- Direct3D
- Mantle (API)
- Metal (API)
- Vulkan (API)
- GLSL
- OpenCL
- OpenAL
- OpenGL ES
- OpenSL ES
- Mesa 3D
- VirtualGL
- OpenML
- OpenVG
外部リンク
- OpenGL公式サイト
- SGI公式サイト [リンク切れ]
- Khronos Group
- OpenGL Programming Guide - 通称「赤本 (red book)」と呼ばれる解説書
- OpenGL Reference Manual - 通称「青本 (blue book)」と呼ばれるリファレンス
- OpenGL.jp - FAQ
- GLUTによる「手抜き」OpenGL入門