WebGL は姉妹 API (OpenGL や OpenGL ES) と同様に、拡張機能をサポートします。拡張機能の完全な一覧は khronos webgl extension registry で確認できます。

注記: 他の GL API とは異なり、WebGL の拡張機能は明示的に要求した場合に限り使用できます。

Canonical 拡張機能名とベンダー接頭辞と設定

拡張機能は公式に認められる前に、ブラウザベンダーがサポートする場合があります (ただし、草案段階にあるときに限ります)。このとき、拡張機能名にベンダー接頭辞 (MOZ_WEBKIT_ など) を付加するか、ブラウザの設定を切り替えた場合に限り使用できるようにする可能性があります。

最先端の拡張機能を使用したい場合、および公認されたときにも動作し続けるようにしたい (もちろん、その拡張機能が互換性を失うように変更されていないものとします) 場合は、ベンダー拡張機能名だけでなく canonical 拡張機能名も問い合わせます。例えば以下のようにします:

var ext = (
  gl.getExtension('OES_vertex_array_object') ||
  gl.getExtension('MOZ_OES_vertex_array_object') ||
  gl.getExtension('WEBKIT_OES_vertex_array_object')
);

ベンダー接頭辞は次第に採用されなくなっており、ほとんどのブラウザは実験的な拡張機能をベンダー接頭辞ではなく機能フラグで制御するように実装しています。

機能フラグは以下のようなものです:

  • Firefox では webgl.enable-draft-extensions
  • Chromium ベースのブラウザ (Chrome、Opera) では chrome://flags/#enable-webgl-draft-extensions

使用可能な拡張機能を問い合わせる

WebGL コンテキストは、使用できる拡張機能を問い合わせる機能をサポートしています。

var available_extensions = gl.getSupportedExtensions();

WebGLRenderingContext.getSupportedExtensions() メソッドは、サポートする拡張機能を収めた文字列配列を返します。

拡張機能一覧

現行の拡張機能の一覧:

拡張機能を有効化する

拡張機能を使用する前に、WebGLRenderingContext.getExtension() を使用して機能を有効化しなければなりません。例えば:

var float_texture_ext = gl.getExtension('OES_texture_float');

拡張機能をサポートしていない場合の戻り値は null、サポートしている場合の戻り値は拡張機能オブジェクトです。

拡張機能オブジェクト

WebGL のコア仕様で使用できないシンボルや関数を拡張機能で定義している場合は、gl.getExtension() の呼び出しによって返される拡張機能オブジェクトでそれらを使用できます。

ブラウザ実装状況

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート 9 4.0 (2.0) 11 12 5.1
ANGLE_instanced_arrays ? 33.0 (33.0) ? ? ?
EXT_blend_minmax ? 33.0 (33.0) ? ? ?
EXT_color_buffer_half_float ? 30.0 (30.0) ? ? ?
EXT_disjoint_timer_query ? 41.0 (41.0) [1] ? ? ?
EXT_frag_depth ? 30.0 (30.0) ? ? ?
EXT_sRGB ? 28.0 (28.0) ? ? ?
EXT_shader_texture_lod ? 34.0 (34.0) ? ? ?
EXT_texture_filter_anisotropic ? 17.0 (17.0) [2] ? ? ?
OES_element_index_uint ? 24.0 (24.0) ? ? ?
OES_standard_derivatives ? 10.0 (10.0) ? ? ?
OES_texture_float ? 6.0 (6.0) ? ? ?
OES_texture_float_linear ? 24.0 (24.0) ? ? ?
OES_texture_half_float ? 29.0 (29.0) ? ? ?
OES_texture_half_float_linear ? 30.0 (30.0) ? ? ?
OES_vertex_array_object ? 25.0 (25.0) ? ? ?
WEBGL_color_buffer_float ? 30.0 (30.0) ? ? ?
WEBGL_compressed_texture_atc ? 18.0 (18.0) ? ? ?
WEBGL_compressed_texture_etc1 ? 30.0 (30.0) ? ? ?
WEBGL_compressed_texture_pvrtc ? 18.0 (18.0) ? ? ?
WEBGL_compressed_texture_s3tc ? 15.0 (15.0) ? ? ?
WEBGL_debug_renderer_info ? 19.0 (19.0) ? ? ?
WEBGL_debug_shaders ? 30.0 (30.0) ? ? ?
WEBGL_depth_texture ? 17.0 (17.0) ? ? ?
WEBGL_draw_buffers ? 28.0 (28.0) ? ? ?
WEBGL_lose_context ? 19.0 (19.0) ? ? ?
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート (有) 25 4.0 (2.0) (有) 12 8.0
ANGLE_instanced_arrays ? ? ? ? ? ?
EXT_blend_minmax ? ? ? ? ? ?
EXT_color_buffer_half_float ? ? ? ? ? ?
EXT_disjoint_timer_query ? ? ? ? ? ?
EXT_frag_depth ? ? ? ? ? ?
EXT_sRGB ? ? ? ? ? ?
EXT_shader_texture_lod ? ? ? ? ? ?
EXT_texture_filter_anisotropic ? ? ? ? ? ?
OES_element_index_uint ? ? ? ? ? ?
OES_standard_derivatives ? ? ? ? ? ?
OES_texture_float ? ? ? ? ? ?
OES_texture_float_linear ? ? ? ? ? ?
OES_texture_half_float ? ? ? ? ? ?
OES_texture_half_float_linear ? ? ? ? ? ?
OES_vertex_array_object ? ? ? ? ? ?
WEBGL_color_buffer_float ? ? ? ? ? ?
WEBGL_compressed_texture_atc ? ? ? ? ? ?
WEBGL_compressed_texture_etc1 ? ? ? ? ? ?
WEBGL_compressed_texture_pvrtc ? ? ? ? ? ?
WEBGL_compressed_texture_s3tc ? ? ? ? ? ?
WEBGL_debug_renderer_info ? ? ? ? ? ?
WEBGL_debug_shaders ? ? ? ? ? ?
WEBGL_depth_texture ? ? ? ? ? ?
WEBGL_draw_buffers ? ? ? ? ? ?
WEBGL_lose_context ? ? ? ? ? ?

