OpenGL ESについて

Open Graphics Library(OpenGL)は、2Dおよび3Dのデータを視覚化するために使用します。OpenGLは、オープンスタンダードに基づいた多用途のグラフィックスライブラリで、2Dおよび3Dのデジタルコンテンツ作成、機械設計および建築設計、仮想プロトタイピング、フライトシミュレーション、ビデオゲームなどのアプリケーションをサポートします。OpenGLを使用して、3Dグラフィックスパイプラインを設定し、そのパイプラインにデータを送信します。頂点は、変形およびライティングされ、プリミティブとして組み立てられ、ラスタ化されて2D画像が作成されます。OpenGLは関数呼び出しを、基盤となるグラフィックスハードウェアに送信可能なグラフィックスコマンドに変換するために設計されています。この基盤ハードウェアはグラフィックスコマンドの処理専用のため、OpenGLによる描画は一般に非常に高速です。

OpenGL for Embedded Systems(OpenGL ES)は、OpenGLの冗長な機能を取り除いた簡略版で、OpenGLよりも覚えやすく、モバイルグラフィックスハードウェアに実装しやすいライブラリを提供します。

../Art/cpu_gpu_2x.png../Art/cpu_gpu_2x.png

概要

OpenGL ESを使用すると、基盤となるグラフィックスプロセッサの機能をアプリケーションが利用できます。iOSデバイスのGPUは、洗練された2Dおよび3D描画のほか、最終画像のすべてのピクセルで複雑なシェーディング計算を実行できます。OpenGL ESを使用すべきなのは、アプリケーションの設計要件でGPUハードウェアに対して可能な最も直接的かつ包括的なアクセスが必要とされる場合です。OpenGL ESの一般的なクライアントとして、3Dグラフィックスを表示するビデオゲームやシミュレーションがあります。

OpenGL ESは、低レベルでハードウェアに焦点を合わせたAPIです。最も高機能で柔軟なグラフィックス処理ツールではありますが、学習曲線が急で、アプリケーションの設計全体に対して重大な影響があります。特殊なユーザのために高性能なグラフィックスが必要なアプリケーションに対して、iOSはいくつかのより高レベルなフレームワークを提供します。

OpenGL ESはiOSにおけるプラットフォームに依存しないAPI

OpenGL ESはC言語ベースのAPIであるため、移植性が非常に高く、幅広くサポートされています。OpenGL ESは、C言語のAPIとして、Objective-CのCocoa Touchアプリケーションとシームレスに統合します。OpenGL ESの仕様はウインドウレイヤを定義しておらず、ホストオペレーティングシステムがOpenGL ESレンダリングコンテキスト(コマンド受理)とフレームバッファ(描画コマンドの結果の書き込み先)を作成する関数を提供しなければなりません。iOS上でOpenGL ESを使用する場合は、iOSクラスを使用して描画サーフェスを設定および表示し、プラットフォームに依存しないAPIを使用してそのコンテンツをレンダリングします。

GLKitによる描画サーフェスとアニメーションサポートの提供

UIKitフレームワークによって定義された、ViewおよびView Controllerにより、iOS上でビジュアルコンテンツの表示が制御されます。GLKitフレームワークは、これらのクラスのOpenGL ES対応バージョンを提供します。OpenGL ESアプリケーションの開発時に、GLKViewオブジェクトを使用してOpenGL ESコンテンツをレンダリングします。GLKViewControllerオブジェクトを使用して、ビューを管理したり、そのコンテンツのアニメーション化をサポートしたりすることもできます。

iOSでの代替レンダリング対象のサポート

画面全体またはビュー階層の一部を占める描画コンテンツ以外に、他のレンダリング方法にOpenGL ESフレームバッファオブジェクトも使用できます。iOSは、標準的なOpenGL ESフレームバッファオブジェクトを実装します。これは、オフスクリーンバッファやOpenGL ESシーンの他の部分で使用するテクスチャへのレンダリングに使用できます。さらに、iOS上のOpenGL ESは、Core Animationレイヤ(CAEAGLLayerクラス)へのレンダリングをサポートします。このレイヤを他のレイヤと結合して、アプリケーションのユーザインターフェイスまたはその他の視覚的表示を構築することができます。

アプリケーションに必要な追加のパフォーマンスチューニング

グラフィックスプロセッサは、グラフィックス操作向けに最適化された並行処理デバイスです。アプリケーションに優れたパフォーマンスを発揮させるには、グラフィックスハードウェアがアプリケーションと並行で動作するよう、アプリケーションを注意深く設計してデータとコマンドをOpenGL ESに供給しなければなりません。チューニングが十分でないアプリケーションは、一方がコマンドの処理を完了するまでCPUまたはGPUのどちらかを待機させることになります。

OpenGL ES APIを効率よく使用してアプリケーションを設計してください。アプリケーションのビルドが完了したら、Instrumentsを使用してアプリケーションのパフォーマンスを微調整します。OpenGL ES内でアプリケーションのボトルネックが発生している場合は、このガイドの情報を使用してアプリケーションのパフォーマンスを最適化してください。

Xcodeは、OpenGL ESアプリケーションのパフォーマンスを向上する新しいツールを提供します。

バックグラウンドアプリケーションでOpenGL ESを使用できない可能性について

バックグラウンドで実行されるアプリケーションはOpenGL ES関数を呼び出さない場合があります。アプリケーションがバックグラウンド時にグラフィックスプロセッサにアクセスすると、iOSがアプリケーションを自動的に終了します。これを回避するには、バックグラウンドへの移行前にOpenGL ESに送信された未処理のコマンドをフラッシュし、アプリケーションがフォアグラウンドに戻るまでの間OpenGL ESを呼び出さないようにする必要があります。

OpenGL ESによるマルチスレッドアプリケーションへのその他の制約事項

並列処理を利用するようアプリケーションを設計することは、アプリケーションパフォーマンスの向上に役立つ可能性があります。OpenGL ESアプリケーションに並列処理を追加する場合は、アプリケーションが、異なる2つのスレッドから同じコンテキストに同時にアクセスしないようにしなければなりません。

この文書の使い方

まず、「OpenGL ESを組み込んでiOSアプリケーションを構築するためのチェックリスト」「OpenGL ESコンテキストの設定」「OpenGL ESおよびGLKitによる描画」の3章を読んでください。ここでは、OpenGL ESがiOSに統合されている様子を概観した後、このライブラリを活用する初めてのアプリケーションを実装し、iOSデバイス上で実行するために必要な事項を詳しく解説します。

iOSでOpenGL ESを使うための基本事項を理解したところで、プラットフォームに特有の重要なガイドラインを述べた、「その他のレンダリング先への描画」「マルチタスク、高解像度、iOSのその他の機能」の2章に目を通してください。iOS 5.0以前でOpenGL ESを使ったことがある開発者向けに、「OpenGL ESおよびGLKitによる描画」で、開発効率の向上に資する新機能を紹介しています。

最後に、「OpenGL ES設計ガイドライン」「OpenGL ESアプリケーションのチューニング」の2章およびそれ以降の各章で、効率のよいOpenGL ESアプリケーションの設計法を、深く掘り下げて解説します。

特に断りのない限り、本書のOpenGL ESコード例は、OpenGL ES 3.0を対象としています。他のバージョンのOpenGL ESでこのコード例を使用するには、変更を加える必要がある場合があります。

お読みになる前に

OpenGL ESを使用してみる前に、iOSアプリケーション全体のアーキテクチャに慣れておく必要があります。詳細については、『iOSアプリケーションの開発を始める』を参照してください。

この資料は、各種プラットフォームで動作するOpenGL ESのAPIの、詳細なチュートリアルやリファレンスとしては使えません。OpenGL ESについてさらに詳しくは、以下に示す資料を参照してください。

関連項目

OpenGL ESはKhronos Groupによって定義された公開標準です。OpenGL ES標準の詳細については、http://www.khronos.org/opengles/のWebページを参照してください。