▼Androidメモ▼
GLSL

シェーダ
シェーダ 説明
頂点シェーダ
(バーテックスシェーダ)
頂点ごとの操作を記述するプログラム。
頂点に対してのみ作用し、位置や色やテクスチャ座標といった頂点属性の
参照および変更を行う。

フラグメントシェーダ
(ピクセルシェーダ)
ピクセルごとの操作を記述するプログラム。
ピクセルのみに作用し、テクスチャを参照することでバンプマッピング、フォグ、
シャドウ、ブルームといったエフェクトをレンダリング結果に適用することができる。

GLSLの変数の型
変数クラス 説明 使用例
スカラー float,int,bool スカラーのデータ型
(浮動小数点値,整数値,ブール値)
int myFloat=1.0;
bool myBool=true;
int myInt=0;

//キャスト
mFloat=float(myBool);
myFloat=float(myInt);
myBool=bool(myInt);
浮動小数点型ベクトル float,vec2,vec3,vec4 浮動小数点のベクトル型
(1,2,3,4成分)
vec4 myVec4=vec4(1.0);//{1.0,1.0,1.0,1.0};
vec3 myVec3=vec3(1.0 0.0,0.5);//{1.0,0.0,0.5};

//キャスト
vec2 myVec2=vec2(myVec3);//{myVec3.x,myVec3.y}
整数型ベクトル int,ivec2,ivec3,ivec4 整数のベクトル型
(1,2,3,4成分)
ブール型ベクトル bool,bvec2,bvec3,bvec4 ブールのベクトル型
(1,2,3,4成分)
行列 mat2,mat3,mat4 浮動小数点の行列
(2x2,3x3,4x4)
mat3 myMat3=mat3(
1.0,0.0,0.0,
0.0,1.0,0.0,
0.0,0.0,1.0);

ベクトル成分
種別 ベクトル成分 使用例
座標 {x,y,z,w} vec3 myVec3=vec3(0.0,1.0,2.0);
float myX=vec3.x;
 
vec3 temp;
temp=myVec3.xyz;//{0.0,1.0,2.0}
temp=myVec3.xxx;//{0.0,0.0,0.0}
temp=myVec3.zyx;//{2.0,1.0,0.0}
{r,g,b,a}
テクスチャ座標 {s,t,r,q}

添字
種別 添字 使用例
行列 [0]
[1][1]
mat4 myMat4=mat4(1.0);
vec4 col0=myMat4[0];//行列からcol0にベクトルを取り出す
float m1_1=myMat4[1][1];//行列[1][1]の要素の取得
float m2_2=myMat4[2].z;/行列[2][2]の要素の取得

定数
定数 使用例
const const float zero=0.0;
const float pi=3.14159;
const vec4 red=3.14159;
const vec4 red=vec4(1.0,0.0,0.0,1.0);
const mat4 identity=mat4(1.0);

変数の修飾子
修飾子 説明 使用例
attribute修飾子 外部から頂点シェーダへの入力
頂点ごとに異なる値が渡される
glGetAttribLocation()メソッドでハンドラ取得
glEnableVertexAttribArray()メソッドでハンドラ有効化
attribute vec4 a_Position;
uniform修飾子 外部から頂点シェーダまたはフラグメントシェーダへの入力
全ての頂点で同じ値が渡される
glGetUniformLocation()メソッドでハンドラ取得
uniform vec4 u_Color;
varying修飾子数 頂点シェーダではフラグメントシェーダへの出力
フラグメントシェーダでは頂点シェーダからの入力
varying vec4 v_Color;

精度修飾子
修飾子 説明 使用例
lowp 低精度 precision lowp float;
mediump 中精度 precision mediump float;
highp 高精度(デフォルト) precision highp float;

構造体
構造体 使用例
struct struct
fogStruct {
    vec4 color;
    float start;
    float end;
} fogVar;

fogVar=fogStruct(vec4(0.0,1.0,0.0,0.0),//color
    0.5,//start
    2.0};//end

vec4 color=fogVar.color;
float start=fogVar.start;
float end=fogVar.end;

演算子
演算子 説明 使用例
*
/
+
-
乗算
余算
加算
減算
float myFloat;
vec4 myVec4;
mat4 myMat4;

myVec4=myVec4*myFloat;
myVec4=myVec4*myVec4;
myVec4=myMat4*myVec4;
myMat4=myMat4*myMat4;
++
--
インクリメント
デクリメント
= 代入
+=
-=
*=
/=
算術代入
==
!=
<
>
<=
>=
比較演算子
&&
^^
||
論理積
排他的論理和
包括的論理和

関数
修飾子 説明 使用例
in 何も指定しない場合のデフォルト。
変数を値で渡す。
vec4 myFunc(inout float myFloat,out vec4 myVec4,mat4 myMat4);

vec4 diffuse(vec3 normal,vec3 light,vec4 baseColor){
    return baseColor*doc(normal,light);
}
inout 変数が参照で渡す。
out 変数の値は関数に渡さず、関数から戻る時に変更される

頂点シェーダの入出力
入出力 変数名 説明
入力 attribute修飾子の変数 外部から頂点シェーダへの入力
頂点ごとに異なる値が渡される
uniform修飾子の変数 外部から頂点シェーダへの入力
全ての頂点で同じ値が渡される
出 力 varying修飾子の変数 フラグメントシェーダへの出力
gl_Position 変換後の頂点座標
gl_PointSize ポイントスプライトのサイズ
gl_FrontFacing ポリゴンが表裏(trueで表)
※自動計算されるので直接代入する必要なし

フラグメントシェーダの入出力
入出力 変数名 説明
入力 varing修飾子の変数 頂点シェーダからの入力
uniform修飾子の変数 外部からシェーダへの入力
全てのピクセルで同じ値が渡される
gl_FragCoord ウィンドウ座標(x,y,z,1/w)
gl_FrontFacing ポリゴンが表裏(trueで表)
gl_PointCoord ポイントスプライト用の2次元座標(0〜1)
出 力 gl_FragColor 変換後の色


−戻る−