EAGLContextクラス

2011. 09. 15
●概要

EAGLContextオブジェクトは、OpenGL ESを使用して描画するのに必要なリソースやコマンド、状態情報を管理します。

全てのOpenGL ESコマンドは、EAGLコンテキストに関連して実行されます。

テクスチャやレンダバッファなどのリソースの描画は、コンテキストに関連付けられたEAGLSharegroupオブジェクトによって、EAGLContextオブジェクトとして管理されます。

新規にEAGLContextオブジェクトを初期化する時、新規にEAGLSharegroupオブジェクトを生成するか、以前に生成したEAGLコンテキストから取得したものを使用するかを選択することが出来ます。

EAGLコンテキストに描画するには、最初に完全なフレームバッファオブジェクトをコンテキストにバインドする必要があります。

レンダリングコンテキストの設定についての詳細は、『OpenGL ES Programming Guide for iOS』(日本語版は『iOS OpenGL ESプログラミングガイド』)を参照してください。



●タスク

●EAGLコンテキストの生成


– initWithAPI:
– initWithAPI:sharegroup:

●現在のEAGLコンテキストの設定


+ setCurrentContext:

●レンダバッファへのストレージのアタッチ


– renderbufferStorage:fromDrawable:

●レンダバッファの表示


– presentRenderbuffer:

●EAGLコンテキスト情報の取得


  API    property
  sharegroup    property
+ currentContext



●プロパティ

API

@property(readonly) EAGLRenderingAPI API

レシーバでサポートされているOpenGL ESのレンダリングAPIのバージョンを取得します。(読み込みのみ)



●クラスメソッド

currentContext


+ (EAGLContext *)currentContext

呼び出したスレッドの現在のレンダリングコンテキストを返します。

戻り値は呼び出したスレッドの現在のEAGLコンテキストです。


setCurrentContext:


+ (BOOL)setCurrentContext:(EAGLContext *)context

指定したコンテキストを呼び出したスレッドの現在のレンダリングコンテキストとして作成します。

戻り値は成功した場合はYES、それ以外の場合はNOを返します。

エラーが発生した場合、現在のスレッドのレンダリングコンテキストは変更されません。

全てのOpenGL ESの呼び出しは、特記の無い限り、現在のコンテキストに完全に呼び出した順を考慮して発行されます。

EAGLは現在の作成されたコンテキストを保持し、以前のコンテキストは解放します。

nilパラメータでこのメソッドを呼び出すと現在のコンテキストは解放し、全ての描画コンテキストにOpenGL ESのアンバインドをさせます。

複数のスレッド上に現在の同じコンテキストを作成することは避けてください。

OpenGL ESはスレッドの安全性を提供しませんが、複数のスレッド上で同じコンテキストを使用する場合は、複数のスレッドから同じコンテキストへの同時アクセスを防ぐために、スレッドを同期させるいくつかの技術を採用する必要があります。

context:現在作成しようとしているレンダリングコンテキストを指定します。



●インスタンスメソッド

initWithAPI:


- (id)initWithAPI:(EAGLRenderingAPI)api

指定したOpenGL ESのレンダリングAPIのバージョンで、新規に割り当てたレンダリングコンテキストを初期化して返します。

戻り値は初期化されたコンテキストオブジェクト、あるいはオブジェクトが生成できなかった場合はnilを返します。

このコンテキストにOpenGL ESのコマンドを発行するには、setCurrentContext:を呼び出すことによって、現在の描画コンテキストを最初に作成する必要があります。

initWithAPI:を呼び出すと新規にEAGLSharegroupオブジェクトを生成し、このコンテキストにアタッチします。

api:目的とするOpenGL ESのレンダリングAPIのバージョンを指定します。
有効な値については『OpenGL ESのバージョン』を参照してください。


presentRenderbuffer:

- (BOOL)presentRenderbuffer:(NSUInteger)target

画面上にレンダバッファのコンテンツを表示します。

戻り値は成功した場合はYES、そうでない場合はNOになります。

レンダバッファを表示するには、renderbufferStorage:fromDrawable:メソッドを使用してストレージを割り当てておく必要があります。

厳密な意味で、いつ、どのようにレンダバッファのコンテンツを表示するかは、描画可能オブジェクトによって制御されます。

重要:レンダバッファのコンテンツはレンダバッファが画面に表示された後で変更される場合があります。
レンダバッファを表示した後、アプリケーションは再度表示する前にレンダバッファのコンテンツを完全に再描画する必要があります。
レンダバッファのコンテンツを保持するには、drawableProperties辞書のkEAGLDrawablePropertyRetainedBackingキーをYESに設定することができます。
キーをYESに設定すると、グラフィックスのパフォーマンスが低下し、使用メモリが増加するため、レンダバッファのコンテンツを変えずに保持する時のみに行ってください。

target:現在バインドされているレンダバッファ用の、OpenGL ESのバインディングポイントを指定します。
OpenGL ES 1.0 APIを使用するコンテキストの場合は、GL_RENDERBUFFER_OESにする必要があります。
OpenGL ES 2.0 APIを使用するコンテキストの場合は、OES接尾辞を削除する必要があります。


renderbufferStorage:fromDrawable:

- (BOOL)renderbufferStorage:(NSUInteger)target fromDrawable:(id<eagldrawable>)drawable

OpenGL ESのレンダバッファオブジェクトに、描画可能なオブジェクトのストレージをバインドします。

戻り値は成功した場合はYES、それ以外の場合はNOになります。

画面に表示することができるレンダバッファを生成するには、レンダバッファをバインドし、このメソッドを呼び出すことによって共有ストレージを割り当てます。

このメソッドの呼び出しは、通常glRenderbufferStorageへの呼び出しを置換します。

レンダバッファは、このメソッドでストレージを割り当てた後で、presentRenderbuffer:を呼び出して表示することができます。

幅、高さ、内部カラーバッファフォーマットは、描画可能なオブジェクトの特性に由来します。

このメソッドを呼び出す前に、描画可能オブジェクトのdrawableProperties辞書にkEAGLDrawablePropertyColorFormatキーを追加することによって、内部カラーバッファフォーマットをオーバーライドすることができます。

OpenGL ESのレンダバッファが描画可能オブジェクトからデタッチする必要がある場合は、drawableをnilに設定してこのメソッドを呼び出すことができます。

target:現在バインドされているレンダバッファ用の、OpenGL ESのバインディングポイントを指定します。
OpenGL ES 1.0 APIを使用するコンテキストの場合は、GL_RENDERBUFFER_OESにする必要があります。
OpenGL ES 2.0 APIを使用するコンテキストの場合は、OES接尾辞を削除する必要があります。

drawable:EAGLDrawableプロトコルに準拠したオブジェクトで、レンダバッファにバインドするストレージを指定します。
iOS 3.0の場合は常にCAEAGLLayerオブジェクトです。



●定数

OpenGL ESのバージョン

typedef NSUInteger EAGLRenderingAPI;

enum
{
    kEAGLRenderingAPIOpenGLES1 = 1
    kEAGLRenderingAPIOpenGLES2 = 2
};

これらの定数はレンダリングコンテキストが提供するOpenGL ESのバージョンの選択に使用します。

kEAGLRenderingAPIOpenGLES1
コンテキストはOpenGL ES 1.xレンダリングAPIをサポートします。

kEAGLRenderingAPIOpenGLES2
コンテキストはOpenGL ES 2.xレンダリングAPIをサポートします。



参考文献

EAGLContext Class Reference






Wave SoundTouch music system IV
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
06 | 2017/07 | 08
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

Wave SoundTouch music system IV
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