GLFun(1)~iOSでのOpenGL ESの利用

2011. 09. 10
サンプルコードの内容に入る前に、iOSデバイスでOpenGL ESを利用する際の予備知識を簡単に紹介します。

なおOpenGL ESは体系的に説明するには範囲が膨大過ぎるので、SQLiteの時のようにサンプルコードの解説に必要な最低限の範囲に留めさせていただきます。

説明が不足している分は、リンクしている参考文献などを参照し補間してください。


●OpenGL

OpenGLは2D/3DグラフィックスハードウェアのクロスプラットフォームAPIです。

簡単に言えば、(Mac OS XやUNIX、Windowsなど)異なる環境でも(バージョンや追加ライブラリを揃えれば)ほぼ書き換え無しにそのまま移植できる、3Dグラフィックスのライブラリです。


●OpenGL ES(OpenGL for Embedded Systems)

OpenGL ESはサーバ/デスクトップ向けであるOpenGLの組み込み/モバイル機器向けサブセットです。


●OpenGL ES 1.1と2.0

OpenGL ES 1.1はOpenGL 1.5のサブセットで固定機能パイプラインに対応し、OpenGL ES 2.0はOpenGL 2.0のサブセットでプログラマブルパイプラインに対応しています。
(固定機能パイプラインやプログラマブルパイプラインについては『床井研究室/第1回 レンダリングパイプライン』や『Wikipedia/シェーダ』を参照してください)

OpenGL ES 2.0は固定機能パイプラインに対応していないため、1.1との後方互換性はありません。
(したがって両バージョンに対応させるには、各バージョン用の実装をする必要があります)

バージョンによる差異については『OpenGL ESによるモバイル・組込みグラフィックス』を参照してください。


●iOSのアーキテクチャにおけるOpenGL ES

iOSのアーキテクチャは大きく分けて4層構造になっています。

・Cocoa Touchレイヤ(UIKitフレームワーク)
・Mediaレイヤ(Core Graphicsフレームワーク(別名Quartz)、OpenGL ESフレームワーク)
・Core Servicesレイヤ
・Core OSレイヤ

テーブルやボタン、ナビゲーションバーやツールバーなどの標準的なGUIは、Cocoa TouchレイヤのUIKitフレームワークで提供されています。

UIKitフレームワークで実現できない汎用的な描画をするには、MediaレイヤのCore GraphicsフレームワークやOpenGL ESフレームワークを使用することになります。


●OpenGL ESフレームワーク(OpenGLES.framework)

OpenGL ESフレームワークは2D/3Dコンテンツを描画するためのフレームワークで、iOSではOpenGL ES 1.1と2.0が利用できます。

OpenGL ES 1.1は全てのiOSで、OpenGL ES 2.0はOSとしてはiOS 3.0以降からサポートされています。

ただし(GPUにPowerVR MBX Liteを採用している)初代iPhone、iPhone 3G、ならびに第1、第2世代のiPod touchでは利用できません。


●PowerVR MBXとPowerVR SGX

初代iPhone、iPhone 3G、そして第1、第2世代のiPod touchはGPUにPowerVR MBXを採用しています。

PowerVR MBXは固定機能パイプラインを実装しているため、OpenGL ES 1.1のみ対応しています。

iPhone 3GSとiPhone 4、ならびに第3、第4世代のiPod touch、そしてiPadとiPad 2はGPUにPowerVR SGXを採用しています。

PowerVR SGXはプログラマブルパイプラインを実装していて、OpenGL ES 2.0に対応しているだけでなく、グラフィックドライバでシェーダを使用して固定機能パイプラインを実装しているため、OpenGL ES 1.1にも対応しています。

詳細は『iOS OpenGL ESプログラミングガイド』を参照してください。


●iOSデバイスのiOSとOpenGL ESの対応表

DeviceiPhoneiPod touchiPad
Model3G3GS4
GSM
4
CDMA
1st
gen.
2nd
gen.
3rd
gen.
4th
gen.
iPadiPad 2
Release
date
2007
.6.29
2008
.7.11
2009
.6.19
2010
.6.24
2011
.2.10
2007
.9.14
2008
.9.9
2009
.9.9
2010
.9.8
2010
.4.3
2011
.3.11
LCD480 x 320px960 x 640px480 x 320px960 x
640px
1024 x 768px
CPUARM
1176JZ
(F)-S
412MHz
ARM
Cortex
-A8
600
MHz
Apple
A4
800MHz
ARM
1176J
Z(F)-S
412
MHz
ARM11
533
MHz
ARM
Cortex
-A8
600
MHz
Apple
A4
800
MHz
Apple
A4
1GHz
Apple
A5
1GHz
GPU
(PowerVR)
MBX
Lite 3D
SGX535MBX
Lite 3D
SGX535SGX
535
SGX
543
MP2
Memory128MB256MB512MB128MB256MB256MB512MB
Open
GL ES
1.1
2.0
iOS
Ver.
Rele
ase
1.02007
.6.29
1.0.12007
.7.31
1.0.22007
.8.21
1.12007
.9.14
1.1.12007
.9.27
1.1.22007.
11.12
1.1.32008
.1.15
1.1.42008
.2.26
1.1.52008
.7.15
2.02008
.7.11
2.0.12008
.8.4
2.0.22008
.8.18
2.12008
.9.12
2.1.12008
.9.9
2.22008.
11.21
2.2.12009
.1.27
3.02009
.6.17
3.0.12009
.7.31
3.12009
.9.9
3.1.12009
.9.9
3.1.22009
.10.8
3.1.32010
.2.2
3.22010
.4.3
3.2.12010
.7.15
3.2.22010
.8.11
4.02010
.6.21
4.0.12010
.7.15
4.0.22010
.8.11
4.12010
.9.8
4.2-
4.2.12010.
11.22
4.2.52011
.2.7
4.2.62011
.2.10
4.2.72011
.4.14
4.2.82011
.5.4
4.2.92011
.7.15
4.2.102011
.7.25
4.32011
.3.9
4.3.12011
.3.25
4.3.22011
.4.14
4.3.32011
.5.4
4.3.42011
.7.15
4.3.52011
.7.25

※ ●は対応、▲はマルチタスクなどの一部機能が制限されていることを示します。
※ iOS 4.2は正式リリースされず、4.2.1に置き換えられています。



参考文献

iOSテクノロジーの概要

iOS OpenGL ESプログラミングガイド

Wikipedia/OpenGL(日本語)

Wikipedia/OpenGL

Wikipedia/OpenGL ES(日本語)

Wikipedia/OpenGL ES

OpenGL ES御紹介とアップデート

OpenGL ESによるモバイル・組込みグラフィックス

床井研究室/第1回 レンダリングパイプライン

Wikipedia/シェーダ

Wikipedia/iOS(アップル)

Wikipedia/iOS(Apple)

Wikipedia/IOS version history

Wikipedia/List of iOS devices

Wikipedia/iPhone

Wikipedia/iPod Touch

Wikipedia/iPad






bose_soundsport_free
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
09 | 2017/10 | 11
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

bose_soundsport_free
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR