OpenGL ESテンプレート(9)~GLFunViewControllerクラス(8)

2012. 02. 13
18)validateProgram:メソッド

- (BOOL)validateProgram:(GLuint)prog
{
    GLint logLength, status;

    glValidateProgram(prog);
    glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &logLength);
    if (logLength > 0)
    {
        GLchar *log = (GLchar *)malloc(logLength);
        glGetProgramInfoLog(prog, logLength, &logLength, log);
        NSLog(@"Program validate log:\n%s", log);
        free(log);
    }

    glGetProgramiv(prog, GL_VALIDATE_STATUS, &status);
    if (status == 0)
        return FALSE;

    return TRUE;
}

validateProgram:メソッドはdrawFrameメソッドから呼び出されるメソッドで、指定されたプログラムオブジェクトがOpenGLの状態で実行できるかどうかの検証を行います。

最初にglValidateProgramでプログラムオブジェクトを検証します。

その後linkProgramメソッドと同様に、プログラムオブジェクトの情報ログの出力と、検証の成否判定を行います。

プログラムオブジェクトの情報ログの出力は、glGetProgramivで情報ログの文字列長を示すGL_INFO_LOG_LENGTHを指定し、取得します。

情報ログに何らかの情報がある場合は、文字列数logLength分のメモリを確保し、glGetProgramInfoLogで情報ログを格納し、NSLogで出力します。

検証の成否判定は、glGetProgramivで検証の成否を示すGL_VALIDATE_STATUSを指定し、その値を得ます。

検証に成功した場合はTRUEを返し、失敗した場合はFALSEを返します。

glValidateProgram

プログラムオブジェクトを検証します。

void glValidateProgram(GLuint program);

glValidateProgramは、program内に含まれている実行可能オブジェクトが、与えられた現在のOpenGLの状態で実行できるかどうかをチェックします。

検証工程によって生成された情報は、programの情報ログ内に格納されます。

検証情報は、空の文字列、または現在のOpenGLの状態の残りと現在のプログラムオブジェクトがどのように相互作用するかに関する情報が含まれた文字列の場合があります。

これは、現在のプログラムの非効率、次善策、実行の失敗などについての原因に関する詳細な情報を伝える、OpenGLの実装方法を提供します。

検証操作の状態は、プログラムオブジェクトの状態の一部として格納されます。

この値は、検証に成功した場合はGL_TRUE、それ以外の場合はGL_FALSEに設定されます。

これは引数programとGL_VALIDATE_STATUSでglGetProgramivを呼び出すことによって、照会することができます。

検証が成功した場合、programは与えられた現在の状態で実行されることが保証されます。

それ以外の場合、programは実行を保証しません。

この関数は、通常アプリケーション開発工程中のみ有効です。

情報ログ内に格納されている情報文字列は完全に実装依存なため、アプリケーションが同一の情報文字列を生成するために、異なるOpenGLの実装を期待してないでください。

この関数は、プログラマブルシェーダが現在の状態の一部である間にレンダリングコマンドが発行された時、OpenGLの実装が実行する必要がある検証操作を模倣しています。

現在のプログラムオブジェクト内の2つのアクティブなサンプラーが異なるタイプでありながら、同じテクスチャ画像ユニットを参照している場合、glDrawArraysまたはglDrawElementsによってエラーGL_INVALID_OPERATIONが発生します。

レンダリングコマンドが発行された時に、アプリケーションがこれらのエラーを捕捉することは困難であるか、またはパフォーマンス低下の原因となります。

したがって、アプリケーション開発中にこれらの問題を発見するために、glValidateProgramを呼び出すことを勧めます。

programがOpenGLによって生成された値でない場合、GL_INVALID_VALUEが発生します。

programがプログラムオブジェクトでない場合、GL_INVALID_OPERATIONが発生します。

program:検証するプログラムオブジェクトのハンドルを指定します。



参考文献

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

OpenGL ES 2.0 Reference Pages






コンパニオン20
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
03 | 2017/04 | 05
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 - - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

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

Wish List
WACOM


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

コンパニオン20
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