概要
日本語サイトは情報が古く、2.Xまでのものしかなく、リンク切れも多いです。
バージョン
-
1.X
- OpenGLES1.0は、OpenGL1.3ベース
- OpenGLES1.1は、OpenGL1.5ベース
- 固定機能パイプライン
-
2.X
- OpenGLES2.0は、OpenGL2.0ベース
- プログラマブルパイプライン
- 頂点シェーダーとフラグメントシェーダー
-
3.X
- OpenGLES3.0
- DirectX10相当の機能の追加
- ジオメトリーシェーダーなし
- OpenGLES3.1
- DirectX11相当の機能の追加
- コンピュートシェーダーの導入
- ジオメトリーシェーダー、テッセレーションなし
- OpenGLES3.0
GLのデータ型
GL型 | 最小ビット幅 | 説明 |
---|---|---|
boolean | 1 | ブール値 |
byte | 8 | 符号付き2進数 |
ubyte | 8 | 符号なし2進数 |
char | 8 | 文字列用の文字 |
short | 16 | 符号付き2進数 |
ushort | 16 | 符号なし2進数 |
int | 32 | 符号付き2進数 |
uint | 32 | 符号なし2進数 |
float | 32 | 浮動小数点数 |
clampf | 32 | 0〜1に制限された浮動小数点数 |
fixed | 32 | 符号付き固定小数点数 |
sizei | 32 | 0以上2進数によるサイズ |
enum | 32 | 2新数値の列挙 |
bitfield | 32 | ビットフィールド |
intptr | ptrbits | 符号付き2進数 |
sizeiptr | ptrbits | 0以上の2進数によるサイズ |
頂点と頂点配列
頂点
頂点のAttribute変数を設定
void VertexAttrib{1234}{f}(uint index, T values);
void VertexAttrib{1234}{f}v(uint index, T values);
頂点配列
頂点Atributeの位置の指定
void VertexAttribPointer(uint index, int size, enum type, boolean normalized, sizei stride, const void *pointer);
- type: BYTE, UNSIGNED_BYTE, SHORT, UNSIGNED_SHORT, FIXED, FLOAT
- index: [0, MAX_VERTEX_ATTRIBS - 1]
頂点Attribute配列を使う/使わない
void EnableVertexAttribArray(uint index);
void DisableVertexAttribArray(uint index);
- index: [0, MAX_VERTEX_ATTRIBS - 1]
インデックスなし頂点の描画
void DrawArrays(enum mode, int first, sizei count);
インデックスあり頂点の描画
void DrawElements(enum mode, sizei count, enum type, void *indices);
- mode: POINTS, LINE_STRIP, LINE_LOOP, LINES, TRIANGLE_STRIP, TRIANGLE_FAN, TRIANGLES
- type: UNSIGNED_BYTE, UNSIGNED_SHORT
シェーダーとプログラム
シェーダーオブジェクト
シェーダーの作成
uint CreateShader(enum type);
- type: VERTEX_SHADER, FRAGMENT_SHADER
シェーダーのソースの指定
void ShaderSource(uint shader, sizei count, const char **string, const int *length);
シェーダーのコンパイル
void CompileShader(uint shader);
シェーダーの解放
void ReleaseShaderCompiler(void);
シェーダーの削除
void DeleteShader(uint shader);
シェーダーバイナリのロード
void ShaderBinary(sizei count, const uint *shaders, enum binaryformat, const void *binary, sizei length);
プログラムオブジェクト
シェーダープログラムの作成
uint CreateProgram(void);
シェーダーのアタッチ
void AttachShader(uint program, uint shader);
シェーダーのデタッチ
void DetachShader(uint program, uint shader);
シェーダーオブジェクトのリンク
void LinkProgram(uint program);
使用するシェーダーの指定
void UseProgram(uint program);
シェーダープログラムの削除
void DeleteProgram(uint program);
Attrbute変数とUniform変数
頂点Attrbute変数
アクティブなAttribute変数の取得
void GetActiveAttrib(uint program, uint index, sizei bufSize, sizei *length, int *size, enum *type, char *name);
- *type 戻り値: FLOAT, FLOAT_VEC{2,3,4}, FLOAT_MAT{2,3,4}
Attribute変数の位置の取得
int GetAttribLocation(uint program, const char *name);
Attribute変数と結合
void BindAttribLocation(uint program, uint index, const char *name);
Uniform変数
Uniform変数の位置の取得
int GetUniformLocation(uint program, const char *name);
アクティブなUniform変数の取得
void GetActiveUniform(uint program, uint index, sizei bufSize, sizei *length, int *size, enum *type, char *name);
- *type: FLOAT, FLOAT_VEC{2,3,4}, INT, INT_VEC{2,3,4}, BOOL, BOOL_VEC{2,3,4}, FLOAT_MAT{2,3,4}, SAMPLER_2D, SAMPLER_CUBE
Uniform変数に値を設定
void Uniform{1234}{if}(int location, T value);
void Uniform{1234}{if}v(int location, sizei count, T value);
void UniformMatrix{234}fv(int location, sizei count, boolean transpose, const float *value);
- transpose: FALSE
シェーダーのチェック
シェーダーの妥当性チェック
void ValidateProgram(uint program);
シェーダーへの問い合わせ
シェーダーがあるか?
boolean IsShader(uint shader);
シェーダーの値の取得
void GetShaderiv(uint shader, enum pname, int *params);
- pname: SHADER_TYPE, DELETE_STATUS, COMPILE_STATUS, INFO_LOG_LENGTH, SHADER_SOURCE_LENGTH
アタッチされたシェーダーの取得
void GetAttachedShaders(uint program, sizei maxCount, sizei *count, uint *shaders);
シェーダーのログを取得
void GetShaderInfoLog(uint shader, sizei bufSize, sizei *length, char *infoLog);
シェーダーのソースを取得
void GetShaderSource(uint shader, sizei bufSize, sizei *length, char *source);
シェーダーの精度形式を取得
void GetShaderPrecisionFormat(enum shadertype, enum precisiontype, int *range, int *precision);
- shadertype: VERTEX_SHADER, FRAGMENT_SHADER
- precision: LOW_FLOAT, MEDIUM_FLOAT, HIGH_FLOAT, LOW_INT, MEDIUM_INT, HIGH_INT
頂点Attribute変数の値の取得
void GetVertexAttribfv(uint index, enum pname, float *params);
- pname: CURRENT_VERTEX_ATTRIB , VERTEX_ATTRIB_ARRAY_x (x は BUFFER_BINDING, ENABLED, SIZE, STRIDE, TYPE, NORMALIZED)
void GetVertexAttribiv(uint index, enum pname, int *params);
- pname: CURRENT_VERTEX_ATTRIB , VERTEX_ATTRIB_ARRAY_x (x は BUFFER_BINDING, ENABLED, SIZE, STRIDE, TYPE, NORMALIZED)
void GetVertexAttribPointerv(uint index, enum pname, void **pointer);
- pname: VERTEX_ATTRIB_ARRAY_POINTER
Uniform変数の値の取得
void GetUniformfv(uint program, int location, float *params)
void GetUniformiv(uint program, int location, int *params)
プログラムへの問い合わせ
シェーダープログラムがあるか?
boolean IsProgram(uint program);
シェーダープログラムの取得
void GetProgramiv(uint program, enum pname, int *params);
-
pname: DELETE_STATUS, LINK_STATUS, VALIDATE_STATUS, INFO_LOG_LENGTH, ATTACHED_SHADERS, ACTIVE_ATTRIBUTES, ACTIVE_ATTRIBUTE_MAX_LENGTH, ACTIVE_UNIFORMS, ACTIVE_UNIFORM_MAX_LENGTH
-
シェーダープログラムのログの取得
void GetProgramInfoLog(uint program, sizei bufSize, sizei *length, char *infoLog);
フラグメント前の操作
シザーテスト
有効/無効
Enable/Disable(SCISSOR_TEST)
- シザー範囲の指定
void Scissor(int left, int bottom, sizei width, sizei height );
マルチサンプリングフラグメント操作
有効/無効
Enable/Disable(cap)
- cap: SAMPLE_ALPHA_TO_COVERAGE, SAMPLE_COVERAGE
サンプリング範囲の指定
void SampleCoverage(clampf value, boolean invert);
ステンシルテスト
有効/無効
Enable/Disable(STENCIL_TEST)
ステンシル関数の指定
void StencilFunc(enum func, int ref, uint mask);
ステンシル関数の個別指定
void StencilFuncSeparate(enum face, enum func, int ref, uint mask);
ステンシル操作の指定
void StencilOp(enum sfail, enum dpfail, enum dppass);
ステンシル操作の個別指定
void StencilOpSeparate(enum face, enum sfail, enum dpfail, enum dppass);
- face: FRONT, BACK, FRONT_AND_BACK
- sfail, dpfail, dppass: KEEP, ZERO, REPLACE, INCR, DECR, INVERT, INCR_WRAP, DECR_WRAP
- func: NEVER, ALWAYS, LESS, LEQUAL, EQUAL, GREATER, GEQUAL, NOTEQUAL
深度テスト
有効/無効
Enable/Disable(DEPTH_TEST)
深度テスト関数の指定
void DepthFunc(enum func);
- func: NEVER, ALWAYS, LESS, LEQUAL, EQUAL, GREATER, GEQUAL, NOTEQUAL
ブレンディング
有効/無効
Enable/Disable(BLEND) (applies to all draw buffers)
ブレンディング式の指定
void BlendEquation(enum mode);
ブレンディング式の個別指定
void BlendEquationSeparate(enum modeRGB, enum modeAlpha);
- mode, modeRGB, modeAlpha: FUNC_ADD, FUNC_SUBTRACT, FUNC_REVERSE_SUBTRACT
ブレンディング関数の個別指定
void BlendFuncSeparate(enum srcRGB, enum dstRGB, enum srcAlpha, enum dstAlpha);
ブレンディング関数の指定
void BlendFunc(enum src, enum dst);
- dst, dstRGB, dstAlpha: ZERO, ONE, [ONE_MINUS_]SRC_COLOR, [ONE_MINUS_]DST_COLOR,[ONE_MINUS_]SRC_ALPHA, [ONE_MINUS_]DST_ALPHA, [ONE_MINUS_]CONSTANT_COLOR, [ONE_MINUS_]CONSTANT_ALPHA
- src, srcRGB, srcAlpha: dstと同じ + SRC_ALPHA_SATURATE
void BlendColor(clampf red, clampf green, clampf blue, clampf alpha);
ディザ
有効/無効
Enable/Disable(DITHER)
フレームバッファ操作
色マスクの指定
void ColorMask(boolean r, boolean g, boolean b, boolean a);
深度マスクの指定
void DepthMask(boolean mask);
ステンシルマスクの指定
void StencilMask(uint mask);
ステンシルマスクの個別指定
void StencilMaskSeparate(enum face, uint mask);
- face: FRONT, BACK, FRONT_AND_BACK
バッファのクリア
void Clear(bitfield buf);
- buf: COLOR_BUFFER_BIT, DEPTH_BUFFER_BIT, STENCIL_BUFFER_BIT のビットごとのOR
色バッファのクリア
void ClearColor(clampf r, clampf g, clampf b, clampf a);
深度バッファのクリア
void ClearDepthf(clampf d);
ステンシルバッファのクリア
void ClearStencil(int s);
フレームバッファの結合と管理
フレームバッファの結合
void BindFramebuffer(enum target, uint framebuffer);
- target: FRAMEBUFFER
フレームバッファの削除
void DeleteFramebuffers(sizei n, uint *framebuffers);
フレームバッファの取得
void GenFramebuffers(sizei n, uint *framebuffers);
レンダリングバッファオブジェクト
レンダリングバッファの結合
void BindRenderbuffer(enum target, uint renderbuffer);
- target: RENDERBUFFER
レンダリングバッファの削除
void DeleteRenderbuffers(sizei n, const uint *renderbuffers);
レンダリングバッファ配列の作成
void GenRenderbuffers(sizei n, uint *renderbuffers);
レンダリングバッファストレージの指定
void RenderbufferStorage(enum target, enum internalformat, sizei width, sizei height);
- target: RENDERBUFFER
- internalformat: DEPTH_COMPONENT16, RGBA4, RGB5_A1, RGB565, STENCIL_INDEX8
レンダリングバッファ画像のフレームバッファへのアタッチ
void FramebufferRenderbuffer(enum target, enum attachment, enum renderbuffertarget, uint renderbuffer);
- target: FRAMEBUFFER
- attachment: COLOR_ATTACHMENT0, DEPTH_ATTACHMENT, STENCIL_ATTACHMENT
- renderbuffertarget: RENDERBUFFER
テクスチャ画像のフレームバッファへのアタッチ
void FramebufferTexture2D(enum target, enum attachment, enum textarget, uint texture, int level);
- textarget: TEXTURE_2D, TEXTURE_CUBE_MAP_POSITIVE{X, Y, Z}, TEXTURE_CUBE_MAP_NEGATIVE{X, Y, Z},
- target: FRAMEBUFFER
- attachment: COLOR_ATTACHMENT0, DEPTH_ATTACHMENT, STENCIL_ATTACHMENT
フレームバッファをチェック
enum CheckFramebufferStatus(enum target);
- target: FRAMEBUFFER
- returns: FRAMEBUFFER_COMPLETE or a constant indicating which value violates framebuffer completeness
フレームバッファオブジェクトへの問い合わせ
フレームバッファがあるか?
boolean IsFramebuffer(uint framebuffer);
フレームバッファのパラメータの取得
void GetFramebufferAttachmentParameteriv(enum target, enum attachment, enum pname, int *params);
- target: FRAMEBUFFER
- attachment: COLOR_ATTACHMENT0, DEPTH_ATTACHMENT, STENCIL_ATTACHMENT
- pname: FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE
レンダリングバッファへの問い合わせ
レンダリングバッファがあるか?
boolean IsRenderbuffer(uint renderbuffer);
レンダリングバッファのパラメータの取得
void GetRenderbufferParameteriv(enum target, enum pname, int *params);
- target: RENDERBUFFER
- pname: RENDERBUFFER_x (x は WIDTH, HEIGHT, RED_SIZE, GREEN_SIZE, BLUE_SIZE, ALPHA_SIZE, DEPTH_SIZE, STENCIL_SIZE, INTERNAL_FORMAT)
その他
単純な問い合わせ
void GetBooleanv(enum value, boolean *data);
void GetIntegerv(enum value, int *data);
void GetFloatv(enum value, float *data);
boolean IsEnabled(enum value);
ポインタと文字列での問い合わせ
ubyte *GetString(enum name);
- name: VENDOR, RENDERER, VERSION, SHADING_LANGUAGE_VERSION, EXTENSIONS
バッファフラッシュと終了
void Flush(void);
void Finish(void);
ヒント
void Hint(enum target, enum hint);
- target: GENERATE_MIPMAP_HINT
- hint: FASTEST, NICEST, DONT_CARE