opengl:opengllist
差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン | ||
opengl:opengllist [2014/04/16 20:23] – 作成 oga | opengl:opengllist [2014/10/26 15:57] (現在) – [OpenGL ES 3.1] oga | ||
---|---|---|---|
行 7: | 行 7: | ||
Direct3D 9 世代の GPU をターゲットにしていますが、 | Direct3D 9 世代の GPU をターゲットにしていますが、 | ||
- | 固定機能パイプ欄を廃して描画には Shader が必須となっています。 | + | 固定機能パイプラインを廃して描画には Shader が必須となっています。 |
そのため OpenGL ES 1.1 や OpenGL 1.x 系とは全く互換性がありません。 | そのため OpenGL ES 1.1 や OpenGL 1.x 系とは全く互換性がありません。 | ||
行 14: | 行 14: | ||
固定機能を削除したため、API は描画に必要な最小限で大変シンプルにまとまっています。 | 固定機能を削除したため、API は描画に必要な最小限で大変シンプルにまとまっています。 | ||
- | 必要な機能があればシェーダー実装すればよいわけで、重複した機能がなく、不要なものがありません。 | + | 必要な機能があればシェーダーで実装すればよいわけで、重複した機能がなく合理的です。 |
歴代の 3D API の最も理解しやすいといえるかもしれません。 | 歴代の 3D API の最も理解しやすいといえるかもしれません。 | ||
- | それ故移植性も高く、JavaScript から使える WebGL など、様々なプラットフォームで利用されています。 | + | それ故移植性も高く、ブラウザの |
おそらく最も多くのプラットフォームで利用できる 3D API であるといえるでしょう。 | おそらく最も多くのプラットフォームで利用できる 3D API であるといえるでしょう。 | ||
+ | |||
+ | OpenGL ES 2.0 が使えないプラットフォームを上げた方が早い。(Windows PC, Windows Phone くらいのもの) | ||
+ | |||
入門にもおすすめ。 | 入門にもおすすめ。 | ||
行 26: | 行 29: | ||
- | * Direct3D 8 (ShaderModel 1.0) | + | * Direct3D 8 ShaderModel 1.0 |
* Pixel Shader は 9~12bit の固定小数点演算のみ。(lowp 未満) | * Pixel Shader は 9~12bit の固定小数点演算のみ。(lowp 未満) | ||
* Pixel Shader は Color Combiner を拡張しただけなので、プログラムサイズは 8~16 step + Texture 4~6 step 固定。 | * Pixel Shader は Color Combiner を拡張しただけなので、プログラムサイズは 8~16 step + Texture 4~6 step 固定。 | ||
行 32: | 行 35: | ||
* プログラム言語は基本的に Shader Assembler | * プログラム言語は基本的に Shader Assembler | ||
- | * Direct3D 9 (ShaderModel 2.0) | + | * Direct3D 9 ShaderModel 2.0 |
* Pixel Shader は 24~32bit 浮動小数点演算をサポート | * Pixel Shader は 24~32bit 浮動小数点演算をサポート | ||
* Pixel Shader の Program サイズは、Color 64 step + Texture 32 step の合計 96 step のみ | * Pixel Shader の Program サイズは、Color 64 step + Texture 32 step の合計 96 step のみ | ||
* Texture Fetch 制限が分離 (同じテクスチャを複数読める) ただし上限あり | * Texture Fetch 制限が分離 (同じテクスチャを複数読める) ただし上限あり | ||
- | * Fog など固定機能を併用する | + | * Fog / AlphaTest |
* 汎用補間 Register (varying) はなく Texcoord0~ を流用する。 | * 汎用補間 Register (varying) はなく Texcoord0~ を流用する。 | ||
- | * Direct3D 9 (ShaderModel 3.0) | + | * Direct3D 9 ShaderModel 3.0 |
* Pixel Shader は 32bit 浮動小数点演算をサポート | * Pixel Shader は 32bit 浮動小数点演算をサポート | ||
* Program サイズは 512 step 以上 | * Program サイズは 512 step 以上 | ||
行 63: | 行 66: | ||
+ | ===== OpenGL ES 3.0 ===== | ||
+ | |||
+ | Mobile 向け GPU の高機能化に伴い、新しい世代の GPU 用に策定された API です。 | ||
+ | |||
+ | OpenGL 3.x のモバイル向け API で、DirectX でいえば Direct3D 10 世代に相当します。 | ||
+ | |||
+ | Desktop 向けではこの世代から完全に Shader only となり、固定機能や古いシェーダー機能などレガシー API を削除しました。 | ||
+ | そのため Shader 言語など、大きく仕様変更されているものがあります。 | ||
+ | (OpenGL 3.x/4.x の場合は Compatibility Profile を用いることで、従来の固定機能 API もそのまま利用できます。) | ||
+ | |||
+ | ところが Mobile では Desktop 版 API とは少々異なる事情となっています。 | ||
+ | |||
+ | * 一世代前にすでにレガシー固定機能を取り除いてスリム化している | ||
+ | * OpenGL ES 2.0 が事実上の 3D API の標準として、非常に多くの OS やプラットフォームで活用されている | ||
+ | |||
+ | そのため OpenGL ES 3.0 は Desktop API とは逆に、OpenGL ES 2.0 との互換性を強く維持しています。 | ||
+ | GL API も Shader もそのままのコードが OpenGL ES 3.0 の上で動きますし、 | ||
+ | OpenGL ES 3.0 の機能を必ずしも使わなくて構いません。 | ||
+ | Default Uniform block など互換性を保つための仕組みがあるからです。 | ||
+ | |||
+ | |||
+ | この流れは Desktop API に逆輸入されており、OpenGL 4.1 では OpenGL ES 2.0 との API 互換 Profile が設けられました。 | ||
+ | 一旦排除された OpenGL 2.x 世代の API の復活となります。 | ||
+ | OpenGL 4.3 でも OpenGL ES 3.0 との互換性が保たれています。 | ||
+ | |||
+ | 同じように DirectX でも Direct3D11 では、ShaderModel 9/10 などの GPU をサポートすることになりました。 | ||
+ | Direct3D 10 で一旦切り捨てた下位 GPU ですが、Mobile 向けに各種 SoC のサポートが必要になったためと考えられます。 | ||
+ | |||
+ | |||
+ | |||
+ | 機能的には Direct3D10 / OpenGL 3.3 から機能を削減したものに相当します。 | ||
+ | 削除された機能でわかりやすいのは GeometryShader でしょう。 | ||
+ | Direct3D 10 の目玉のひとつでしたが、OpenGL で対応したのは OpenGL 3.2 からです。 | ||
+ | OpenGL 3.0/3.1 には GeometryShader がなかったので、OpenGL ES 3.0 によく似ているといえます。 | ||
+ | |||
+ | シェーダープログラムの汎用化が進み、 | ||
+ | リソースはすべてバッファとして統合されました。 | ||
+ | |||
+ | カラーチャンネルも R G B A (x y z w) が等しい扱いとなりました。 | ||
+ | D3D9/GL2 世代までは Color と Alpha で差がありました。 | ||
+ | 1ch Texture は Luminance か Alpha の 2択。D3D10/ | ||
+ | |||
+ | VertexShader , PixelShader の機能的な区別も完全に無くなっています。 | ||
+ | |||
+ | |||
+ | ところが Mobile 向け GPU の多くは OpenGL ES 2.0 (ShaderModel 3.0) の時点で Unified Shader 化されたものが多かったので、 | ||
+ | それほど目新しさがありません。 | ||
+ | MRT 対応化など、最低要件を引き上げたことが重要なポイントといえるでしょう。 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== OpenGL ES 3.1 ===== | ||
+ | バージョン番号は 0.1 とマイナーなアップデートですが、 | ||
+ | 仕様的には OpenGL ES 3.0 よりもさらに 1世代上に相当します。 | ||
+ | OpenGL ES 3.1 は Direct3D 11 / OpenGL 4.x のモバイル向け API です。 | ||
+ | 最大の特徴は Compute Shader に対応したこと。 | ||
+ | ただし Tessellator は存在しておらず、Direct3D 11 の特徴のひとつであった HalShader / DomainShader がありません。 | ||
+ | Tessellator は Rasterizer と同じで HW 固定機能のサポートが必要です。 | ||
+ | ハードウエアの負担を減らしつつ、効果的な機能を優先したためではないかと考えられます。 | ||
+ | また OpenGL ES 3.0 世代の GPU は OpenCL に対応しているものが少なくありません。 | ||
+ | すでに ComputeShader を走らせるだけの機能が GPU に備わっていたことも理由のひとつといえるのではないでしょうか。 | ||
+ | * [[http:// | ||
+ | ^ OpenGL | ||
+ | | OpenGL ES 2.0 | GLSL 1.0 | | ||
+ | | OpenGL 2.0 | GLSL 1.1 | | ||
+ | | OpenGL 2.1 | GLSL 1.2 | | ||
+ | | OpenGL 3.0 | GLSL 1.3 | | ||
+ | | OpenGL 3.1 | GLSL 1.4 | | ||
+ | | OpenGL 3.2 | GLSL 1.5 | | ||
+ | | OpenGL ES 3.0 | GLSL 3.0 (es) | | ||
+ | | OpenGL ES 3.1 | GLSL 3.1 (es) | | ||
+ | | OpenGL 3.3 | GLSL 3.3 | | ||
+ | | OpenGL 4.0 | GLSL 4.0 | | ||
+ | | OpenGL 4.1 | GLSL 4.1 | | ||
+ | | OpenGL 4.2 | GLSL 4.2 | | ||
+ | | OpenGL 4.3 | GLSL 4.3 | | ||
+ | | OpenGL 4.4 | GLSL 4.4 | | ||
+ | | OpenGL 4.5 | GLSL 4.5 | | ||
行 75: | 行 157: | ||
+ | ===== OpenGL ES 3.1 AEP (Android Extension Pack) ===== | ||
+ | * [[https:// | ||
+ | OpenGL ES 3.1 に OpenGL 4.x 相当の Extension を追加したものです。 | ||
+ | Geometry Shader (gs), Tessellation Control Shader (tcs, hs), Tessellation | ||
+ | ShaderModel は 5.0 (Direct3D11) 世代となり、Desktop GPU との機能面での差はほぼ無くなっています。 | ||
+ | Android 5.0 (Lollipop) 及び NVIDIA Tegra K1 が対応しています。 | ||
opengl/opengllist.1397647431.txt.gz · 最終更新: 2014/04/16 20:23 by oga