[1] about:config で設定項目 webgl.enable-draft-extensions を切り替えなければなりません。

[2] これより前のバージョンでは接頭辞付きの MOZ_EXT_texture_filter_anisotropic になっています。

関連情報

--- 以降の内容は個別のページに移動する ---

EXT_texture_filter_anisotropic

異方性フィルタリングは、テクスチャを貼り付けた物体を斜めの角度から見る場合の、ミップマップテクスチャの品質を向上させます。ミップマップしか使用しないと、外見が全体的にグレーへ寄る傾向があります。

この拡張機能では 2 つのシンボルを定義しています:

  • extension_object.MAX_TEXTURE_MAX_ANISOTROPY_EXT: これは gl.getParameter() の呼び出し用の pname パラメータであり、使用できる最大の異方性を返します。
  • extension_object.TEXTURE_MAX_ANISOTROPY_EXT: これは gl.texParameter()gl.getTexParameter{f,i}() の呼び出し用の pname パラメータであり、テクスチャに対して希望する異方性を設定します。

var texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
var ext = (
  gl.getExtension('EXT_texture_filter_anisotropic') ||
  gl.getExtension('MOZ_EXT_texture_filter_anisotropic') ||
  gl.getExtension('WEBKIT_EXT_texture_filter_anisotropic')
);
if (ext){
  var max = gl.getParameter(ext.MAX_TEXTURE_MAX_ANISOTROPY_EXT);
  gl.texParameterf(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, max);
}

WEBGL_compressed_texture_s3tc

圧縮テクスチャは、GPU がテクスチャを保存するために必要なメモリ量を削減します。より高解像のテクスチャを使用する、あるいは同じ解像度でより多くのテクスチャを使用することができます。

この拡張機能では 4 種類のテクスチャタイプを新たに定義します:

  • extension_object.COMPRESSED_RGB_S3TC_DXT1_EXT
  • extension_object.COMPRESSED_RGBA_S3TC_DXT1_EXT
  • extension_object.COMPRESSED_RGBA_S3TC_DXT3_EXT
  • extension_object.COMPRESSED_RGBA_S3TC_DXT5_EXT

圧縮テクスチャのフォーマットは、2 つの関数で使用できます: compressedTexImage2D および compressedTexSubImage2D

var ext = (
  gl.getExtension("WEBGL_compressed_texture_s3tc") ||
  gl.getExtension("MOZ_WEBGL_compressed_texture_s3tc") ||
  gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc")
);
var texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.compressedTexImage2D(gl.TEXTURE_2D, 0, ext.COMPRESSED_RGBA_S3TC_DXT5_EXT, 512, 512, 0, textureData); 
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);

ドキュメントのタグと貢献者

タグ: 
このページの貢献者: yyss
最終更新者: yyss,