GLSL~7 組み込み変数

2012. 02. 01
7 組み込み変数

いくつかのOpenGL ES操作は、頂点プロセッサとフラグメントプロセッサ間で、固定機能で動作し続けます。

他のOpenGL ES操作は、フラグメントプロセッサの後に固定機能で動作し続けます。

シェーダは組み込み変数を使用して、OpenGL ESの固定機能を介して通信します。

OpenGL ESでは、頂点シェーダからの出力の一部、フラグメントシェーダへの入力とフラグメントシェーダからの出力の一部から、特殊な変数が組み込まれています。

ユーザ定義の様々な変数とは異なり、組み込み特殊変数は頂点言語とフラグメント言語間で厳密に一対一で対応していません。

代わりに二つが組になり、各言語に一つずつ提供されています。


7.1 頂点シェーダ特殊変数

変数gl_Positionは頂点言語でのみ使用でき、同次頂点位置の書き込みを意図しています。

均整の取れた頂点シェーダの全ての実行は、この変数に値を書き込む必要があります。

これはシェーダ実行中のいつでも書き込むことができます。

また、書き込み後にシェーダから読み戻しされる場合もあります。

この値はプリミティブの組み立て、クリッピング、カリング、そして頂点処理が発生した後にプリミティブを操作する他の固定機能操作で使用されます。

コンパイラは全ての場合を検出できる訳ではありませんが、gl_Positionへの書き込みの失敗、または書き込む前の読み込みを検出した場合、診断メッセージを生成します。

gl_Positionの値は、頂点シェーダが実行され、gl_Positionが書き込まれていない場合は未定義です。

変数gl_PointSizeは頂点言語でのみ使用でき、頂点シェーダのためにラスタライズされる点のサイズの書き込みを意図しています。

これはピクセル単位で示します。

これらの組み込み頂点シェーダ変数と固定機能との通信は、以下の型で固有の宣言がされます。

highp vec4 gl_Position;    // 書き込む必要があります
mediump float gl_PointSize;// 書き込むことができます

これらの変数は書き込まれていない場合、値は未定義です。

書き込まれた内容を取得するため、書き込み後にシェーダによって読み戻すことができます。

書き込み前に読み込んだ場合、結果には未定義の値が返されます。

複数回書き込まれた場合は、後続の操作によって消費され、最後に書き込まれた値になります。

これらの組み込み変数はグローバルスコープを持ちます。


7.2 フラグメントシェーダ特殊変数

フラグメントシェーダの出力は、OpenGL ESパイプラインの最終工程で、固定機能操作によって処理されます。

OpenGL ESパイプラインへのフラグメントシェーダの出力値は、破棄キーワードが実行されていない限り、組み込み変数gl_FragColorとgl_FragDataが使用されます。

gl_FragColorまたはgl_FragDataのどちらかへの書き込みはフラグメントシェーダの要件ではありません。

シャドウボリュームなど、色値が書き込まれないレンダリングパスを含むような多くのアルゴリズムがあります。

これらの変数は、フラグメントシェーダ内で複数回書き込まれる場合があります。

その場合、割り当てられた最後の値が後続の固定機能パイプラインで使用されます。

これらの変数に書き込まれた値は、書き込み後に読み戻される場合があります。

書き込み前にこれらの変数から読み込むと、結果は未定義です。

指定されたフラグメント色をgl_FragColorに書き込むと、後続の固定機能パイプラインによって使用されます。

後続の固定機能がフラグメント色を消費し、フラグメントシェーダの実行でgl_FragColorへ値の書き込みがされなかった場合、消費されたフラグメント色は未定義です。

変数gl_FragDataは配列です。

gl_FragData[n]への書き込みはフラグメントデータを指定するもので、データnは後続の固定機能パイプラインによって使用されます。

後続の固定機能がフラグメントデータを消費し、フラグメントシェーダの実行で値が書き込まれなかった場合、消費されたフラグメントデータは未定義です。

シェーダがgl_FragColorへ静的に値を割り当てた場合、gl_FragDataの要素に値を割り当てることはできません。

シェーダがgl_FragDataの要素に静的に値を書き込んだ場合、gl_FragColorに値を割り当てることはできません。

つまり、シェーダはgl_FragColorまたはgl_FragDataのどちらかに値を割り当てますが、両方ではありません。
(シェーダが変数xへの静的割り当てを含む場合、シェーダにはxに書き込む文が含まれており、前処理後に制御フローで必ず実行時に文が実行されます。)

シェーダが破棄キーワードを実行する場合、フラグメントは破棄され、gl_FragColorとgl_FragDataの値は不適切なものになります。

変数gl_FragCoordはフラグメントシェーダ内から読み込みのみの変数として使用でき、フラグメント用のウィンドウ相対座標x、y、z、そして1 / w値を保持します。

この値は、頂点処理後のフラグメントの生成で、プリミティブを補間する固定機能の結果です。

z要素は、フラグメントの深度で使用される深度値です。

フラグメントシェーダは、フラグメントが前面にある場合にtrueの値を持つ、読み込みのみの組み込み変数gl_FrontFacingへのアクセスを持ちます。

これは頂点シェーダによって計算された2色の内の一つを選択することによって、2つの面のライティングのエミュレートに使用します。

フラグメントシェーダは、読み込みのみの組み込み変数gl_PointCoordへのアクセスを持ちます。

gl_PointCoordの値は、点プリミティブ内での現在のフラグメントの位置を示す二次元座標です。

範囲は点を中心に0.0から1.0になります。

これについては、点スプライトについて論じている、『OpenGL specification version 2.0』の『3.3.1 Basic Point Rasterization』(※『OpenGL ES Common Profile Specification Version 2.0.25』では『3.3 Points』に相当)に詳細が記述されています。

現在のプリミティブが点でない場合、gl_PointCoordから読み込まれる値は未定義です。

フラグメントシェーダからアクセス可能な組み込み変数は、以下のように固有の型が与えられます。

mediump vec4    gl_FragCoord;
  boolgl_FrontFacing;
mediump vec4gl_FragColor;
mediump vec4gl_FragData[gl_MaxDrawBuffers];
mediump vec2gl_PointCoord;

ただし、これらはストレージ修飾子を持たない変数のように動作せず、上述のように動作します。

これらの組み込み変数はグローバルスコープを持ちます。


7.3 頂点シェーダの組み込み属性

OpenGL ESに組み込み属性名はありません。


7.4 組み込み定数

以下の組み込み定数は、頂点とフラグメントのシェーダに提供されています。

//
// 実装依存の定数。
// 以下の例での値は、これらの最大値に許容される最小値です。
//

const mediump int gl_MaxVertexAttribs = 8;
const mediump int gl_MaxVertexUniformVectors = 128;
const mediump int gl_MaxVaryingVectors = 8;
const mediump int gl_MaxVertexTextureImageUnits = 0;
const mediump int gl_MaxCombinedTextureImageUnits = 8;
const mediump int gl_MaxTextureImageUnits = 8;
const mediump int gl_MaxFragmentUniformVectors = 16;
const mediump int gl_MaxDrawBuffers = 1;


7.5 組み込みuniform状態

OpenGL ESの処理状態へのアクセスの補助として、以下のuniform変数がOpenGL ESシェーディング言語に組み込まれています。

全ての表記は、2.0仕様への参照です。

実装がフラグメント言語のhighp精度をサポートせず、状態がhighpとしてリストされている場合、その状態はフラグメント言語のmediumpとしてのみ利用できます。

//
// ウィンドウ座標での深度範囲
//
struct gl_DepthRangeParameters {
    highp float near;    // n
highp float far;// f
highp float diff;// f - n
};
uniform gl_DepthRangeParameters gl_DepthRange;



参考文献

The OpenGL ES Shading Language 1.0.17






bose_soundlink_revolve
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

bose_soundlink_revolve
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