WebGL

Khronos

WebGL 2.0 仕様

編集者草案 Thu Feb 19 12:22:35 2026 -0800

このバージョン:
https://www.khronos.org/registry/webgl/specs/latest/2.0/
WebIDL: https://www.khronos.org/registry/webgl/specs/latest/2.0/webgl2.idl
最新バージョン:
https://www.khronos.org/registry/webgl/specs/latest/2.0/
WebIDL: https://www.khronos.org/registry/webgl/specs/latest/2.0/webgl2.idl
前のバージョン:
https://registry.khronos.org/webgl/specs/2.0.0/
WebIDL: https://registry.khronos.org/webgl/specs/2.0.0/webgl2.idl
編集者:
Kelsey Gilbert (Mozilla Corp.)
Copyright © 2015 Khronos Group

概要

これは WebGL 仕様のバージョン 2.0 である。

この仕様は、 HTML 5 canvas 要素 [CANVAS] のための追加のレンダリングコンテキストおよびサポートオブジェクトを記述する。 このコンテキストは、OpenGL ES 3.0 API に密接に準拠する API を用いたレンダリングを可能にする。

この文書は WebGL 1.0 仕様の拡張として読まれるべきである。これは 1.0 との差分のみを記述する。

この文書のステータス

この文書は編集者草案である。作業中のもの以外としてこの文書を引用してはならない。

フィードバック

この仕様に関する公開議論は、 [email protected] メーリングリスト (手順アーカイブ)で歓迎される。

仕様またはその適合性テストに関するバグは、 issue tracker へ報告してほしい。Pull requests は Github repository に対して歓迎される。

目次

はじめに

WebGL™ は、Web のために設計された即時モード 3D レンダリング API である。これは WebGL 仕様のバージョン 2 である。これは OpenGL® ES 3.0 から派生しており、類似した レンダリング機能を提供するが、HTML コンテキスト内で提供される。

WebGL 2.0 は WebGL 1.0 と完全には後方互換ではない。拡張なしの中核 WebGL 1.0 仕様に 対して書かれた既存のエラーのないコンテンツは、多くの場合、変更なしで WebGL 2.0 で動作するが、 常にそうとは限らない。後方互換性に対するすべての例外は、 後方非互換性の節に記録されている。 この仕様で提供される新しい振る舞いにアクセスするために、コンテンツは明示的に新しい コンテキストを要求する(詳細は下記)。

規約

この文書で記述される多くの関数には、OpenGL ES man ページへのリンクが含まれている。 これらのページが OpenGL ES 3.0 仕様 [GLES30] と一致するよう あらゆる努力が払われているが、誤りを含む可能性がある。矛盾がある場合、OpenGL ES 3.0 仕様が最終的な権威である。

この文書の残りの節は、OpenGL ES 3.0 仕様(この執筆時点では 3.0.6、 Khronos OpenGL ES API Registry から入手可能)と 併せて読まれることを意図している。特に指定がない限り、各メソッドの振る舞いは OpenGL ES 3.0 仕様によって定義される。この仕様は、相互運用性またはセキュリティを確保するために、 OpenGL ES 3.0 から逸脱することがあり、しばしば OpenGL ES 3.0 が実装定義のままにしている領域を 定義する。これらの相違点は、 WebGL と OpenGL ES 3.0 の相違点の節で要約される。

WebGL 2.0 で中核へ移された拡張機能

次の WeGL 1.0 拡張は、WebGL 2.0 では中核である機能を反映しているため、WebGL 2.0 ではもはや 拡張ではない。

コンテキスト作成と描画バッファの提示

WebGL API を使用する前に、著者は、下で記述されるように、指定された HTMLCanvasElement [CANVAS] または OffscreenCanvas [OFFSCREENCANVAS] のための WebGLRenderingContext オブジェクトを取得しなければならない。 このオブジェクトは、OpenGL 状態を管理し、コンテキスト作成時に作成されなければならない drawing buffer へレンダリングするために使用される。

コンテキスト作成

WebGLRenderingContext および WebGL2RenderingContext は、 作成時に設定される関連付けられた canvas を持ち、 それは canvas [CANVAS] または offscreen canvas [OFFSCREENCANVAS] である。

WebGLRenderingContext および WebGL2RenderingContext は、 作成時に WebGLContextAttributes オブジェクト内に 設定される context creation parameters を持つ。

WebGLRenderingContext および WebGL2RenderingContext は、 drawing buffer が作成されるたびに WebGLContextAttributes オブジェクト内に 設定される actual context parameters を持つ。

WebGLRenderingContext および WebGL2RenderingContext は、初期状態では未設定の webgl context lost flag を持つ。

canvas 要素の getContext() メソッドが contextId webgl2 [CANVASCONTEXTS] に対して新しいオブジェクトを返すことになっている場合、ユーザーエージェントは次の手順を 実行しなければならない。

  1. 新しい WebGL2RenderingContext オブジェクト context を作成する。
  2. contextcanvas を、 getContext() メソッドが関連付けられている canvas または offscreen canvas とする。
  3. 新しい WebGLContextAttributes オブジェクト contextAttributes を作成する。
  4. getContext() が第 2 引数 options で呼び出された場合、 contextAttributes の属性を options で指定されたものから設定する。
  5. contextAttributes で指定された設定を用いて drawing buffer を作成し、 drawing buffercontext と関連付ける。
  6. drawing buffer の作成に失敗した場合、次の手順を実行する。
    1. canvas に対して WebGL context creation error を発火する。
    2. null を返し、これらの手順を終了する。
  7. 新しい WebGLContextAttributes オブジェクト actualAttributes を作成する。
  8. 新しく作成された drawing buffer のプロパティに基づいて、actualAttributes の属性を設定する。
  9. contextcontext creation parameterscontextAttributes に設定する。
  10. contextactual context parametersactualAttributes に設定する。
  11. context を返す。

描画バッファ

WebGL 1.0 と異なり、WebGL 2.0 の depthstencil、および antialias 属性は、WebGL 実装によって遵守されなければならない。

DOM インターフェイス

この節は、上で記述された機能への実行時アクセスをサポートするために DOM に追加されるインターフェイスおよび機能について記述する。

次の型は WebGL 2.0 で導入される。

typedef long long GLint64;
typedef unsigned long long GLuint64;

WebGLQuery

WebGLQuery インターフェイスは OpenGL Query Object を表す。 基盤となるオブジェクトは glGenQueries を呼び出したかのように作成され OpenGL ES 3.0.6 §2.14man ページ、 glBeginQuery を呼び出したかのようにアクティブ化され OpenGL ES 3.0.6 §2.14man ページ、 glEndQuery を呼び出したかのように終了され OpenGL ES 3.0.6 §2.14man ページ そして glDeleteQueries を呼び出したかのように破棄される OpenGL ES 3.0.6 §2.14man ページ

[Exposed=(Window,Worker)]
interface WebGLQuery : WebGLObject {
};

WebGLSampler

WebGLSampler インターフェイスは OpenGL Sampler Object を表す。 基盤となるオブジェクトは glGenSamplers を呼び出したかのように作成され OpenGL ES 3.0.6 §3.8.2man ページ、 glBindSampler を呼び出したかのようにバインドされ OpenGL ES 3.0.6 §3.8.2man ページ そして glDeleteSamplers を呼び出したかのように破棄される OpenGL ES 3.0.6 §3.8.2man page

[Exposed=(Window,Worker)]
interface WebGLSampler : WebGLObject {
};

WebGLSync

WebGLSync インターフェイスは OpenGL Sync Object を表す。 基盤となるオブジェクトは glFenceSync を呼び出したかのように作成され OpenGL ES 3.0.6 §5.2man ページ、 glClientWaitSync を呼び出したかのようにブロックされ OpenGL ES 3.0.6 §5.2.1man page、 glWaitSync を呼び出したかのように GL 内部で待機され OpenGL ES 3.0.6 §5.2.1man ページ、 glGetSynciv を呼び出したかのように問い合わせられ OpenGL ES 3.0.6 §6.1.8man ページ、 そして glDeleteSync を呼び出したかのように破棄される OpenGL ES 3.0.6 §5.2man ページ

[Exposed=(Window,Worker)]
interface WebGLSync : WebGLObject {
};

WebGLTransformFeedback

WebGLTransformFeedback インターフェイスは OpenGL Transform Feedback Object を表す。 基盤となるオブジェクトは glGenTransformFeedbacks を呼び出したかのように作成され OpenGL ES 3.0.6 §2.15.1man page、 glBindTransformFeedback を呼び出したかのようにバインドされ OpenGL ES 3.0.6 §2.15.1man page そして glDeleteTransformFeedbacks を呼び出したかのように破棄される OpenGL ES 3.0.6 §2.15.1man ページ

[Exposed=(Window,Worker)]
interface WebGLTransformFeedback : WebGLObject {
};

WebGLVertexArrayObject

WebGLVertexArrayObject インターフェイスは OpenGL Vertex Array Object を表す。 基盤となるオブジェクトは glGenVertexArrays を呼び出したかのように作成され OpenGL ES 3.0.6 §2.10man page、 glBindVertexArray を呼び出したかのようにバインドされ OpenGL ES 3.0.6 §2.10man page そして glDeleteVertexArrays を呼び出したかのように破棄される OpenGL ES 3.0.6 §2.10man page

[Exposed=(Window,Worker)]
interface WebGLVertexArrayObject : WebGLObject {
};

WebGL コンテキスト

WebGL2RenderingContext は、canvas 要素内で OpenGL ES 3.0 スタイルの レンダリングを可能にする API を表す。

typedef ([AllowShared] Uint32Array or sequence<GLuint>) Uint32List;

interface mixin WebGL2RenderingContextBase
{
  const GLenum READ_BUFFER                                   = 0x0C02;
  const GLenum UNPACK_ROW_LENGTH                             = 0x0CF2;
  const GLenum UNPACK_SKIP_ROWS                              = 0x0CF3;
  const GLenum UNPACK_SKIP_PIXELS                            = 0x0CF4;
  const GLenum PACK_ROW_LENGTH                               = 0x0D02;
  const GLenum PACK_SKIP_ROWS                                = 0x0D03;
  const GLenum PACK_SKIP_PIXELS                              = 0x0D04;
  const GLenum COLOR                                         = 0x1800;
  const GLenum DEPTH                                         = 0x1801;
  const GLenum STENCIL                                       = 0x1802;
  const GLenum RED                                           = 0x1903;
  const GLenum RGB8                                          = 0x8051;
  const GLenum RGB10_A2                                      = 0x8059;
  const GLenum TEXTURE_BINDING_3D                            = 0x806A;
  const GLenum UNPACK_SKIP_IMAGES                            = 0x806D;
  const GLenum UNPACK_IMAGE_HEIGHT                           = 0x806E;
  const GLenum TEXTURE_3D                                    = 0x806F;
  const GLenum TEXTURE_WRAP_R                                = 0x8072;
  const GLenum MAX_3D_TEXTURE_SIZE                           = 0x8073;
  const GLenum UNSIGNED_INT_2_10_10_10_REV                   = 0x8368;
  const GLenum MAX_ELEMENTS_VERTICES                         = 0x80E8;
  const GLenum MAX_ELEMENTS_INDICES                          = 0x80E9;
  const GLenum TEXTURE_MIN_LOD                               = 0x813A;
  const GLenum TEXTURE_MAX_LOD                               = 0x813B;
  const GLenum TEXTURE_BASE_LEVEL                            = 0x813C;
  const GLenum TEXTURE_MAX_LEVEL                             = 0x813D;
  const GLenum MIN                                           = 0x8007;
  const GLenum MAX                                           = 0x8008;
  const GLenum DEPTH_COMPONENT24                             = 0x81A6;
  const GLenum MAX_TEXTURE_LOD_BIAS                          = 0x84FD;
  const GLenum TEXTURE_COMPARE_MODE                          = 0x884C;
  const GLenum TEXTURE_COMPARE_FUNC                          = 0x884D;
  const GLenum CURRENT_QUERY                                 = 0x8865;
  const GLenum QUERY_RESULT                                  = 0x8866;
  const GLenum QUERY_RESULT_AVAILABLE                        = 0x8867;
  const GLenum STREAM_READ                                   = 0x88E1;
  const GLenum STREAM_COPY                                   = 0x88E2;
  const GLenum STATIC_READ                                   = 0x88E5;
  const GLenum STATIC_COPY                                   = 0x88E6;
  const GLenum DYNAMIC_READ                                  = 0x88E9;
  const GLenum DYNAMIC_COPY                                  = 0x88EA;
  const GLenum MAX_DRAW_BUFFERS                              = 0x8824;
  const GLenum DRAW_BUFFER0                                  = 0x8825;
  const GLenum DRAW_BUFFER1                                  = 0x8826;
  const GLenum DRAW_BUFFER2                                  = 0x8827;
  const GLenum DRAW_BUFFER3                                  = 0x8828;
  const GLenum DRAW_BUFFER4                                  = 0x8829;
  const GLenum DRAW_BUFFER5                                  = 0x882A;
  const GLenum DRAW_BUFFER6                                  = 0x882B;
  const GLenum DRAW_BUFFER7                                  = 0x882C;
  const GLenum DRAW_BUFFER8                                  = 0x882D;
  const GLenum DRAW_BUFFER9                                  = 0x882E;
  const GLenum DRAW_BUFFER10                                 = 0x882F;
  const GLenum DRAW_BUFFER11                                 = 0x8830;
  const GLenum DRAW_BUFFER12                                 = 0x8831;
  const GLenum DRAW_BUFFER13                                 = 0x8832;
  const GLenum DRAW_BUFFER14                                 = 0x8833;
  const GLenum DRAW_BUFFER15                                 = 0x8834;
  const GLenum MAX_FRAGMENT_UNIFORM_COMPONENTS               = 0x8B49;
  const GLenum MAX_VERTEX_UNIFORM_COMPONENTS                 = 0x8B4A;
  const GLenum SAMPLER_3D                                    = 0x8B5F;
  const GLenum SAMPLER_2D_SHADOW                             = 0x8B62;
  const GLenum FRAGMENT_SHADER_DERIVATIVE_HINT               = 0x8B8B;
  const GLenum PIXEL_PACK_BUFFER                             = 0x88EB;
  const GLenum PIXEL_UNPACK_BUFFER                           = 0x88EC;
  const GLenum PIXEL_PACK_BUFFER_BINDING                     = 0x88ED;
  const GLenum PIXEL_UNPACK_BUFFER_BINDING                   = 0x88EF;
  const GLenum FLOAT_MAT2x3                                  = 0x8B65;
  const GLenum FLOAT_MAT2x4                                  = 0x8B66;
  const GLenum FLOAT_MAT3x2                                  = 0x8B67;
  const GLenum FLOAT_MAT3x4                                  = 0x8B68;
  const GLenum FLOAT_MAT4x2                                  = 0x8B69;
  const GLenum FLOAT_MAT4x3                                  = 0x8B6A;
  const GLenum SRGB                                          = 0x8C40;
  const GLenum SRGB8                                         = 0x8C41;
  const GLenum SRGB8_ALPHA8                                  = 0x8C43;
  const GLenum COMPARE_REF_TO_TEXTURE                        = 0x884E;
  const GLenum RGBA32F                                       = 0x8814;
  const GLenum RGB32F                                        = 0x8815;
  const GLenum RGBA16F                                       = 0x881A;
  const GLenum RGB16F                                        = 0x881B;
  const GLenum VERTEX_ATTRIB_ARRAY_INTEGER                   = 0x88FD;
  const GLenum MAX_ARRAY_TEXTURE_LAYERS                      = 0x88FF;
  const GLenum MIN_PROGRAM_TEXEL_OFFSET                      = 0x8904;
  const GLenum MAX_PROGRAM_TEXEL_OFFSET                      = 0x8905;
  const GLenum MAX_VARYING_COMPONENTS                        = 0x8B4B;
  const GLenum TEXTURE_2D_ARRAY                              = 0x8C1A;
  const GLenum TEXTURE_BINDING_2D_ARRAY                      = 0x8C1D;
  const GLenum R11F_G11F_B10F                                = 0x8C3A;
  const GLenum UNSIGNED_INT_10F_11F_11F_REV                  = 0x8C3B;
  const GLenum RGB9_E5                                       = 0x8C3D;
  const GLenum UNSIGNED_INT_5_9_9_9_REV                      = 0x8C3E;
  const GLenum TRANSFORM_FEEDBACK_BUFFER_MODE                = 0x8C7F;
  const GLenum MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS    = 0x8C80;
  const GLenum TRANSFORM_FEEDBACK_VARYINGS                   = 0x8C83;
  const GLenum TRANSFORM_FEEDBACK_BUFFER_START               = 0x8C84;
  const GLenum TRANSFORM_FEEDBACK_BUFFER_SIZE                = 0x8C85;
  const GLenum TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN         = 0x8C88;
  const GLenum RASTERIZER_DISCARD                            = 0x8C89;
  const GLenum MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A;
  const GLenum MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS       = 0x8C8B;
  const GLenum INTERLEAVED_ATTRIBS                           = 0x8C8C;
  const GLenum SEPARATE_ATTRIBS                              = 0x8C8D;
  const GLenum TRANSFORM_FEEDBACK_BUFFER                     = 0x8C8E;
  const GLenum TRANSFORM_FEEDBACK_BUFFER_BINDING             = 0x8C8F;
  const GLenum RGBA32UI                                      = 0x8D70;
  const GLenum RGB32UI                                       = 0x8D71;
  const GLenum RGBA16UI                                      = 0x8D76;
  const GLenum RGB16UI                                       = 0x8D77;
  const GLenum RGBA8UI                                       = 0x8D7C;
  const GLenum RGB8UI                                        = 0x8D7D;
  const GLenum RGBA32I                                       = 0x8D82;
  const GLenum RGB32I                                        = 0x8D83;
  const GLenum RGBA16I                                       = 0x8D88;
  const GLenum RGB16I                                        = 0x8D89;
  const GLenum RGBA8I                                        = 0x8D8E;
  const GLenum RGB8I                                         = 0x8D8F;
  const GLenum RED_INTEGER                                   = 0x8D94;
  const GLenum RGB_INTEGER                                   = 0x8D98;
  const GLenum RGBA_INTEGER                                  = 0x8D99;
  const GLenum SAMPLER_2D_ARRAY                              = 0x8DC1;
  const GLenum SAMPLER_2D_ARRAY_SHADOW                       = 0x8DC4;
  const GLenum SAMPLER_CUBE_SHADOW                           = 0x8DC5;
  const GLenum UNSIGNED_INT_VEC2                             = 0x8DC6;
  const GLenum UNSIGNED_INT_VEC3                             = 0x8DC7;
  const GLenum UNSIGNED_INT_VEC4                             = 0x8DC8;
  const GLenum INT_SAMPLER_2D                                = 0x8DCA;
  const GLenum INT_SAMPLER_3D                                = 0x8DCB;
  const GLenum INT_SAMPLER_CUBE                              = 0x8DCC;
  const GLenum INT_SAMPLER_2D_ARRAY                          = 0x8DCF;
  const GLenum UNSIGNED_INT_SAMPLER_2D                       = 0x8DD2;
  const GLenum UNSIGNED_INT_SAMPLER_3D                       = 0x8DD3;
  const GLenum UNSIGNED_INT_SAMPLER_CUBE                     = 0x8DD4;
  const GLenum UNSIGNED_INT_SAMPLER_2D_ARRAY                 = 0x8DD7;
  const GLenum DEPTH_COMPONENT32F                            = 0x8CAC;
  const GLenum DEPTH32F_STENCIL8                             = 0x8CAD;
  const GLenum FLOAT_32_UNSIGNED_INT_24_8_REV                = 0x8DAD;
  const GLenum FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING         = 0x8210;
  const GLenum FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE         = 0x8211;
  const GLenum FRAMEBUFFER_ATTACHMENT_RED_SIZE               = 0x8212;
  const GLenum FRAMEBUFFER_ATTACHMENT_GREEN_SIZE             = 0x8213;
  const GLenum FRAMEBUFFER_ATTACHMENT_BLUE_SIZE              = 0x8214;
  const GLenum FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE             = 0x8215;
  const GLenum FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE             = 0x8216;
  const GLenum FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE           = 0x8217;
  const GLenum FRAMEBUFFER_DEFAULT                           = 0x8218;
  const GLenum UNSIGNED_INT_24_8                             = 0x84FA;
  const GLenum DEPTH24_STENCIL8                              = 0x88F0;
  const GLenum UNSIGNED_NORMALIZED                           = 0x8C17;
  const GLenum DRAW_FRAMEBUFFER_BINDING                      = 0x8CA6; /* Same as FRAMEBUFFER_BINDING */
  const GLenum READ_FRAMEBUFFER                              = 0x8CA8;
  const GLenum DRAW_FRAMEBUFFER                              = 0x8CA9;
  const GLenum READ_FRAMEBUFFER_BINDING                      = 0x8CAA;
  const GLenum RENDERBUFFER_SAMPLES                          = 0x8CAB;
  const GLenum FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER          = 0x8CD4;
  const GLenum MAX_COLOR_ATTACHMENTS                         = 0x8CDF;
  const GLenum COLOR_ATTACHMENT1                             = 0x8CE1;
  const GLenum COLOR_ATTACHMENT2                             = 0x8CE2;
  const GLenum COLOR_ATTACHMENT3                             = 0x8CE3;
  const GLenum COLOR_ATTACHMENT4                             = 0x8CE4;
  const GLenum COLOR_ATTACHMENT5                             = 0x8CE5;
  const GLenum COLOR_ATTACHMENT6                             = 0x8CE6;
  const GLenum COLOR_ATTACHMENT7                             = 0x8CE7;
  const GLenum COLOR_ATTACHMENT8                             = 0x8CE8;
  const GLenum COLOR_ATTACHMENT9                             = 0x8CE9;
  const GLenum COLOR_ATTACHMENT10                            = 0x8CEA;
  const GLenum COLOR_ATTACHMENT11                            = 0x8CEB;
  const GLenum COLOR_ATTACHMENT12                            = 0x8CEC;
  const GLenum COLOR_ATTACHMENT13                            = 0x8CED;
  const GLenum COLOR_ATTACHMENT14                            = 0x8CEE;
  const GLenum COLOR_ATTACHMENT15                            = 0x8CEF;
  const GLenum FRAMEBUFFER_INCOMPLETE_MULTISAMPLE            = 0x8D56;
  const GLenum MAX_SAMPLES                                   = 0x8D57;
  const GLenum HALF_FLOAT                                    = 0x140B;
  const GLenum RG                                            = 0x8227;
  const GLenum RG_INTEGER                                    = 0x8228;
  const GLenum R8                                            = 0x8229;
  const GLenum RG8                                           = 0x822B;
  const GLenum R16F                                          = 0x822D;
  const GLenum R32F                                          = 0x822E;
  const GLenum RG16F                                         = 0x822F;
  const GLenum RG32F                                         = 0x8230;
  const GLenum R8I                                           = 0x8231;
  const GLenum R8UI                                          = 0x8232;
  const GLenum R16I                                          = 0x8233;
  const GLenum R16UI                                         = 0x8234;
  const GLenum R32I                                          = 0x8235;
  const GLenum R32UI                                         = 0x8236;
  const GLenum RG8I                                          = 0x8237;
  const GLenum RG8UI                                         = 0x8238;
  const GLenum RG16I                                         = 0x8239;
  const GLenum RG16UI                                        = 0x823A;
  const GLenum RG32I                                         = 0x823B;
  const GLenum RG32UI                                        = 0x823C;
  const GLenum VERTEX_ARRAY_BINDING                          = 0x85B5;
  const GLenum R8_SNORM                                      = 0x8F94;
  const GLenum RG8_SNORM                                     = 0x8F95;
  const GLenum RGB8_SNORM                                    = 0x8F96;
  const GLenum RGBA8_SNORM                                   = 0x8F97;
  const GLenum SIGNED_NORMALIZED                             = 0x8F9C;
  const GLenum COPY_READ_BUFFER                              = 0x8F36;
  const GLenum COPY_WRITE_BUFFER                             = 0x8F37;
  const GLenum COPY_READ_BUFFER_BINDING                      = 0x8F36; /* Same as COPY_READ_BUFFER */
  const GLenum COPY_WRITE_BUFFER_BINDING                     = 0x8F37; /* Same as COPY_WRITE_BUFFER */
  const GLenum UNIFORM_BUFFER                                = 0x8A11;
  const GLenum UNIFORM_BUFFER_BINDING                        = 0x8A28;
  const GLenum UNIFORM_BUFFER_START                          = 0x8A29;
  const GLenum UNIFORM_BUFFER_SIZE                           = 0x8A2A;
  const GLenum MAX_VERTEX_UNIFORM_BLOCKS                     = 0x8A2B;
  const GLenum MAX_FRAGMENT_UNIFORM_BLOCKS                   = 0x8A2D;
  const GLenum MAX_COMBINED_UNIFORM_BLOCKS                   = 0x8A2E;
  const GLenum MAX_UNIFORM_BUFFER_BINDINGS                   = 0x8A2F;
  const GLenum MAX_UNIFORM_BLOCK_SIZE                        = 0x8A30;
  const GLenum MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS        = 0x8A31;
  const GLenum MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS      = 0x8A33;
  const GLenum UNIFORM_BUFFER_OFFSET_ALIGNMENT               = 0x8A34;
  const GLenum ACTIVE_UNIFORM_BLOCKS                         = 0x8A36;
  const GLenum UNIFORM_TYPE                                  = 0x8A37;
  const GLenum UNIFORM_SIZE                                  = 0x8A38;
  const GLenum UNIFORM_BLOCK_INDEX                           = 0x8A3A;
  const GLenum UNIFORM_OFFSET                                = 0x8A3B;
  const GLenum UNIFORM_ARRAY_STRIDE                          = 0x8A3C;
  const GLenum UNIFORM_MATRIX_STRIDE                         = 0x8A3D;
  const GLenum UNIFORM_IS_ROW_MAJOR                          = 0x8A3E;
  const GLenum UNIFORM_BLOCK_BINDING                         = 0x8A3F;
  const GLenum UNIFORM_BLOCK_DATA_SIZE                       = 0x8A40;
  const GLenum UNIFORM_BLOCK_ACTIVE_UNIFORMS                 = 0x8A42;
  const GLenum UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES          = 0x8A43;
  const GLenum UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER     = 0x8A44;
  const GLenum UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER   = 0x8A46;
  const GLenum INVALID_INDEX                                 = 0xFFFFFFFF;
  const GLenum MAX_VERTEX_OUTPUT_COMPONENTS                  = 0x9122;
  const GLenum MAX_FRAGMENT_INPUT_COMPONENTS                 = 0x9125;
  const GLenum MAX_SERVER_WAIT_TIMEOUT                       = 0x9111;
  const GLenum OBJECT_TYPE                                   = 0x9112;
  const GLenum SYNC_CONDITION                                = 0x9113;
  const GLenum SYNC_STATUS                                   = 0x9114;
  const GLenum SYNC_FLAGS                                    = 0x9115;
  const GLenum SYNC_FENCE                                    = 0x9116;
  const GLenum SYNC_GPU_COMMANDS_COMPLETE                    = 0x9117;
  const GLenum UNSIGNALED                                    = 0x9118;
  const GLenum SIGNALED                                      = 0x9119;
  const GLenum ALREADY_SIGNALED                              = 0x911A;
  const GLenum TIMEOUT_EXPIRED                               = 0x911B;
  const GLenum CONDITION_SATISFIED                           = 0x911C;
  const GLenum WAIT_FAILED                                   = 0x911D;
  const GLenum SYNC_FLUSH_COMMANDS_BIT                       = 0x00000001;
  const GLenum VERTEX_ATTRIB_ARRAY_DIVISOR                   = 0x88FE;
  const GLenum ANY_SAMPLES_PASSED                            = 0x8C2F;
  const GLenum ANY_SAMPLES_PASSED_CONSERVATIVE               = 0x8D6A;
  const GLenum SAMPLER_BINDING                               = 0x8919;
  const GLenum RGB10_A2UI                                    = 0x906F;
  const GLenum INT_2_10_10_10_REV                            = 0x8D9F;
  const GLenum TRANSFORM_FEEDBACK                            = 0x8E22;
  const GLenum TRANSFORM_FEEDBACK_PAUSED                     = 0x8E23;
  const GLenum TRANSFORM_FEEDBACK_ACTIVE                     = 0x8E24;
  const GLenum TRANSFORM_FEEDBACK_BINDING                    = 0x8E25;
  const GLenum TEXTURE_IMMUTABLE_FORMAT                      = 0x912F;
  const GLenum MAX_ELEMENT_INDEX                             = 0x8D6B;
  const GLenum TEXTURE_IMMUTABLE_LEVELS                      = 0x82DF;

  const GLint64 TIMEOUT_IGNORED                              = -1;

  /* WebGL-specific enums */
  const GLenum MAX_CLIENT_WAIT_TIMEOUT_WEBGL                 = 0x9247;

  /* Buffer objects */
  undefined copyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset,
                              GLintptr writeOffset, GLsizeiptr size);
  // MapBufferRange, in particular its read-only and write-only modes,
  // can not be exposed safely to JavaScript. GetBufferSubData
  // replaces it for the purpose of fetching data back from the GPU.
  undefined getBufferSubData(GLenum target, GLintptr srcByteOffset, [AllowShared] ArrayBufferView dstBuffer,
                             optional unsigned long long dstOffset = 0, optional GLuint length = 0);

  /* Framebuffer objects */
  undefined blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0,
                            GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
  undefined framebufferTextureLayer(GLenum target, GLenum attachment, WebGLTexture? texture, GLint level,
                                    GLint layer);
  undefined invalidateFramebuffer(GLenum target, sequence<GLenum> attachments);
  undefined invalidateSubFramebuffer(GLenum target, sequence<GLenum> attachments,
                                     GLint x, GLint y, GLsizei width, GLsizei height);
  undefined readBuffer(GLenum src);

  /* Renderbuffer objects */
  any getInternalformatParameter(GLenum target, GLenum internalformat, GLenum pname);
  undefined renderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat,
                                           GLsizei width, GLsizei height);

  /* Texture objects */
  undefined texStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width,
                         GLsizei height);
  undefined texStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width,
                         GLsizei height, GLsizei depth);

  undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
                       GLsizei depth, GLint border, GLenum format, GLenum type, GLintptr pboOffset);
  undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
                       GLsizei depth, GLint border, GLenum format, GLenum type,
                       TexImageSource source); // May throw DOMException
  undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
                       GLsizei depth, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView? srcData);
  undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
                       GLsizei depth, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData,
                       unsigned long long srcOffset);

  undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
                          GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
                          GLintptr pboOffset);
  undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
                          GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
                          TexImageSource source); // May throw DOMException
  undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
                          GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
                          [AllowShared] ArrayBufferView? srcData, optional unsigned long long srcOffset = 0);

  undefined copyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
                              GLint x, GLint y, GLsizei width, GLsizei height);

  undefined compressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
                                 GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLintptr offset);
  undefined compressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
                                 GLsizei height, GLsizei depth, GLint border, [AllowShared] ArrayBufferView srcData,
                                 optional unsigned long long srcOffset = 0, optional GLuint srcLengthOverride = 0);

  undefined compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
                                    GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
                                    GLenum format, GLsizei imageSize, GLintptr offset);
  undefined compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
                                    GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
                                    GLenum format, [AllowShared] ArrayBufferView srcData,
                                    optional unsigned long long srcOffset = 0,
                                    optional GLuint srcLengthOverride = 0);

  /* Programs and shaders */
  [WebGLHandlesContextLoss] GLint getFragDataLocation(WebGLProgram program, DOMString name);

  /* Uniforms */
  undefined uniform1ui(WebGLUniformLocation? location, GLuint v0);
  undefined uniform2ui(WebGLUniformLocation? location, GLuint v0, GLuint v1);
  undefined uniform3ui(WebGLUniformLocation? location, GLuint v0, GLuint v1, GLuint v2);
  undefined uniform4ui(WebGLUniformLocation? location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);

  undefined uniform1uiv(WebGLUniformLocation? location, Uint32List data, optional unsigned long long srcOffset = 0,
                        optional GLuint srcLength = 0);
  undefined uniform2uiv(WebGLUniformLocation? location, Uint32List data, optional unsigned long long srcOffset = 0,
                        optional GLuint srcLength = 0);
  undefined uniform3uiv(WebGLUniformLocation? location, Uint32List data, optional unsigned long long srcOffset = 0,
                        optional GLuint srcLength = 0);
  undefined uniform4uiv(WebGLUniformLocation? location, Uint32List data, optional unsigned long long srcOffset = 0,
                        optional GLuint srcLength = 0);
  undefined uniformMatrix3x2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
                               optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0);
  undefined uniformMatrix4x2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
                               optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0);

  undefined uniformMatrix2x3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
                               optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0);
  undefined uniformMatrix4x3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
                               optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0);

  undefined uniformMatrix2x4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
                               optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0);
  undefined uniformMatrix3x4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
                               optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0);

  /* Vertex attribs */
  undefined vertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
  undefined vertexAttribI4iv(GLuint index, Int32List values);
  undefined vertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
  undefined vertexAttribI4uiv(GLuint index, Uint32List values);
  undefined vertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);

  /* Writing to the drawing buffer */
  undefined vertexAttribDivisor(GLuint index, GLuint divisor);
  undefined drawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
  undefined drawElementsInstanced(GLenum mode, GLsizei count, GLenum type, GLintptr offset, GLsizei instanceCount);
  undefined drawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLintptr offset);

  /* Multiple Render Targets */
  undefined drawBuffers(sequence<GLenum> buffers);

  undefined clearBufferfv(GLenum buffer, GLint drawbuffer, Float32List values,
                          optional unsigned long long srcOffset = 0);
  undefined clearBufferiv(GLenum buffer, GLint drawbuffer, Int32List values,
                          optional unsigned long long srcOffset = 0);
  undefined clearBufferuiv(GLenum buffer, GLint drawbuffer, Uint32List values,
                           optional unsigned long long srcOffset = 0);

  undefined clearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);

  /* Query Objects */
  WebGLQuery createQuery();
  undefined deleteQuery(WebGLQuery? query);
  [WebGLHandlesContextLoss] GLboolean isQuery(WebGLQuery? query);
  undefined beginQuery(GLenum target, WebGLQuery query);
  undefined endQuery(GLenum target);
  WebGLQuery? getQuery(GLenum target, GLenum pname);
  any getQueryParameter(WebGLQuery query, GLenum pname);

  /* Sampler Objects */
  WebGLSampler createSampler();
  undefined deleteSampler(WebGLSampler? sampler);
  [WebGLHandlesContextLoss] GLboolean isSampler(WebGLSampler? sampler);
  undefined bindSampler(GLuint unit, WebGLSampler? sampler);
  undefined samplerParameteri(WebGLSampler sampler, GLenum pname, GLint param);
  undefined samplerParameterf(WebGLSampler sampler, GLenum pname, GLfloat param);
  any getSamplerParameter(WebGLSampler sampler, GLenum pname);

  /* Sync objects */
  WebGLSync? fenceSync(GLenum condition, GLbitfield flags);
  [WebGLHandlesContextLoss] GLboolean isSync(WebGLSync? sync);
  undefined deleteSync(WebGLSync? sync);
  GLenum clientWaitSync(WebGLSync sync, GLbitfield flags, GLuint64 timeout);
  undefined waitSync(WebGLSync sync, GLbitfield flags, GLint64 timeout);
  any getSyncParameter(WebGLSync sync, GLenum pname);

  /* Transform Feedback */
  WebGLTransformFeedback createTransformFeedback();
  undefined deleteTransformFeedback(WebGLTransformFeedback? tf);
  [WebGLHandlesContextLoss] GLboolean isTransformFeedback(WebGLTransformFeedback? tf);
  undefined bindTransformFeedback(GLenum target, WebGLTransformFeedback? tf);
  undefined beginTransformFeedback(GLenum primitiveMode);
  undefined endTransformFeedback();
  undefined transformFeedbackVaryings(WebGLProgram program, sequence<DOMString> varyings, GLenum bufferMode);
  WebGLActiveInfo? getTransformFeedbackVarying(WebGLProgram program, GLuint index);
  undefined pauseTransformFeedback();
  undefined resumeTransformFeedback();

  /* Uniform Buffer Objects and Transform Feedback Buffers */
  undefined bindBufferBase(GLenum target, GLuint index, WebGLBuffer? buffer);
  undefined bindBufferRange(GLenum target, GLuint index, WebGLBuffer? buffer, GLintptr offset, GLsizeiptr size);
  any getIndexedParameter(GLenum target, GLuint index);
  sequence<GLuint>? getUniformIndices(WebGLProgram program, sequence<DOMString> uniformNames);
  any getActiveUniforms(WebGLProgram program, sequence<GLuint> uniformIndices, GLenum pname);
  GLuint getUniformBlockIndex(WebGLProgram program, DOMString uniformBlockName);
  any getActiveUniformBlockParameter(WebGLProgram program, GLuint uniformBlockIndex, GLenum pname);
  DOMString? getActiveUniformBlockName(WebGLProgram program, GLuint uniformBlockIndex);
  undefined uniformBlockBinding(WebGLProgram program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);

  /* Vertex Array Objects */
  WebGLVertexArrayObject createVertexArray();
  undefined deleteVertexArray(WebGLVertexArrayObject? vertexArray);
  [WebGLHandlesContextLoss] GLboolean isVertexArray(WebGLVertexArrayObject? vertexArray);
  undefined bindVertexArray(WebGLVertexArrayObject? array);
};

interface mixin WebGL2RenderingContextOverloads
{
  // WebGL1:
  undefined bufferData(GLenum target, GLsizeiptr size, GLenum usage);
  undefined bufferData(GLenum target, AllowSharedBufferSource? srcData, GLenum usage);
  undefined bufferSubData(GLenum target, GLintptr dstByteOffset, AllowSharedBufferSource srcData);
  // WebGL2:
  undefined bufferData(GLenum target, [AllowShared] ArrayBufferView srcData, GLenum usage, unsigned long long srcOffset,
                       optional GLuint length = 0);
  undefined bufferSubData(GLenum target, GLintptr dstByteOffset, [AllowShared] ArrayBufferView srcData,
                          unsigned long long srcOffset, optional GLuint length = 0);

  // WebGL1 legacy entrypoints:
  undefined texImage2D(GLenum target, GLint level, GLint internalformat,
                       GLsizei width, GLsizei height, GLint border, GLenum format,
                       GLenum type, [AllowShared] ArrayBufferView? pixels);
  undefined texImage2D(GLenum target, GLint level, GLint internalformat,
                       GLenum format, GLenum type, TexImageSource source); // May throw DOMException

  undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
                          GLsizei width, GLsizei height,
                          GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels);
  undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
                          GLenum format, GLenum type, TexImageSource source); // May throw DOMException

  // WebGL2 entrypoints:
  undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
                       GLint border, GLenum format, GLenum type, GLintptr pboOffset);
  undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
                       GLint border, GLenum format, GLenum type,
                       TexImageSource source); // May throw DOMException
  undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
                       GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData,
                       unsigned long long srcOffset);

  undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
                          GLsizei height, GLenum format, GLenum type, GLintptr pboOffset);
  undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
                          GLsizei height, GLenum format, GLenum type,
                          TexImageSource source); // May throw DOMException
  undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
                          GLsizei height, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData,
                          unsigned long long srcOffset);

  undefined compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
                                 GLsizei height, GLint border, GLsizei imageSize, GLintptr offset);
  undefined compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
                                 GLsizei height, GLint border, [AllowShared] ArrayBufferView srcData,
                                 optional unsigned long long srcOffset = 0, optional GLuint srcLengthOverride = 0);

  undefined compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
                                    GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLintptr offset);
  undefined compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
                                    GLsizei width, GLsizei height, GLenum format,
                                    [AllowShared] ArrayBufferView srcData,
                                    optional unsigned long long srcOffset = 0,
                                    optional GLuint srcLengthOverride = 0);

  undefined uniform1fv(WebGLUniformLocation? location, Float32List data, optional unsigned long long srcOffset = 0,
                       optional GLuint srcLength = 0);
  undefined uniform2fv(WebGLUniformLocation? location, Float32List data, optional unsigned long long srcOffset = 0,
                       optional GLuint srcLength = 0);
  undefined uniform3fv(WebGLUniformLocation? location, Float32List data, optional unsigned long long srcOffset = 0,
                       optional GLuint srcLength = 0);
  undefined uniform4fv(WebGLUniformLocation? location, Float32List data, optional unsigned long long srcOffset = 0,
                       optional GLuint srcLength = 0);

  undefined uniform1iv(WebGLUniformLocation? location, Int32List data, optional unsigned long long srcOffset = 0,
                       optional GLuint srcLength = 0);
  undefined uniform2iv(WebGLUniformLocation? location, Int32List data, optional unsigned long long srcOffset = 0,
                       optional GLuint srcLength = 0);
  undefined uniform3iv(WebGLUniformLocation? location, Int32List data, optional unsigned long long srcOffset = 0,
                       optional GLuint srcLength = 0);
  undefined uniform4iv(WebGLUniformLocation? location, Int32List data, optional unsigned long long srcOffset = 0,
                       optional GLuint srcLength = 0);

  undefined uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
                             optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0);
  undefined uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
                             optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0);
  undefined uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
                             optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0);

  /* Reading back pixels */
  // WebGL1:
  undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
                       [AllowShared] ArrayBufferView? dstData);
  // WebGL2:
  undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
                       GLintptr offset);
  undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
                       [AllowShared] ArrayBufferView dstData, unsigned long long dstOffset);
};

[Exposed=(Window,Worker)]
interface WebGL2RenderingContext
{
};
WebGL2RenderingContext includes WebGLRenderingContextBase;
WebGL2RenderingContext includes WebGL2RenderingContextBase;
WebGL2RenderingContext includes WebGL2RenderingContextOverloads;

より多くのバインディングポイント

void bindBuffer(GLenum target, WebGLBuffer? buffer) OpenGL ES 3.0.6 §2.10.1man ページ
指定された WebGLBuffer オブジェクトを指定されたバインディングポイント(target)へバインドする。 target は次の表に示される。
target
ARRAY_BUFFER
COPY_READ_BUFFER
COPY_WRITE_BUFFER
ELEMENT_ARRAY_BUFFER
PIXEL_PACK_BUFFER
PIXEL_UNPACK_BUFFER
TRANSFORM_FEEDBACK_BUFFER
UNIFORM_BUFFER

target が上の表にない場合、INVALID_ENUM エラーを生成する。

下記の Buffer オブジェクトのバインディング制限を参照。
void bindFramebuffer(GLenum target, WebGLFramebuffer? framebuffer) OpenGL ES 3.0.6 §4.4.1man ページ
指定された WebGLFramebuffer オブジェクトを指定されたバインディングポイント(target)へバインドする。 target は次の表に示される。
target
FRAMEBUFFER
READ_FRAMEBUFFER
DRAW_FRAMEBUFFER

target が上の表にない場合、INVALID_ENUM エラーを生成する。

void bindTexture(GLenum target, WebGLTexture? texture) OpenGL ES 3.0.6 §3.8.1man ページ
指定された WebGLTexture オブジェクトを指定されたバインディングポイント(target)へバインドする。 target は次の表に示される。
target
TEXTURE_2D
TEXTURE_3D
TEXTURE_2D_ARRAY
TEXTURE_CUBE_MAP

target が上の表にない場合、INVALID_ENUM エラーを生成する。

状態の設定と取得

any getParameter(GLenum pname) OpenGL ES 3.0.6 §6.1.1glGet OpenGL ES 3.0 man ページglGetString OpenGL ES 3.0 man ページ
渡された pname に対する値を返す。WebGL 1.0 からのすべての pname/type 値をサポートするだけでなく、次のパラメーターがサポートされる。
pname 返される型
COPY_READ_BUFFER_BINDING WebGLBuffer?
COPY_WRITE_BUFFER_BINDING WebGLBuffer?
DRAW_BUFFERi GLenum
DRAW_FRAMEBUFFER_BINDING WebGLFramebuffer?
FRAGMENT_SHADER_DERIVATIVE_HINT GLenum
MAX_3D_TEXTURE_SIZE GLint
MAX_ARRAY_TEXTURE_LAYERS GLint
MAX_CLIENT_WAIT_TIMEOUT_WEBGL GLint64
MAX_COLOR_ATTACHMENTS GLint
MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS GLint64
MAX_COMBINED_UNIFORM_BLOCKS GLint
MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS GLint64
MAX_DRAW_BUFFERS GLint
MAX_ELEMENT_INDEX GLint64
MAX_ELEMENTS_INDICES GLint
MAX_ELEMENTS_VERTICES GLint
MAX_FRAGMENT_INPUT_COMPONENTS GLint
MAX_FRAGMENT_UNIFORM_BLOCKS GLint
MAX_FRAGMENT_UNIFORM_COMPONENTS GLint
MAX_PROGRAM_TEXEL_OFFSET GLint
MAX_SAMPLES GLint
MAX_SERVER_WAIT_TIMEOUT GLint64
MAX_TEXTURE_LOD_BIAS GLfloat
MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS GLint
MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS GLint
MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS GLint
MAX_UNIFORM_BLOCK_SIZE GLint64
MAX_UNIFORM_BUFFER_BINDINGS GLint
MAX_VARYING_COMPONENTS GLint
MAX_VERTEX_OUTPUT_COMPONENTS GLint
MAX_VERTEX_UNIFORM_BLOCKS GLint
MAX_VERTEX_UNIFORM_COMPONENTS GLint
MIN_PROGRAM_TEXEL_OFFSET GLint
PACK_ROW_LENGTH GLint
PACK_SKIP_PIXELS GLint
PACK_SKIP_ROWS GLint
PIXEL_PACK_BUFFER_BINDING WebGLBuffer?
PIXEL_UNPACK_BUFFER_BINDING WebGLBuffer?
RASTERIZER_DISCARD GLboolean
READ_BUFFER GLenum
READ_FRAMEBUFFER_BINDING WebGLFramebuffer?
SAMPLER_BINDING WebGLSampler?
TEXTURE_BINDING_2D_ARRAY WebGLTexture?
TEXTURE_BINDING_3D WebGLTexture?
TRANSFORM_FEEDBACK_ACTIVE GLboolean
TRANSFORM_FEEDBACK_BINDING WebGLTransformFeedback?
TRANSFORM_FEEDBACK_BUFFER_BINDING WebGLBuffer?
TRANSFORM_FEEDBACK_PAUSED GLboolean
UNIFORM_BUFFER_BINDING WebGLBuffer?
UNIFORM_BUFFER_OFFSET_ALIGNMENT GLint
UNPACK_IMAGE_HEIGHT GLint
UNPACK_ROW_LENGTH GLint
UNPACK_SKIP_IMAGES GLint
UNPACK_SKIP_PIXELS GLint
UNPACK_SKIP_ROWS GLint
VERTEX_ARRAY_BINDING WebGLVertexArrayObject?

シーケンスまたは typed arrays を返すすべての問い合わせは、毎回新しいオブジェクトを返す。

pname が上の表になく、WebGL 1.0 によってサポートされるパラメーター名の いずれでもない場合、INVALID_ENUM エラーを生成し、null を返す。

次の pname 引数は、現在の WebGL 実装のある側面を記述する文字列を返す。

VERSION WebGL<space>2.0<optional><space><vendor-specific information></optional> という形式のバージョンまたはリリース番号を返す。
SHADING_LANGUAGE_VERSION WebGL<space>GLSL<space>ES<space>3.00<optional><space><vendor-specific information></optional> という形式のバージョンまたはリリース番号を返す。

RED_BITSGREEN_BITSBLUE_BITS、および ALPHA_BITS について、draw framebuffer の active color attachments が 同一の形式を持たない場合、INVALID_OPERATION エラーを生成し、0 を返す。

any getIndexedParameter(GLenum target, GLuint index) OpenGL ES 3.0.6 §6.1.1glGet OpenGL ES 3.0 man ページ
渡された target に対する indexed 値を返す。 返される型は、次の表に示されるように、要求された pname に対する 自然な型である。
target 返される型
TRANSFORM_FEEDBACK_BUFFER_BINDING WebGLBuffer?
TRANSFORM_FEEDBACK_BUFFER_SIZE GLsizeiptr
TRANSFORM_FEEDBACK_BUFFER_START GLintptr
UNIFORM_BUFFER_BINDING WebGLBuffer?
UNIFORM_BUFFER_SIZE GLsizeiptr
UNIFORM_BUFFER_START GLintptr

target が上の表にない場合、INVALID_ENUM エラーを生成する。

index が indexed state target の有効範囲外である場合、INVALID_VALUE エラーを生成する。

OpenGL エラーが生成された場合、null を返す。

GLboolean isEnabled(GLenum cap) OpenGL ES 3.0.6 §6.1.1OpenGL ES 3.0 man ページ
WebGL 1.0 からのすべての cap 値に加えて、 RASTERIZER_DISCARD がサポートされる。
void pixelStorei(GLenum pname, GLint param) OpenGL ES 3.0.6 §3.7.1OpenGL ES 3.0 man ページ
WebGL 1.0 からのパラメーターに加えて、WebGL 2.0 仕様は次の追加パラメーターを受け入れる。
pname
PACK_ROW_LENGTH
PACK_SKIP_PIXELS
PACK_SKIP_ROWS
UNPACK_ROW_LENGTH
UNPACK_IMAGE_HEIGHT
UNPACK_SKIP_PIXELS
UNPACK_SKIP_ROWS
UNPACK_SKIP_IMAGES

Buffer オブジェクト

void bufferData(GLenum target, [AllowShared] ArrayBufferView srcData, GLenum usage, unsigned long long srcOffset, optional GLuint length = 0); OpenGL ES 3.0.6 §2.10.2man ページ
現在バインドされている WebGLBuffer オブジェクトのサイズを設定し、その後 srcData の sub-region を buffer オブジェクトへコピーする。

buftarget にバインドされた buffer とする。

length が 0 の場合: そうでなければ、copyLengthlength とする。

srcDataDataView である場合、buf のサイズを copyLength に設定する。そうでなければ、buf のサイズを copyLength * srcData.BYTES_PER_ELEMENT に設定する。

srcDataDataView である場合、elementSize を 1 とする。 そうでなければ、elementSizesrcData.BYTES_PER_ELEMENT とする。

copyLength が 0 より大きい場合、srcData から bufcopyLength 個の typed elements(各サイズは elementSize)をコピーし、 要素インデックス srcOffset から srcData を読み取る。 copyLength が 0 の場合、buf へデータは書き込まれないが、 これは GL エラーの生成を引き起こさない。 何らかのエラーが生成された場合、buf のサイズは変更されず、データも書き込まれない。
void bufferSubData(GLenum target, GLintptr dstByteOffset, [AllowShared] ArrayBufferView srcData, unsigned long long srcOffset, optional GLuint length = 0); OpenGL ES 3.0.6 §2.10.2man ページ
srcData の sub-region を、現在バインドされている WebGLBuffer オブジェクトへコピーする。

buftarget にバインドされた buffer とする。

length が 0 の場合: そうでなければ、copyLengthlength とする。

srcDataDataView である場合、copyByteLengthcopyLength とする。そうでなければ、copyByteLengthcopyLength * srcData.BYTES_PER_ELEMENT とする。

srcDataDataView である場合、elementSize を 1 とする。 そうでなければ、elementSizesrcData.BYTES_PER_ELEMENT とする。

copyLength が 0 より大きい場合、srcData から bufcopyLength 個の typed elements(各サイズは elementSize)をコピーし、 要素インデックス srcOffset から srcData を読み取り、 バイトオフセット dstByteOffset から buf に書き込む。 copyLength が 0 の場合、buf へデータは書き込まれないが、 これは GL エラーの生成を引き起こさない。 何らかのエラーが生成された場合、buf へデータは書き込まれない。
any getBufferParameter(GLenum target, GLenum pname) OpenGL ES 3.0.6 §6.1.9man ページ
渡された pname に対する値を返す。WebGL 1.0 と同様に pname BUFFER_USAGE による問い合わせを サポートすることに加えて、pname BUFFER_SIZE による問い合わせは buffer size を GLsizeiptr 型の 値として返す。

void copyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) OpenGL ES 3.0.6 §2.10.5man ページ

readTarget にバインドされた buffer のデータの一部を、 writeTarget にバインドされた buffer へコピーする。 WebGL 2.0 API によって課される制限については、 Buffer のコピーを参照。

undefined getBufferSubData(GLenum target, GLintptr srcByteOffset, [AllowShared] ArrayBufferView dstBuffer, optional unsigned long long dstOffset = 0, optional GLuint length = 0)

バインドされた WebGLBuffer から dstBuffer へデータを読み戻す。

buftarget にバインドされた buffer とする。

length が 0 の場合: そうでなければ、copyLengthlength とする。

dstBufferDataView である場合、copyByteLengthcopyLength とする。そうでなければ、copyByteLengthcopyLength * dstBuffer.BYTES_PER_ELEMENT とする。

dstBufferDataView である場合、elementSize を 1 とする。 そうでなければ、elementSizedstBuffer.BYTES_PER_ELEMENT とする。

copyLength が 0 より大きい場合、 buf から dstBuffercopyLength 個の typed elements(各サイズは elementSize)をコピーし、 バイトインデックス srcByteOffset から buf を読み取り、 要素インデックス dstOffset から dstBuffer に書き込む。 copyLength が 0 の場合、dstBuffer へデータは書き込まれないが、 これは GL エラーの生成を引き起こさない。 何らかのエラーが生成された場合、dstBuffer へデータは書き込まれない。

buffer が他の操作および getBufferSubData によって順番に書き込まれ、読み取られる場合、 データが一貫してアクセスされることを保証するのは WebGL API の責任である。これは、buffer が 現在 transform feedback バインディングポイントにバインドされている場合にも適用される。

これはブロッキング操作である。結果を返すためには、WebGL は source buffer への以前の すべての書き込みを完全に完了しなければならないためである。 マルチプロセス WebGL 実装では、getBufferSubData は、remote process から 結果を取得するために高コストなプロセス間 round-trip も発生させる可能性がある。

ユーザーは、buffer から読み戻す意図を示すことで、これらのコストを回避できる場合がある。

  • source buffer へ書き込んだ後に fenceSync を挿入し、 getBufferSubData 操作を実行する前に、それが通過するのを待つ。
  • readback source として使用される場合は、_READ usage hint で buffers を割り当てる。(_READ usage hints で割り当てられた buffers は buffer data の shadow copy を維持する際に overhead を発生させる可能性が あるため、過度の使用は避ける。)

Framebuffer オブジェクト

[WebGLHandlesContextLoss] GLenum checkFramebufferStatus(GLenum target) OpenGL ES 3.0.6 §4.4.4.2man ページ

ここでは、WebGL 1.0 の checkFramebufferStatus との差分のみを記述する。

targetDRAW_FRAMEBUFFERREAD_FRAMEBUFFER または FRAMEBUFFER でなければならない。FRAMEBUFFERDRAW_FRAMEBUFFER と等価である。

depth および stencil attachments が存在する場合に、それらが同じ image でないなら、 FRAMEBUFFER_UNSUPPORTED を返す。詳しい議論については Framebuffer オブジェクトの Attachmentsを参照。

アタッチされた renderbuffers の間で RENDERBUFFER_SAMPLES の値が異なる場合、 またはアタッチされた images が renderbuffers と textures の混合である場合にそれらが非ゼロなら、 FRAMEBUFFER_INCOMPLETE_MULTISAMPLE を返す。

アタッチされた images の width、height、および depth(3D textures の場合)または array size (2D array textures の場合)が異なる場合、FRAMEBUFFER_INCOMPLETE_DIMENSIONS を返す。 checkFramebufferStatus は FRAMEBUFFER_INCOMPLETE_DIMENSIONS を返す場合があるを参照。

同じ image が複数の color attachment point にアタッチされている場合、 FRAMEBUFFER_UNSUPPORTED を返す。Framebuffer color attachmentsを参照。

any getFramebufferAttachmentParameter(GLenum target, GLenum attachment, GLenum pname) OpenGL ES 3.0.6 §6.1.13glGetFramebufferAttachmentParameteriv と同様)
渡された target および attachment について、渡された pname に対する値を返す。 返される型は、次の表に示されるように、要求された pname に対する自然な型である。
pname 返される型
FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE GLint
FRAMEBUFFER_ATTACHMENT_BLUE_SIZE GLint
FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING GLenum
FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE GLenum
FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE GLint
FRAMEBUFFER_ATTACHMENT_GREEN_SIZE GLint
FRAMEBUFFER_ATTACHMENT_OBJECT_NAME WebGLRenderbuffer or WebGLTexture
FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE GLenum
FRAMEBUFFER_ATTACHMENT_RED_SIZE GLint
FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE GLint
FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE GLint
FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER GLint
FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL GLint

pname が上の表にない場合、INVALID_ENUM エラーを生成する。

OpenGL エラーが生成された場合、null を返す。

attachmentDEPTH_STENCIL_ATTACHMENT であり、異なる images が depth および stencil attachment points にアタッチされている場合、 INVALID_OPERATION エラーを生成する。詳しい議論については Framebuffer オブジェクトの Attachmentsを参照。

void blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) OpenGL ES 3.0.6 §4.3.3man ページ

[読み取り操作]であり、かつ [描画操作]でもある。
read framebuffer のある領域から draw framebuffer の別の領域へ、ピクセル値の矩形を転送する。 read framebuffer の SAMPLE_BUFFERS の値が 1 で、draw framebuffer の SAMPLE_BUFFERS の値が 0 である場合、source 内の各ピクセル位置に対応する samples は、destination へ書き込まれる前に 単一の sample へ変換される。

中心が source buffer の外側の点に対応する任意の destination pixel は変更されないまま残る。

WebGL context のデフォルト back buffer の color attachment へ blit する場合、 alpha:false で作成された context は internal format RGB8 を持つとみなされ、 alpha:true で作成された context は internal format RGBA8 を持つとみなされる。

この関数が complete framebuffer の欠落した attachment へ blit しようとする場合、 欠落した Attachment への描画に従い、 その attachment へは何も blit されず、エラーも生成されない。
この関数が complete framebuffer の欠落した attachment から読み取ろうとし、かつ少なくとも 1 つの draw buffer に blit される image がある場合、 欠落した Attachment からの読み取りに従い、 INVALID_OPERATION エラーが生成される。

void framebufferTextureLayer(GLenum target, GLenum attachment, WebGLTexture? texture, GLint level, GLint layer) OpenGL ES 3.0.6 §4.4.2.4man ページ

texture がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

void invalidateFramebuffer(GLenum target, sequence<GLenum> attachments) OpenGL ES 3.0.6 §4.5man ページ

[描画操作]
x および y を 0 に設定し、width および height を最大の framebuffer オブジェクトの attachments の width と height に 設定して invalidateSubFramebuffer を呼び出すことと等価である。

void invalidateSubFramebuffer (GLenum target, sequence<GLenum> attachments, GLint x, GLint y, GLsizei width, GLsizei height) OpenGL ES 3.0.6 §4.5man ページ

[描画操作]
バインドされた framebuffer オブジェクトのすべての内容を保持する必要がないことを GL に知らせる。

void readBuffer(GLenum src) OpenGL ES 3.0.6 §4.3.1man ページ

read framebuffer の color buffer を read buffer として指定する。

Renderbuffer オブジェクト

any getInternalformatParameter(GLenum target, GLenum internalformat, GLenum pname) OpenGL ES 3.0.6 §6.1.15man ページ

渡された target および internalformat について、渡された pname に対する値を返す。 返される型は次の表に示される。
pname 返される型
SAMPLES Int32Array

pname が上の表にない場合、INVALID_ENUM エラーを生成する。

OpenGL エラーが生成された場合、null を返す。

SAMPLES に対する各問い合わせは、新しい typed array オブジェクトインスタンスを返す。

any getRenderbufferParameter(GLenum target, GLenum pname) OpenGL ES 2.0 §6.1.14glGetRenderbufferParameteriv と同様)
渡された target について、渡された pname に対する値を返す。返される型は、 次の表に示されるように、要求された pname に対する自然な型である。
pname 返される型
RENDERBUFFER_WIDTH GLint
RENDERBUFFER_HEIGHT GLint
RENDERBUFFER_INTERNAL_FORMAT GLenum
RENDERBUFFER_RED_SIZE GLint
RENDERBUFFER_GREEN_SIZE GLint
RENDERBUFFER_BLUE_SIZE GLint
RENDERBUFFER_ALPHA_SIZE GLint
RENDERBUFFER_DEPTH_SIZE GLint
RENDERBUFFER_SAMPLES GLint
RENDERBUFFER_STENCIL_SIZE GLint

pname が上の表にない場合、INVALID_ENUM エラーを生成する。

OpenGL エラーが生成された場合、null を返す。

void renderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) OpenGL ES 3.0.6 §4.4.2.1man ページ

仕様 および man ページで詳述される OpenGL ES 3.0 の internal formats を受け入れる。

WebGL 1 との後方互換性のため、internal format DEPTH_STENCIL も受け入れ、 実装はこれを DEPTH24_STENCIL8 にマップすべきである。

void renderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) OpenGL ES 3.0.6 §4.4.2.1man ページ

`internalFormat == DEPTH_STENCIL && samples > 0` のとき INVALID_OPERATION を生成する。

Texture オブジェクト

Texture オブジェクトは、テクスチャリング操作のためのストレージおよび状態を提供する。 WebGLTexture がバインドされていない場合(たとえば bindTexture に null または 0 を渡す場合)、 texture オブジェクトを変更または問い合わせようとすると INVALID_OPERATION エラーが 生成されなければならない。これは、OpenGL ES 3.0 仕様がデフォルト texture を変更することを 関数に許可する場合に、以下の関数で示される。

any getTexParameter(GLenum target, GLenum pname) OpenGL ES 3.0.6 §6.1.3man ページ
渡された target について、渡された pname に対する値を返す。返される型は、次の表に示されるように、 要求された pname に対する自然な型である。
pname 返される型
TEXTURE_BASE_LEVEL GLint
TEXTURE_COMPARE_FUNC GLenum
TEXTURE_COMPARE_MODE GLenum
TEXTURE_IMMUTABLE_FORMAT GLboolean
TEXTURE_IMMUTABLE_LEVELS GLuint
TEXTURE_MAG_FILTER GLenum
TEXTURE_MAX_LEVEL GLint
TEXTURE_MAX_LOD GLfloat
TEXTURE_MIN_FILTER GLenum
TEXTURE_MIN_LOD GLfloat
TEXTURE_WRAP_R GLenum
TEXTURE_WRAP_S GLenum
TEXTURE_WRAP_T GLenum

pname が上の表にない場合、INVALID_ENUM エラーを生成する。

WebGLTexture がバインドされていない状態(上記参照)でこの関数を呼び出そうとした場合、 INVALID_OPERATION エラーを生成する。

OpenGL エラーが生成された場合、null を返す。

void texParameterf(GLenum target, GLenum pname, GLfloat param) OpenGL ES 3.0.6 §3.8.7man ページ
渡された target について、渡された pname に対する値を設定する。 pname は次の表に示される。
pname
TEXTURE_BASE_LEVEL
TEXTURE_COMPARE_FUNC
TEXTURE_COMPARE_MODE
TEXTURE_MAG_FILTER
TEXTURE_MAX_LEVEL
TEXTURE_MAX_LOD
TEXTURE_MIN_FILTER
TEXTURE_MIN_LOD
TEXTURE_WRAP_R
TEXTURE_WRAP_S
TEXTURE_WRAP_T

pname が上の表にない場合、INVALID_ENUM エラーを生成する。

WebGLTexture がバインドされていない状態(上記参照)でこの関数を呼び出そうとした場合、 INVALID_OPERATION エラーを生成する。

void texParameteri(GLenum target, GLenum pname, GLint param) OpenGL ES 3.0.6 §3.8.7man ページ

渡された target について、渡された pname に対する値を設定する。pname は、 上の表に示されるように texParameterf のものと同じである。

pname が上の表にない場合、INVALID_ENUM エラーを生成する。

WebGLTexture がバインドされていない状態(上記参照)でこの関数を呼び出そうとした場合、 INVALID_OPERATION エラーを生成する。

void texStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) OpenGL ES 3.0.6 §3.8.4man ページ

二次元または cube-map texture のすべての levels を同時に指定する。

image の内容は、OpenGL ES 3.0 仕様 section 3.8.4 OpenGL ES 3.0.6 §3.8.4 の疑似コードにおける各 texImage2D(または圧縮形式の場合は compressedTexImage2D)呼び出しへ、 0 に初期化された十分なサイズの buffer が渡されるかのように設定される。
texStorage2DtexImage2D に対する推奨される代替と みなされるべきである。一部の実装では texImage2D よりもメモリコストが低い場合がある。

void texStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) OpenGL ES 3.0.6 §3.8.4man ページ

三次元 texture または二次元 array texture のすべての levels を指定する。

image の内容は、OpenGL ES 3.0 仕様 section 3.8.4 OpenGL ES 3.0.6 §3.8.4 の疑似コードにおける各 texImage3D(または圧縮形式の場合は compressedTexImage3D)呼び出しへ、 0 に初期化された十分なサイズの buffer が渡されるかのように設定される。
undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData, unsigned long long srcOffset) OpenGL ES 3.0.6 §3.8.3man ページ

ここでは、WebGL 1.0 の texImage2D との差分のみを 記述する。

WebGLBuffer が PIXEL_UNPACK_BUFFER target にバインドされている場合、 INVALID_OPERATION エラーを生成する。

Sized internal formats は WebGL 2.0 でサポートされ、internalformatformat と同じである必要がなくなった。代わりに、 internalformatformat、および type の組み合わせは man ページの Table 1 または 2 に列挙されていなければならない。

typeFLOAT_32_UNSIGNED_INT_24_8_REV として指定された場合、 srcData は null でなければならない。そうでなければ、 INVALID_OPERATION エラーを生成する。

srcData の型は、次の表に従って type と一致しなければならない。 そうでなければ、INVALID_OPERATION エラーを生成する。

srcData の型 type
Int8Array BYTE
Uint8Array UNSIGNED_BYTE
Uint8ClampedArray UNSIGNED_BYTE
Int16Array SHORT
Uint16Array UNSIGNED_SHORT
Uint16Array UNSIGNED_SHORT_5_6_5
Uint16Array UNSIGNED_SHORT_5_5_5_1
Uint16Array UNSIGNED_SHORT_4_4_4_4
Int32Array INT
Uint32Array UNSIGNED_INT
Uint32Array UNSIGNED_INT_5_9_9_9_REV
Uint32Array UNSIGNED_INT_2_10_10_10_REV
Uint32Array UNSIGNED_INT_10F_11F_11F_REV
Uint32Array UNSIGNED_INT_24_8
Uint16Array HALF_FLOAT
Float32Array FLOAT

pixel store parameter constraints が満たされない場合、 INVALID_OPERATION エラーを生成する。

srcData からの読み取りは、srcDatasrcOffset 要素分だけ進んだ位置から開始される。(Elements は Uint8Array ではバイト、Int32Array では int32 などである。)

srcOffset から開始して srcData 内に十分なデータがない場合、 INVALID_OPERATION を生成する。

[throws] undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, TexImageSource source) // May throw DOMException OpenGL ES 3.0.6 §3.8.3man ページ

ここでは、WebGL 1.0 の texImage2D との差分のみを 記述する。

WebGL 2.0 で導入された新しい形式への変換は、次の表に従って実行される。

ソース DOM 画像形式 ターゲット WebGL 形式
RED RG
グレースケール(1 チャンネル) R = sourceGray
R = sourceGray
G = 0
グレースケール + Alpha(2 チャンネル) R = sourceGray
R = sourceGray
G = 0
カラー(3 チャンネル)
カラー + Alpha(4 チャンネル)
R = sourceRed
R = sourceRed
G = sourceGreen

要素の subregions のアップロードについては、 TexImageSource からのアップロードのための Pixel store parameters で詳述される。

WebGLBuffer が PIXEL_UNPACK_BUFFER target にバインドされている場合、 INVALID_OPERATION エラーを生成する。

Sized internal formats は WebGL 2.0 でサポートされ、internalformatformat と同じである必要がなくなった。代わりに、 internalformatformat、および type の組み合わせは 次の表に列挙されていなければならない。

Internal Format Format Type
RGB RGB UNSIGNED_BYTE
UNSIGNED_SHORT_5_6_5
RGBA RGBA UNSIGNED_BYTE,
UNSIGNED_SHORT_4_4_4_4
UNSIGNED_SHORT_5_5_5_1
LUMINANCE_ALPHA LUMINANCE_ALPHA UNSIGNED_BYTE
LUMINANCE LUMINANCE UNSIGNED_BYTE
ALPHA ALPHA UNSIGNED_BYTE
R8 RED UNSIGNED_BYTE
R16F RED HALF_FLOAT
FLOAT
R32F RED FLOAT
R8UI RED_INTEGER UNSIGNED_BYTE
RG8 RG UNSIGNED_BYTE
RG16F RG HALF_FLOAT
FLOAT
RG32F RG FLOAT
RG8UI RG_INTEGER UNSIGNED_BYTE
RGB8 RGB UNSIGNED_BYTE
SRGB8 RGB UNSIGNED_BYTE
RGB565 RGB UNSIGNED_BYTE
UNSIGNED_SHORT_5_6_5
R11F_G11F_B10F RGB UNSIGNED_INT_10F_11F_11F_REV
HALF_FLOAT
FLOAT
RGB9_E5 RGB HALF_FLOAT
FLOAT
RGB16F RGB HALF_FLOAT
FLOAT
RGB32F RGB FLOAT
RGB8UI RGB_INTEGER UNSIGNED_BYTE
RGBA8 RGBA UNSIGNED_BYTE
SRGB8_ALPHA8 RGBA UNSIGNED_BYTE
RGB5_A1 RGBA UNSIGNED_BYTE
UNSIGNED_SHORT_5_5_5_1
RGB10_A2 RGBA UNSIGNED_INT_2_10_10_10_REV
RGBA4 RGBA UNSIGNED_BYTE
UNSIGNED_SHORT_4_4_4_4
RGBA16F RGBA HALF_FLOAT
FLOAT
RGBA32F RGBA FLOAT
RGBA8UI RGBA_INTEGER UNSIGNED_BYTE
データソースが DOM 要素(HTMLImageElementHTMLCanvasElement、または HTMLVideoElement)である場合、 または ImageBitmapImageData、または OffscreenCanvas オブジェクトである場合、一般に各 channel の表現は少なくとも 8 ビットの unsigned integer 型である。 そのような表現を signed integers またはより多くのビットを持つ unsigned integers へ変換することは 明確に定義されていない。たとえば、RGBA8 を RGBA16UI へ変換するとき、その意図が値を 16 ビット unsigned integer の全範囲へ拡大することかどうかは不明である。したがって、最大 8 ビットの unsigned integer、half float、または float への変換のみが許可される。
void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLintptr offset) OpenGL ES 3.0.6 §3.8.3man ページ

PIXEL_UNPACK_BUFFER target にバインドされた WebGLBuffer から、現在バインドされている WebGLTexture へデータをアップロードする。

offset は WebGLBuffer の data store へのバイトオフセットであり、0 より小さい場合は INVALID_VALUE を生成する。

formattype、および WebGLTexture の internal format の組み合わせは、 man ページの Table 1 または 2 に列挙されていなければならない。

WebGLTexture がバインドされていない状態でこの関数を呼び出そうとした場合、 INVALID_OPERATION エラーを生成する。

PIXEL_UNPACK_BUFFER target に WebGLBuffer がバインドされていない場合、 INVALID_OPERATION エラーを生成する。

pixel store parameter constraints が満たされない場合、 INVALID_OPERATION エラーを生成する。

undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData, unsigned long long srcOffset) OpenGL ES 3.0.6 §3.8.5man ページ

ここでは、WebGL 1.0 の texSubImage2D との差分のみを 記述する。

WebGLBuffer が PIXEL_UNPACK_BUFFER target にバインドされている場合、 INVALID_OPERATION エラーを生成する。

formattype、および WebGLTexture の internal format の組み合わせは、 man ページの Table 1 または 2 に列挙されていなければならない。

srcData の型は、上の表に従って type と一致しなければならない。 そうでなければ、INVALID_OPERATION エラーを生成する。

この関数の振る舞いに影響する WebGL 固有の pixel storage parameters については、 Pixel Storage Parametersを参照。

pixel store parameter constraints が満たされない場合、 INVALID_OPERATION エラーを生成する。

srcData からの読み取りは、srcDatasrcOffset 要素分だけ進んだ位置から開始される。(Elements は Uint8Array ではバイト、Int32Array では int32 などである。)

srcOffset から開始して srcData 内に十分なデータがない場合、 INVALID_OPERATION を生成する。

undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, TexImageSource source) // May throw DOMException OpenGL ES 3.0.6 §3.8.5man ページ

ここでは、WebGL 1.0 の texSubImage2D との差分のみを 記述する。

要素の subregions のアップロードについては、 TexImageSource からのアップロードのための Pixel store parameters で詳述される。

WebGLBuffer が PIXEL_UNPACK_BUFFER target にバインドされている場合、 INVALID_OPERATION エラーを生成する。

formattype、および WebGLTexture の internal format の組み合わせは、 この表に列挙されていなければならない。

undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLintptr offset) OpenGL ES 3.0.6 §3.8.5man ページ

PIXEL_UNPACK_BUFFER target にバインドされた WebGLBuffer からのデータで、 現在バインドされている WebGLTexture の部分矩形を更新する。

offset は WebGLBuffer の data store へのバイトオフセットであり、0 より小さい場合は INVALID_VALUE エラーを生成する。

WebGLTexture がバインドされていない状態でこの関数を呼び出そうとした場合、 INVALID_OPERATION エラーを生成する。

PIXEL_UNPACK_BUFFER target に WebGLBuffer がバインドされていない場合、 INVALID_OPERATION エラーを生成する。

pixel store parameter constraints が満たされない場合、 INVALID_OPERATION エラーを生成する。

void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView? srcData)

void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData, unsigned long long srcOffset) OpenGL ES 3.0.6 §3.8.3man ページ

三次元または二次元 array texture の指定された mipmap level を割り当て、初期化する。

WebGLBuffer が PIXEL_UNPACK_BUFFER target にバインドされている場合、 INVALID_OPERATION エラーを生成する。

srcData が null の場合、0 に初期化された十分なサイズの buffer が渡される。

internalformatformat、および type の組み合わせは、 man ページの Table 1 または 2 に列挙されていなければならない。

typeFLOAT_32_UNSIGNED_INT_24_8_REV として指定された場合、 srcData は null でなければならない。そうでなければ、 INVALID_OPERATION エラーを生成する。

srcData が非 null の場合、srcData の型は 上の表に従って type と一致しなければならない。 そうでなければ、INVALID_OPERATION エラーを生成する。

WebGLTexture がバインドされていない状態(上記参照)でこの関数を呼び出そうとした場合、 INVALID_OPERATION エラーを生成する。

この関数の振る舞いに影響する WebGL 固有の pixel storage parameters については、 Pixel Storage Parametersを参照。

pixel store parameter constraints が満たされない場合、 INVALID_OPERATION エラーを生成する。

srcData からの読み取りは、srcDatasrcOffset 要素分だけ進んだ位置から開始される。(Elements は Uint8Array ではバイト、Int32Array では int32 などである。)

srcOffset から開始して srcData 内に十分なデータがない場合、 INVALID_OPERATION を生成する。

三次元 textures を割り当てるには、texImage3D の代わりに texStorage3D を使用することが推奨される。一部の実装では、 texImage3D は texStorage3D と比較してより高いメモリコストを課す場合がある。

undefined texImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, TexImageSource source) // May throw DOMException OpenGL ES 3.0.6 §3.8.3man ページ

現在バインドされている WebGLTexture の矩形 subregion を更新する。

要素の subregions のアップロードについては、 TexImageSource からのアップロードのための Pixel store parameters で詳述される。

format および type 引数の解釈、ならびに UNPACK_PREMULTIPLY_ALPHA_WEBGL pixel storage parameter に関する注記については、 texImage2Dを参照。

ImageBitmap 以外の任意の引数型で呼び出される場合に、この関数の振る舞いに 影響する WebGL 固有の pixel storage parameters については、 Pixel Storage Parametersを参照。

ソースから WebGL 実装へ転送される最初のピクセルは、ソースの左上隅に対応する。 この振る舞いは、前述の節で記述されるように、ImageBitmap 引数を除き、 UNPACK_FLIP_Y_WEBGL pixel storage parameterによって変更される。

formattype、および WebGLTexture の internal format の組み合わせは、 この表に列挙されていなければならない。

WebGLTexture がバインドされていない状態(上記参照)でこの関数を呼び出そうとした場合、 INVALID_OPERATION エラーを生成する。

WebGLBuffer が PIXEL_UNPACK_BUFFER target にバインドされている場合、 INVALID_OPERATION エラーを生成する。

この関数が data 属性を neuter された ImageData で呼び出される場合、 INVALID_VALUE エラーが生成される。

この関数が neuter された ImageBitmap で呼び出される場合、 INVALID_VALUE エラーが生成される。

この関数が、包含する Document のオリジンと異なるオリジンを持つ HTMLImageElement または HTMLVideoElement で呼び出される場合、 またはビットマップの origin-clean フラグが false に設定された HTMLCanvasElementImageBitmap、または OffscreenCanvas で呼び出される場合、SECURITY_ERR 例外が 投げられなければならない。Origin Restrictionsを参照。

void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLintptr offset) OpenGL ES 3.0.6 §3.8.3man ページ

PIXEL_UNPACK_BUFFER target にバインドされた WebGLBuffer から、現在バインドされている WebGLTexture へデータをアップロードする。

offset は WebGLBuffer の data store へのバイトオフセットであり、0 より小さい場合は INVALID_VALUE エラーを生成する。

WebGLTexture がバインドされていない状態でこの関数を呼び出そうとした場合、 INVALID_OPERATION エラーを生成する。

PIXEL_UNPACK_BUFFER target に WebGLBuffer がバインドされていない場合、 INVALID_OPERATION エラーを生成する。

pixel store parameter constraints が満たされない場合、 INVALID_OPERATION エラーを生成する。

undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, [AllowShared] ArrayBufferView? srcData, optional unsigned long long srcOffset = 0) OpenGL ES 3.0.6 §3.8.5man ページ

現在バインドされている WebGLTexture の矩形 subregion を更新する。

WebGLTexture がバインドされていない状態(上記参照)でこの関数を呼び出そうとした場合、 INVALID_OPERATION エラーを生成する。

WebGLBuffer が PIXEL_UNPACK_BUFFER target にバインドされている場合、 INVALID_OPERATION エラーを生成する。

formattype、および WebGLTexture の internal format の組み合わせは、 man ページの Table 1 または 2 に列挙されていなければならない。

typeFLOAT_32_UNSIGNED_INT_24_8_REV である場合、 INVALID_ENUM エラーを生成する。

srcData の型は、上の表に従って type と一致しなければならない。 そうでなければ、INVALID_OPERATION エラーを生成する。

srcData が非 null であるが、そのサイズが、指定された widthheightdepthformattype、および pixel storage parameters によって要求されるものより小さい場合、 INVALID_OPERATION エラーを生成する。

この関数の振る舞いに影響する WebGL 固有の pixel storage parameters については、 Pixel Storage Parametersを参照。

pixel store parameter constraints が満たされない場合、 INVALID_OPERATION エラーを生成する。

srcData からの読み取りは、srcDatasrcOffset 要素分だけ進んだ位置から開始される。(Elements は Uint8Array ではバイト、Int32Array では int32 などである。)

srcOffset から開始して srcData 内に十分なデータがない場合、 INVALID_OPERATION を生成する。

undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, TexImageSource source) // May throw DOMException OpenGL ES 3.0.6 §3.8.5man ページ

現在バインドされている WebGLTexture の矩形 subregion を更新する。

要素の subregions のアップロードについては、 TexImageSource からのアップロードのための Pixel store parameters で詳述される。

format および type 引数の解釈、ならびに UNPACK_PREMULTIPLY_ALPHA_WEBGL pixel storage parameter に関する注記については、 texImage2Dを参照。

ImageBitmap 以外の任意の引数型で呼び出される場合に、この関数の振る舞いに 影響する WebGL 固有の pixel storage parameters については、 Pixel Storage Parametersを参照。

ソースから WebGL 実装へ転送される最初のピクセルは、ソースの左上隅に対応する。 この振る舞いは、前述の節で記述されるように、ImageBitmap 引数を除き、 UNPACK_FLIP_Y_WEBGL pixel storage parameterによって変更される。

formattype、および WebGLTexture の internal format の組み合わせは、 この表に列挙されていなければならない。

WebGLTexture がバインドされていない状態(上記参照)でこの関数を呼び出そうとした場合、 INVALID_OPERATION エラーを生成する。

WebGLBuffer が PIXEL_UNPACK_BUFFER target にバインドされている場合、 INVALID_OPERATION エラーを生成する。

この関数が data 属性を neuter された ImageData で呼び出される場合、 INVALID_VALUE エラーが生成される。

この関数が neuter された ImageBitmap で呼び出される場合、 INVALID_VALUE エラーが生成される。

この関数が、包含する Document のオリジンと異なるオリジンを持つ HTMLImageElement または HTMLVideoElement で呼び出される場合、 またはビットマップの origin-clean フラグが false に設定された HTMLCanvasElementImageBitmap、または OffscreenCanvas で呼び出される場合、SECURITY_ERR 例外が 投げられなければならない。Origin Restrictionsを参照。

void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLintptr offset) OpenGL ES 3.0.6 §3.8.5man ページ

PIXEL_UNPACK_BUFFER target にバインドされた WebGLBuffer からのデータで、 現在バインドされている WebGLTexture の部分矩形を更新する。

offset は WebGLBuffer の data store へのバイトオフセットであり、0 より小さい場合は INVALID_VALUE エラーを生成する。

WebGLTexture がバインドされていない状態でこの関数を呼び出そうとした場合、 INVALID_OPERATION エラーを生成する。

PIXEL_UNPACK_BUFFER target に WebGLBuffer がバインドされていない場合、 INVALID_OPERATION エラーを生成する。

pixel store parameter constraints が満たされない場合、 INVALID_OPERATION エラーを生成する。

void copyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) OpenGL ES 3.0.6 §3.8.5man ページ

[読み取り操作]
WebGLTexture がバインドされていない状態(上記参照)でこの関数を呼び出そうとした場合、 INVALID_OPERATION エラーが生成される。

framebuffer の外側にある任意のピクセルについて、対応する destination pixel は変更されないまま残る。 Framebuffer の外側のピクセルの読み取りを参照。

この関数が complete framebuffer の欠落した attachment から読み取ろうとする場合、 欠落した Attachment からの読み取りに従い、 INVALID_OPERATION エラーが生成される。

undefined compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, [AllowShared] ArrayBufferView srcData, optional unsigned long long srcOffset = 0, optional GLuint srcLengthOverride = 0) OpenGL ES 3.0.6 §3.8.6man ページ

srcData からの読み取りは、srcDatasrcOffset 要素分だけ進んだ位置から開始される。(Elements は Uint8Array ではバイト、Int32Array では int32 などである。)

srcOffset > srcData.length の場合、INVALID_VALUE エラーを生成する。

srcLengthOverride のデフォルトは srcData.length - srcOffset である。

srcOffset から開始して srcData 内に十分なデータがない場合、または 渡されたデータ量が compressed image の format、dimensions、および内容と一致しない場合、 INVALID_VALUE エラーを生成する。

undefined compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, [AllowShared] ArrayBufferView srcData, optional unsigned long long srcOffset = 0, optional GLuint srcLengthOverride = 0) OpenGL ES 3.0.6 §3.8.6man ページ

srcData からの読み取りは、srcDatasrcOffset 要素分だけ進んだ位置から開始される。(Elements は Uint8Array ではバイト、Int32Array では int32 などである。)

srcOffset > srcData.length の場合、INVALID_VALUE エラーを生成する。

srcLengthOverride のデフォルトは srcData.length - srcOffset である。

srcOffset から開始して srcData 内に十分なデータがない場合、または 渡されたデータ量が compressed image の format、dimensions、および内容と一致しない場合、 INVALID_VALUE エラーを生成する。

undefined compressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, [AllowShared] ArrayBufferView srcData, optional unsigned long long srcOffset = 0, optional GLuint srcLengthOverride = 0) OpenGL ES 3.0.6 §3.8.6man ページ

srcData からの読み取りは、srcDatasrcOffset 要素分だけ進んだ位置から開始される。(Elements は Uint8Array ではバイト、Int32Array では int32 などである。)

srcOffset > srcData.length の場合、INVALID_VALUE エラーを生成する。

srcLengthOverride のデフォルトは srcData.length - srcOffset である。

srcOffset から開始して srcData 内に十分なデータがない場合、または 渡されたデータ量が compressed image の format、dimensions、および内容と一致しない場合、 INVALID_VALUE エラーを生成する。

undefined compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, [AllowShared] ArrayBufferView srcData, optional unsigned long long srcOffset = 0, optional GLuint srcLengthOverride = 0) OpenGL ES 3.0.6 §3.8.6man ページ

srcData からの読み取りは、srcDatasrcOffset 要素分だけ進んだ位置から開始される。(Elements は Uint8Array ではバイト、Int32Array では int32 などである。)

srcOffset > srcData.length の場合、INVALID_VALUE エラーを生成する。

srcLengthOverride のデフォルトは srcData.length - srcOffset である。

srcOffset から開始して srcData 内に十分なデータがない場合、または 渡されたデータ量が compressed image の format、dimensions、および内容と一致しない場合、 INVALID_VALUE エラーを生成する。

この節は上記 4 つのエントリポイントに適用される。

WebGLTexture がバインドされていない状態(上記参照)でこれらの関数を呼び出そうとした場合、 INVALID_OPERATION エラーを生成する。

WebGLBuffer が PIXEL_UNPACK_BUFFER target にバインドされている場合、 INVALID_OPERATION エラーを生成する。

OpenGL ES 3.0 で定義される ETC2 および EAC texture formats は、 WebGL 2.0 では利用できない

void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, GLintptr offset) OpenGL ES 3.0.6 §3.8.6man ページ

void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLintptr offset) OpenGL ES 3.0.6 §3.8.6man ページ

void compressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLintptr offset) OpenGL ES 3.0.6 §3.8.6man ページ

void compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, GLintptr offset) OpenGL ES 3.0.6 §3.8.6man ページ

この節は上記 4 つのエントリポイントに適用される。

WebGLTexture がバインドされていない状態(上記参照)でこれらの関数を呼び出そうとした場合、 INVALID_OPERATION エラーを生成する。

PIXEL_UNPACK_BUFFER target に WebGLBuffer がバインドされていない場合、 INVALID_OPERATION エラーを生成する。

offset は WebGLBuffer の data store へのバイトオフセットであり、0 より小さい場合は INVALID_VALUE エラーを生成する。

OpenGL ES 3.0 で定義される ETC2 および EAC texture formats は、 WebGL 2.0 では利用できない

Programs と Shaders

[WebGLHandlesContextLoss] GLint getFragDataLocation(WebGLProgram program, DOMString name) OpenGL ES 3.0.6 §3.9.2.3man ページ

program がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成し、-1 を返す。
any getProgramParameter(WebGLProgram? program, GLenum pname) OpenGL ES 3.0.6 §6.1.12man ページ
program がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成し、null を返す。

渡された program について、渡された pname に対する値を返す。返される型は、 次の表に示されるように、要求された pname に対する自然な型である。
pname 返される型
DELETE_STATUS GLboolean
LINK_STATUS GLboolean
VALIDATE_STATUS GLboolean
ATTACHED_SHADERS GLint
ACTIVE_ATTRIBUTES GLint
ACTIVE_UNIFORMS GLint
TRANSFORM_FEEDBACK_BUFFER_MODE GLenum
TRANSFORM_FEEDBACK_VARYINGS GLint
ACTIVE_UNIFORM_BLOCKS GLint

pname が上の表にない場合、INVALID_ENUM エラーを生成し、null を 返す。

この関数の実行中に OpenGL エラーが生成された場合、null を返す。

Uniforms と attributes

any getUniform(WebGLProgram program, WebGLUniformLocation location) OpenGL ES 3.0.6 §6.1.12man ページ
program または location のいずれかが、このものとは異なる WebGL2RenderingContext によって生成された場合、 INVALID_OPERATION エラーを生成する。

渡された program 内の渡された location にある uniform 値を返す。返される型は uniform 型に依存する。WebGL 2.0 の新しい uniform 型について返される型は、 次の表に示される。
uniform 型 返される型
uint GLuint
uvec2 Uint32Array(2 要素)
uvec3 Uint32Array(3 要素)
uvec4 Uint32Array(4 要素)
mat2x3 Float32Array(6 要素)
mat2x4 Float32Array(8 要素)
mat3x2 Float32Array(6 要素)
mat3x4 Float32Array(12 要素)
mat4x2 Float32Array(8 要素)
mat4x3 Float32Array(12 要素)
任意の sampler 型 GLint

WebGL 1.0 と共有される uniform 型について返される型は、WebGL 1.0 と同じである。

void uniform[1234]ui(WebGLUniformLocation? location, ...)

void uniform[1234]uiv(WebGLUniformLocation? location, ...)

void uniformMatrix[234]x[234]fv(WebGLUniformLocation? location, ...) OpenGL ES 3.0.6 §2.12.6man ページ

上記の各 uniform* 関数は、指定された uniform または uniforms を、提供された値に設定する。 渡された location が null でなく、かつ現在使用中の program から以前の getUniformLocation 呼び出しによって取得されたものでない場合、 INVALID_OPERATION エラーが生成される。渡された location が null の場合、渡されたデータは黙って無視され、uniform 変数は変更されない。

vector 形式(v で終わるもの)のいずれかに渡された array が 無効な長さを持つ場合、INVALID_VALUE エラーが生成される。その長さが、 割り当てられた型に対して短すぎる場合、またはその型の整数倍でない場合、その長さは無効である。

srcLength 引数を持つ overloads では:

void vertexAttribI4[u]i(GLuint index, ...)

void vertexAttribI4[u]iv(GLuint index, ...) OpenGL ES 3.0.6 §2.8man ページ

渡された index にある vertex attribute を、指定された定数整数値に設定する。 vertexAttrib によって設定された値は、途中に drawArrays または drawElements の呼び出しがあった場合でも、CURRENT_VERTEX_ATTRIB param を指定した getVertexAttrib 関数から返されることが保証される。

vector 形式(v で終わるもの)のいずれかに渡された array が短すぎる場合、 INVALID_VALUE エラーが生成される。

void vertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset) OpenGL ES 3.0.6 §2.9man ページ

ARRAY_BUFFER target に現在バインドされている WebGLBuffer オブジェクトを、渡された index にある vertex attribute に割り当てる。値は常に整数値のまま残される。Size は attribute あたりの コンポーネント数である。Stride および offset はバイト単位である。渡された stride および offset は、渡された type および size に対して適切でなければならず、そうでない場合 INVALID_OPERATION エラーが生成される。 Buffer Offset および Stride の要件を参照。offset が負の場合、 INVALID_VALUE エラーが生成される。ARRAY_BUFFER target に WebGLBuffer が バインドされておらず、offset が非ゼロの場合、 INVALID_OPERATION エラーが生成される。WebGL では、サポートされる最大 stride は 255 である。 Vertex Attribute Data Strideを参照。
any getVertexAttrib(GLuint index, GLenum pname) OpenGL ES 3.0.6 §6.1.12man ページ
渡された index にある vertex attribute について、pname で要求された情報を返す。 返される型は、次の表に示されるように、要求された情報に依存する。
pname 返される型
VERTEX_ATTRIB_ARRAY_BUFFER_BINDING WebGLBuffer
VERTEX_ATTRIB_ARRAY_ENABLED GLboolean
VERTEX_ATTRIB_ARRAY_SIZE GLint
VERTEX_ATTRIB_ARRAY_STRIDE GLint
VERTEX_ATTRIB_ARRAY_TYPE GLenum
VERTEX_ATTRIB_ARRAY_NORMALIZED GLboolean
CURRENT_VERTEX_ATTRIB Float32Array、Int32Array または Uint32Array のいずれか(それぞれ 4 要素)
VERTEX_ATTRIB_ARRAY_INTEGER GLboolean
VERTEX_ATTRIB_ARRAY_DIVISOR GLint

CURRENT_VERTEX_ATTRIB については、返される型は、指定された index に対する vertexAttrib 関数群への最も最近の呼び出しによって決定される。すなわち、 vertexAttribI4i* が使用された場合、返される型は Int32Array になる。 vertexAttribI4ui* が使用された場合、返される型は Uint32Array になる。 それ以外の場合は Float32Array である。

シーケンスまたは typed arrays を返すすべての問い合わせは、毎回新しいオブジェクトを返す。

pname が上の表にない場合、INVALID_ENUM エラーを生成する。

OpenGL エラーが生成された場合、null を返す。

描画バッファへの書き込み

void clear(GLbitfield mask) OpenGL ES 3.0.6 §4.2.3man ページ

buffers を事前設定された値にクリアする。クリアされるはずの buffers の中に整数 color buffer が 含まれる場合、INVALID_OPERATION エラーが生成され、何もクリアされない。

void vertexAttribDivisor(GLuint index, GLuint divisor) OpenGL ES 3.0.6 §2.9man ページ

描画時に index で識別される vertex attribute が進む割合を設定する。

void drawArrays(GLenum mode, GLint first, GLsizei count) OpenGL ES 3.0.6 §2.9.3man ページ

[描画操作]

void drawElements(GLenum mode, GLsizei count, GLenum type, GLintptr offset) OpenGL ES 3.0.6 §2.9.3man ページ

[描画操作]

void drawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount) OpenGL ES 3.0.6 §2.9.3man ページ

[描画操作]
現在有効化されている vertex attributes を使用して、geometry の instanceCount 個の instances を描画する。非ゼロの divisor を持つ vertex attributes は、divisor 個の instances ごとに 1 回進む。

void drawElementsInstanced(GLenum mode, GLsizei count, GLenum type, GLintptr offset, GLsizei instanceCount) OpenGL ES 3.0.6 §2.9.3man ページ

[描画操作]
現在バインドされている element array buffer を使用して、geometry の instanceCount 個の instances を描画する。非ゼロの divisor を持つ vertex attributes は、divisor 個の instances ごとに 1 回進む。

void drawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLintptr offset) OpenGL ES 3.0.6 §2.9.3man ページ

[描画操作]
現在バインドされている element array buffer を使用して描画する。WebGL 1.0 仕様の 描画バッファへの書き込みの節で drawElements について指定されるすべてのエラー条件が適用される。

加えて、描画に使用される indices が [start, end] の範囲外である場合、 実装は 有効化された Vertex Attributes と範囲チェックで定義される振る舞いを保証するか、単に引数 start および end を破棄して代わりに drawElements を 呼び出すかのいずれかを行える。いずれの場合でも、この原因について GL エラーは 生成されるべきではない。

drawElementsdrawArraysdrawRangeElements およびそれらの instanced variants の呼び出し中、WebGL 2.0 は OpenGL ES 3.0 で指定されるものを超える追加の エラーチェックを実行する。

ピクセルの読み戻し

現在の framebuffer 内のピクセルは、ArrayBufferView オブジェクト、または PIXEL_PACK_BUFFER target にバインドされた WebGLBuffer へ読み戻すことができる。

ここでは、WebGL 1.0 の ピクセルの読み戻しとの差分のみを 記述する。

undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, [AllowShared] ArrayBufferView dstData, unsigned long long dstOffset) OpenGL ES 3.0 §4.3.2man ページ
[読み取り操作]

WebGLBuffer が PIXEL_PACK_BUFFER target にバインドされている場合、 INVALID_OPERATION エラーを生成する。

pixel store parameter constraints が満たされない場合、 INVALID_OPERATION エラーを生成する。

dstDatadstOffset から開始する読み取り操作に十分な空間を 持たない場合、INVALID_OPERATION を生成する。

これはブロッキング操作である。結果を返すためには、WebGL は source framebuffer への以前の すべてのレンダリング操作を完全に完了しなければならないためである。 マルチプロセス WebGL 実装では、remote process から結果を取得するために、高コストな プロセス間 round-trip も発生する。

代わりに、PIXEL_PACK_BUFFER への readPixels の使用を検討すること。 その buffer からデータを読み取るには getBufferSubData を使用する。 (その呼び出しでのブロックを避ける方法については getBufferSubData を参照。)

void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLintptr offset) OpenGL ES 3.0 §4.3.2man ページ

PIXEL_PACK_BUFFER target に WebGLBuffer がバインドされていない場合、 INVALID_OPERATION エラーを生成する。

offset は WebGLBuffer の data store へのバイトオフセットであり、0 より小さい場合は INVALID_VALUE エラーを生成する。WebGLBuffer の data store の残りが、 pixel store modes を考慮して指定された矩形内のすべてのピクセルを取得するのに十分な大きさでない場合、 INVALID_OPERATION を生成する。

Multiple render targets

void drawBuffers(sequence<GLenum> buffers) OpenGL ES 3.0.6 §4.2.1man ページ

すべての fragment colors が書き込まれる draw buffers を定義する。
これは描画しない。以後の呼び出しのための状態を設定するだけである。

void clearBufferfv(GLenum buffer, GLint drawbuffer, Float32List values, optional unsigned long long srcOffset = 0);

void clearBufferiv(GLenum buffer, GLint drawbuffer, Int32List values, optional unsigned long long srcOffset = 0);

void clearBufferuiv(GLenum buffer, GLint drawbuffer, Uint32List values, optional unsigned long long srcOffset = 0);

void clearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); OpenGL ES 3.0.6 §4.2.3man ページ これらは [描画操作]である。

指定された buffer 内のすべてのピクセルを定数値に設定する。color buffer に使用すべき clearBuffer 関数は、次の表に示される color buffer の型に依存する。
buffer の型 clearBuffer 関数
floating point clearBufferfv
fixed point clearBufferfv
signed integer clearBufferiv
unsigned integer clearBufferuiv

bufferCOLOR_BUFFER であり、関数が上の表に従って選択されていない場合、 INVALID_OPERATION エラーが生成され、何もクリアされない。

ArrayBufferView エントリポイントについて、srcOffset から開始して values 内に十分な要素がない場合、INVALID_VALUE を生成する。

clearBufferfi は depth および stencil buffers をクリアするために使用してよい。 bufferDEPTH_STENCIL でなければならず、 drawBuffer は 0 でなければならない。depth および stencil は、それぞれ depth 値および stencil 値である。

この関数が complete framebuffer の欠落した attachment をクリアしようとする場合、 欠落した Attachment への描画に従い、 何もクリアされず、エラーも生成されない。

Query オブジェクト

WebGLQuery createQuery() OpenGL ES 3.0.6 §2.14man ページ

glGenQueries を呼び出したかのように、WebGLQuery オブジェクトを作成し、 query オブジェクト名で初期化する。

void deleteQuery(WebGLQuery? query) OpenGL ES 3.0.6 §2.14man ページ

query がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

glDeleteQueries を呼び出したかのように、渡された WebGLQuery に含まれる query オブジェクトを削除対象として マークする。オブジェクトがすでに削除対象としてマークされている場合、この呼び出しは 効果を持たない。基盤となる GL オブジェクトは JS オブジェクトが破棄されると自動的に 削除対象としてマークされるが、このメソッドは著者がオブジェクトを早期に削除対象として マークすることを可能にすることに注意。

[WebGLHandlesContextLoss] GLboolean isQuery(WebGLQuery? query) OpenGL ES 3.0.6 §6.1.7man ページ

渡された WebGLQuery が有効である場合は true を返し、 そうでない場合は false を返す。

query がこのものとは異なる WebGL2RenderingContext によって生成された場合、 false を返す。

query の invalidated flag が設定されている場合、false を返す。

void beginQuery(GLenum target, WebGLQuery query) OpenGL ES 3.0.6 §2.14man ページ

query がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

非同期 query を開始する。Target は実行される query の種類を示す。

void endQuery(GLenum target) OpenGL ES 3.0.6 §2.14man ページ

target によって指定される query 型について追跡されるコマンド列の終了をマークする。 最終的な query result が利用可能になると、query オブジェクトはこれを示すように更新され、 getQueryParameter を呼び出すことで result を取得できる。

WebGLQuery? getQuery(GLenum target, GLenum pname) OpenGL ES 3.0.6 §6.1.7man ページ

query target target に関する情報を返す。これは、occlusion queries については ANY_SAMPLES_PASSED または ANY_SAMPLES_PASSED_CONSERVATIVE のいずれか、または primitive queries については TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN でなければならない。 pname は query object target parameter の symbolic name を指定する。 現時点では CURRENT_QUERY でなければならず、target に対して現在 active な query、または null を返す。

target または pname が上のリストにない場合、 INVALID_ENUM エラーを生成し、null を返す。

この関数の実行中に OpenGL エラーが生成された場合、null を返す。

any getQueryParameter(WebGLQuery query, GLenum pname) OpenGL ES 3.0.6 §6.1.7man ページ

query がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

query オブジェクトの parameter pname を返す。QUERY_RESULT は query オブジェクトの passed samples counter の値を返す。 QUERY_RESULT_AVAILABLE は samples counter が直ちに利用可能かどうかを返す。 返される型は、次の表に示されるように、要求された pname に対する自然な型である。

pname 返される型
QUERY_RESULT GLuint
QUERY_RESULT_AVAILABLE GLboolean

pname が上の表にない場合、INVALID_ENUM エラーを生成し、null を返す。

query が有効な query オブジェクトでない場合、または現在 active な query オブジェクトである場合、 INVALID_OPERATION エラーを生成し、null を返す。

この関数の実行中に OpenGL エラーが生成された場合、null を返す。

プラットフォーム間で一貫した振る舞いを確保するため、queries の results は、ユーザーエージェントの event loop が task を実行していないときにのみ利用可能にされなければならない。 言い換えると:

query の result は、制御がユーザーエージェントの event loop に戻ったときに利用可能に される場合もあれば、されない場合もある。delay が 0 の単一の setTimeout callback、 または単一の requestAnimationFrame callback を使用しても、WebGL 実装が query の results を提供するのに十分な時間があることは保証されない。
OpenGL ES 3.0 仕様と比較したこの変更は、applications が query を発行して同じ frame 内で その result を取得できることに依存するのを防ぐために強制される。デバイス間で最高の移植性を、 実装間で最高の性能を確保するため、applications は queries の results が非同期に 利用可能になることを期待しなければならない。

Sampler オブジェクト

WebGLSampler createSampler() OpenGL ES 3.0.6 §3.8.2man ページ

glGenSamplers を呼び出したかのように、WebGLSampler オブジェクトを作成し、 sampler オブジェクト名で初期化する。

void deleteSampler(WebGLSampler? sampler) OpenGL ES 3.0.6 §3.8.2man ページ

sampler がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

glDeleteSamplers を呼び出したかのように、渡された WebGLSampler に含まれる sampler オブジェクトを削除対象として マークする。オブジェクトがすでに削除対象としてマークされている場合、この呼び出しは 効果を持たない。基盤となる GL オブジェクトは JS オブジェクトが破棄されると自動的に 削除対象としてマークされるが、このメソッドは著者がオブジェクトを早期に削除対象として マークすることを可能にすることに注意。

[WebGLHandlesContextLoss] GLboolean isSampler(WebGLSampler? sampler) OpenGL ES 3.0.6 §6.1.5man ページ

渡された WebGLSampler が有効である場合は true を返し、 そうでない場合は false を返す。

sampler がこのものとは異なる WebGL2RenderingContext によって生成された場合、 false を返す。

sampler の invalidated flag が設定されている場合、false を返す。

void bindSampler(GLuint unit, WebGLSampler? sampler) OpenGL ES 3.0.6 §3.8.2man ページ

sampler がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

渡された WebGLSampler に含まれる sampler オブジェクトを、渡された index の texture unit へバインドする。sampler が texture unit にバインドされている場合、 sampler の状態は、その texture unit にバインドされた texture の sampling 状態を置き換える。 sampler が null の場合、現在バインドされている sampler は texture unit からアンバインドされる。単一の sampler オブジェクトは、複数の texture units に 同時にバインドされてもよい。

unitMAX_COMBINED_TEXTURE_IMAGE_UNITS の値以上である場合、 INVALID_VALUE エラーを生成する。

削除対象としてマークされたオブジェクトをバインドしようとすると INVALID_OPERATION エラーが生成され、現在のバインディングは変更されないままとなる。

void samplerParameteri(WebGLSampler sampler, GLenum pname, GLint param)

void samplerParameterf(WebGLSampler sampler, GLenum pname, GLfloat param)

OpenGL ES 3.0.6 §3.8.2man ページ

sampler がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

渡された sampler について、渡された pname に対する値を設定する。pname は次の表に示される。
pname
TEXTURE_COMPARE_FUNC
TEXTURE_COMPARE_MODE
TEXTURE_MAG_FILTER
TEXTURE_MAX_LOD
TEXTURE_MIN_FILTER
TEXTURE_MIN_LOD
TEXTURE_WRAP_R
TEXTURE_WRAP_S
TEXTURE_WRAP_T

pname が上の表にない場合、INVALID_ENUM エラーを生成する。

sampler が有効な sampler オブジェクトでない場合、INVALID_OPERATION エラーを生成する。

any getSamplerParameter(WebGLSampler sampler, GLenum pname) OpenGL ES 3.0.6 §6.1.5man ページ
sampler がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

sampler として渡された指定の WebGLSampler について、pname で要求された情報を返す。 返される型は、次の表に示されるように、要求された情報に依存する。
pname 返される型
TEXTURE_COMPARE_FUNC GLenum
TEXTURE_COMPARE_MODE GLenum
TEXTURE_MAG_FILTER GLenum
TEXTURE_MAX_LOD GLfloat
TEXTURE_MIN_FILTER GLenum
TEXTURE_MIN_LOD GLfloat
TEXTURE_WRAP_R GLenum
TEXTURE_WRAP_S GLenum
TEXTURE_WRAP_T GLenum

pname が上の表にない場合、INVALID_ENUM エラーを生成する。

sampler が有効な sampler オブジェクトでない場合、INVALID_OPERATION エラーを生成する。

この関数の実行中に OpenGL エラーが生成された場合、null を返す。

Sync オブジェクト

Sync オブジェクトは、GL server と client の間で実行を同期するために使用できる。

WebGLSync? fenceSync(GLenum condition, GLbitfield flags) OpenGL ES 3.0.6 §5.2man ページ

新しい fence sync オブジェクトを作成し、関連付けられた fence コマンドを GL command stream に挿入する。

[WebGLHandlesContextLoss] GLboolean isSync(WebGLSync? sync) OpenGL ES 3.0.6 §6.1.8man ページ

渡された WebGLSync が有効である場合は true を返し、 そうでない場合は false を返す。

sync がこのものとは異なる WebGL2RenderingContext によって生成された場合、 false を返す。

sync の invalidated flag が設定されている場合、false を返す。

void deleteSync(WebGLSync? sync) OpenGL ES 3.0.6 §5.2man ページ

sync がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

glDeleteSync を呼び出したかのように、渡された WebGLSync に含まれる sync オブジェクトを削除対象として マークする。オブジェクトがすでに削除対象としてマークされている場合、この呼び出しは 効果を持たない。基盤となる GL オブジェクトは JS オブジェクトが破棄されると自動的に 削除対象としてマークされるが、このメソッドは著者がオブジェクトを早期に削除対象として マークすることを可能にすることに注意。

GLenum clientWaitSync(WebGLSync sync, GLbitfield flags, GLuint64 timeout) OpenGL ES 3.0.6 §5.2.1man ページ

sync がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

渡された sync オブジェクトが signaled になるか、指定された timeout が経過するまで実行をブロックする。 timeout はナノ秒単位である。

4 つの status 値のいずれかを返す。戻り値 ALREADY_SIGNALED は、 clientWaitSync が呼び出された時点で sync が signaled だったことを示す。 sync が signaled であった場合、timeout が 0 であっても ALREADY_SIGNALED は常に返される。戻り値 TIMEOUT_EXPIRED は、 sync が signaled になる前に指定された timeout 期間が満了したことを示す。 戻り値 CONDITION_SATISFIED は、timeout が満了する前に sync が signaled になったことを示す。最後に、エラーが発生した場合、以下で指定されるようにエラーを 生成することに加えて、ブロックせずに WAIT_FAILED を返す。

flags は command flushing の振る舞いを制御し、 SYNC_FLUSH_COMMANDS_BIT を含んでもよい。 flags に他のビットが設定されている場合、INVALID_OPERATION エラーが 生成される。flagsSYNC_FLUSH_COMMANDS_BIT が設定されており、 clientWaitSync が呼び出された時点で sync が unsignaled である場合、 sync でブロックする前に flush と等価な処理が実行される。

相違点の節で議論されるように、WebGL 実装は main thread を 長時間ブロックすることを防ぐため、短い最大 timeout を課さなければならない。 implementation-defined timeout は、引数 MAX_CLIENT_WAIT_TIMEOUT_WEBGL を指定して getParameter を呼び出すことで問い合わせられる。 timeout がこの implementation-defined timeout より大きい場合、 INVALID_OPERATION エラーが生成される。

implementation-defined maximum timeout は指定されていない。applications が長時間待機することで 対話性を損なわないよう、十分低く設定されるべきである。実装が 0 の maximum timeout を 課すことは許容される。WebGL applications は、長時間実行をブロックするために clientWaitSync を使用すべきではない。

この関数の実行中に OpenGL エラーが生成された場合、WAIT_FAILED を返す。

プラットフォーム間で一貫した振る舞いを確保するため、sync オブジェクトはユーザーエージェントの event loop が task を実行していないときにのみ signaled 状態へ遷移してよい。 言い換えると:

void waitSync(WebGLSync sync, GLbitfield flags, GLint64 timeout) OpenGL ES 3.0.6 §5.2.1man ページ

sync がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

直ちに返るが、渡された sync オブジェクトが signaled になるか、implementation-dependent timeout が 経過するまで GL server 上で待機する。渡された timeoutTIMEOUT_IGNORED に設定されなければならない。
複数の GL contexts 間で同期する可能性がない場合、waitSync の呼び出しは実質的に no-op である。
any getSyncParameter(WebGLSync sync, GLenum pname) OpenGL ES 3.0.6 §6.1.8man ページ
sync がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

渡された WebGLSync オブジェクトについて、渡された pname に対する値を返す。返される型は、 次の表に示されるように、要求された pname に対する自然な型である。
pname 返される型
OBJECT_TYPE GLenum
SYNC_STATUS GLenum
SYNC_CONDITION GLenum
SYNC_FLAGS GLbitfield

pname が上の表にない場合、INVALID_ENUM エラーを生成し、null を 返す。

この関数の実行中に OpenGL エラーが生成された場合、null を返す。

プラットフォーム間で一貫した振る舞いを確保するため、sync オブジェクトはユーザーエージェントの event loop が task を実行していないときにのみ signaled 状態へ遷移してよい。 言い換えると:

Transform feedback

Transform feedback mode は、vertex shader によって書き込まれる output variables の値を捕捉する。 vertices は flatshading および clipping の前に捕捉される。変換された vertices は、1 つ以上の buffer objects に格納された後で任意で破棄されてもよく、またはさらなる処理のために clipping stage へ 下流に渡されてもよい。捕捉される output variables の集合は、program がリンクされるときに決定される。

デフォルト Transform Feedback オブジェクトが存在し、null WebGLTransformFeedback handle によって表される。 context の初期状態では、デフォルトオブジェクトがバインドされている。 バインドされているとき、getParameter(TRANSFORM_FEEDBACK_BINDING)null を返す。

任意の output variable が transform feedback buffer object へ stream されるように指定されているが、 vertex shader によって実際には書き込まれない場合、その値は 0 に設定される。 Transform feedback primitive captureを参照。

WebGLTransformFeedback createTransformFeedback() OpenGL ES 3.0.6 §2.15.1glGenTransformFeedbacks と同様)
glGenTransformFeedbacks を呼び出したかのように、WebGLTransformFeedback オブジェクトを作成し、transform feedback オブジェクト名で初期化する。
void deleteTransformFeedback(WebGLTransformFeedback? transformFeedback) OpenGL ES 3.0.6 §2.15.1glDeleteTransformFeedbacks と同様)
transformFeedback がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

glDeleteTransformFeedbacks を呼び出したかのように、渡された WebGLTransformFeedback に含まれる transform feedback オブジェクトを 削除対象としてマークする。オブジェクトがすでに削除対象としてマークされている場合、この呼び出しは 効果を持たない。基盤となる GL オブジェクトは JS オブジェクトが破棄されると自動的に 削除対象としてマークされるが、このメソッドは著者がオブジェクトを早期に削除対象として マークすることを可能にする。
[WebGLHandlesContextLoss] GLboolean isTransformFeedback(WebGLTransformFeedback? transformFeedback) OpenGL ES 3.0.6 §6.1.11man ページ
渡された WebGLTransformFeedback が有効である場合は true を返し、 そうでない場合は false を返す。

transform feedback がこのものとは異なる WebGL2RenderingContext によって生成された場合、 false を返す。

transform feedback の invalidated flag が設定されている場合、false を返す。
void bindTransformFeedback(GLenum target, WebGLTransformFeedback? transformFeedback) OpenGL ES 3.0.6 §2.15.1man ページ
transformFeedback がこのものとは異なる WebGL2RenderingContext によって生成された場合、 INVALID_OPERATION エラーを生成する。

指定された WebGLTransformFeedback オブジェクトをバインドする。 transformFeedback が null の場合、context によって提供される デフォルト transform feedback オブジェクトがバインドされる。 削除対象としてマークされたオブジェクトをバインドしようとすると INVALID_OPERATION エラーが生成され、現在のバインディングは変更されないままとなる。
void beginTransformFeedback(GLenum primitiveMode) OpenGL ES 3.0.6 §2.15.2man ページ
void endTransformFeedback() OpenGL ES 3.0.6 §2.15.2man ページ
void pauseTransformFeedback() OpenGL ES 3.0.6 §2.15.2man ページ
void resumeTransformFeedback() OpenGL ES 3.0.6 §2.15.2man ページ
void transformFeedbackVaryings(WebGLProgram program, sequence<DOMString> varyings, GLenum bufferMode) OpenGL ES 3.0.6 §2.12.8man ページ
program がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

WebGLActiveInfo? getTransformFeedbackVarying(WebGLProgram program, GLuint index) OpenGL ES 3.0.6 §2.12.8man ページ
program がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成し、null を返す。

Uniform Buffer オブジェクト

Uniform buffer オブジェクトは、named uniform blocks のためのストレージを提供する。 そのため、named uniform blocks 内の active uniforms の値は、buffer オブジェクトの内容を 変更することで変更できる。

void bindBufferBase(GLenum target, GLuint index, WebGLBuffer? buffer) OpenGL ES 3.0.6 §2.10.1.1man ページ
buffer がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

target によって指定される targets の配列の index にある binding point へ、指定された WebGLBuffer オブジェクトをバインドする。
void bindBufferRange(GLenum target, GLuint index, WebGLBuffer? buffer, GLintptr offset, GLsizeiptr size) OpenGL ES 3.0.6 §2.10.1.1man ページ
buffer がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

offset および size によって表される WebGLBuffer オブジェクト buffer の範囲を、 target によって指定される targets の配列の index にある binding point へバインドする。
sequence<GLuint>? getUniformIndices(WebGLProgram program, sequence<DOMString> uniformNames) OpenGL ES 3.0.6 §2.12.6man ページ
program がこのものとは異なる WebGL2RenderingContext によって生成された場合、 INVALID_OPERATION エラーを生成する。

program 内の複数の uniforms の indices を取得する。

この関数の実行中に OpenGL エラーが生成された場合、null を返す。
any getActiveUniforms(WebGLProgram program, sequence<GLuint> uniformIndices, GLenum pname) OpenGL ES 3.0.6 §2.12.6man ページ
program がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

uniformIndices の配列で indices が指定された program 内の各 uniforms について、pname という名前の parameter の値を問い合わせる。返される型は、次の表に示されるように、要求された pname に対する自然な型である。
pname 返される型
UNIFORM_TYPE sequence<GLenum>
UNIFORM_SIZE sequence<GLuint>
UNIFORM_BLOCK_INDEX sequence<GLint>
UNIFORM_OFFSET sequence<GLint>
UNIFORM_ARRAY_STRIDE sequence<GLint>
UNIFORM_MATRIX_STRIDE sequence<GLint>
UNIFORM_IS_ROW_MAJOR sequence<GLboolean>

pname が上の表にない場合、INVALID_ENUM エラーを生成する。

この関数の実行中に OpenGL エラーが生成された場合、null を返す。

GLuint getUniformBlockIndex(WebGLProgram program, DOMString uniformBlockName) OpenGL ES 3.0.6 §2.12.6man ページ
program がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

program 内の uniform block の index を取得する。
any getActiveUniformBlockParameter(WebGLProgram program, GLuint uniformBlockIndex, GLenum pname) OpenGL ES 3.0.6 §2.12.6man ページ
program がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

program 内の active uniform block に関する情報を取得する。 返される型は、次の表に示されるように、要求された pname に対する自然な型である。
pname 返される型
UNIFORM_BLOCK_BINDING GLuint
UNIFORM_BLOCK_DATA_SIZE GLuint
UNIFORM_BLOCK_ACTIVE_UNIFORMS GLuint
UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES Uint32Array
UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER GLboolean
UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER GLboolean

pname が上の表にない場合、INVALID_ENUM エラーを生成する。

uniformBlockIndexprogram の active block uniform でない場合、または ACTIVE_UNIFORM_BLOCKS の値以上である場合、INVALID_VALUE エラーを生成する。

OpenGL エラーが生成された場合、null を返す。

DOMString? getActiveUniformBlockName(WebGLProgram program, GLuint uniformBlockIndex) OpenGL ES 3.0.6 §2.12.6man ページ
program がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

program 内の uniformBlockIndex にある active uniform block の名前を取得する。
void uniformBlockBinding(WebGLProgram program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) OpenGL ES 3.0.6 §2.12.6.5man ページ
program がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

active uniform blocks に対する binding points を割り当てる。

Vertex Array オブジェクト

Vertex Array オブジェクト(VAO と呼ばれることもある)は、vertex processor によって使用される データの定義に関連するすべての状態をカプセル化する。

デフォルト Vertex Array オブジェクトが存在し、null WebGLVertexArrayObject handle によって表される。 context の初期状態では、デフォルトオブジェクトがバインドされている。 バインドされているとき、getParameter(VERTEX_ARRAY_BINDING)null を返す。

void bindVertexArray(WebGLVertexArrayObject? vertexArray) OpenGL ES 3.0.6 §2.11man ページ
vertexArray がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

指定された WebGLVertexArrayObject オブジェクトをバインドする。 vertexArray が null の場合、context によって提供される デフォルト vertex array がバインドされる。 削除された vertex array をバインドしようとすると INVALID_OPERATION エラーが生成され、 現在のバインディングは変更されないままとなる。
WebGLVertexArrayObject createVertexArray() OpenGL ES 3.0.6 §2.11glGenVertexArrays と同様)
glGenVertexArrays を呼び出したかのように、WebGLVertexArrayObject オブジェクトを作成し、vertex array オブジェクト名で初期化する。
void deleteVertexArray(WebGLVertexArrayObject? vertexArray) OpenGL ES 3.0.6 §2.11glDeleteVertexArrays と同様)
vertexArray がこのものとは異なる WebGL2RenderingContext によって 生成された場合、INVALID_OPERATION エラーを生成する。

glDeleteVertexArrays を呼び出したかのように、渡された WebGLVertexArrayObject に含まれる vertex array オブジェクトを 削除対象としてマークする。オブジェクトがすでに削除対象としてマークされている場合、この呼び出しは 効果を持たない。基盤となる GL オブジェクトは JS オブジェクトが破棄されると自動的に 削除対象としてマークされるが、このメソッドは著者がオブジェクトを早期に削除対象として マークすることを可能にする。
[WebGLHandlesContextLoss] GLboolean isVertexArray(WebGLVertexArrayObject? vertexArray) OpenGL ES 3.0.6 §6.1.10man ページ
渡された WebGLVertexArrayObject が有効である場合は true を返し、 そうでない場合は false を返す。

vertex array がこのものとは異なる WebGL2RenderingContext によって生成された場合、 false を返す。

vertex array の invalidated flag が設定されている場合、false を返す。

WebGL 2.0 と WebGL 1.0 のその他の相違点

WebGL 2.0 向けの更新が必要

後方非互換性

エラー

WebGL 2.0 API は、WebGL 1.0 API がエラーを生成する場合に、異なる振る舞いをすることがある。 WebGL 1.0 API 向けに書かれ、エラーを生成するコードは、WebGL 2.0 と前方互換であることは 保証されない。

拡張

WebGL 1.0 API でサポートされていた可能性のある一部の拡張は、WebGL 2.0 API から削除されている。詳細については、 WebGL Extension Registry を参照。

拡張は通常、同等の機能が WebGL 2.0 API において中核仕様または改善された拡張のどちらかで 利用可能な場合にのみ削除される。WebGL 1.0 拡張を使用するアプリケーションを WebGL 2.0 API 上で 動作するように修正する場合、昇格した各拡張について、適切な WebGL 2.0 API 関数への呼び出しへ 単にリダイレクトする dummy extension オブジェクトを作成できることが多い。アプリケーションが shader language extensions を使用している場合、shaders を GLSL ES 3.00 へ移植することが通常必要である。

非 2 のべき乗 Texture アクセス

Texture アクセスは、WebGL 2.0 API では OpenGL ES 3.0 API と同様に機能する。言い換えると、 WebGL 1.0 API とは異なり、非 2 のべき乗 textures に特別な制限はない。すべての mipmapping およびすべての wrapping modes は、非 2 のべき乗 images についてサポートされる。

Primitive Restart は常に有効

PRIMITIVE_RESTART_FIXED_INDEX は常に有効である節を参照。

Framebuffer オブジェクトの Attachments

WebGL 1.0 では、DEPTH_STENCIL_ATTACHMENTDEPTH_ATTACHMENT および STENCIL_ATTACHMENT 以外の代替 attachment point である。 しかし WebGL 2.0 では、DEPTH_STENCIL_ATTACHMENTDEPTH_ATTACHMENT + STENCIL_ATTACHMENT の alias とみなされる。すなわち、同じ image が DEPTH_ATTACHMENTSTENCIL_ATTACHMENT の両方にアタッチされ、 2 つの attachment points にアタッチされていた元の images を上書きする。

次の一連の操作を考える:

  1. renderbuffer 1 を DEPTH_ATTACHMENT にアタッチする;
  2. renderbuffer 2 を DEPTH_STENCIL_ATTACHMENT にアタッチする;
  3. nullDEPTH_STENCIL_ATTACHMENT にアタッチする。
WebGL 1.0 では、framebuffer は最終的に renderbuffer 1 が DEPTH_ATTACHMENT にアタッチされ、 STENCIL_ATTACHMENT には image がアタッチされない状態になる。一方 WebGL 2.0 では、 DEPTH_ATTACHMENT にも STENCIL_ATTACHMENT にも image はアタッチされない。

Framebuffer オブジェクトの Attachmentsで定義される制約は、 WebGL 2.0 ではもはや適用されない。

異なる images が depth および stencil attachment points にバインドされている場合、 checkFramebufferStatusFRAMEBUFFER_UNSUPPORTED を返し、 attachmentDEPTH_STENCIL_ATTACHMENT である getFramebufferAttachmentParameterINVALID_OPERATION エラーを生成する。

TexSubImage2D 呼び出しにおける Texture Type

WebGL 1.0 API では、texSubImage2D に渡される type 引数は、 texture オブジェクトを最初に定義するために使用された型(すなわち texImage2D で使用された型)と 一致しなければならない。WebGL 2.0 API では、この制限は解除されている。

copyTexSubImage2D および readPixels 呼び出しにおける範囲外の振る舞い

WebGL 1.0 の Framebuffer の外側のピクセルの読み取りでは、 copyTexSubImage2D および readPixels が、範囲外のピクセルに対する 対応する destination range に触れてはならないことが要求される。

WebGL 2.0 では、PACK_BUFFER オブジェクトがバインドされており、 PACK_ROW_LENGTH がゼロでなく width より小さい場合、または UNPACK_BUFFER オブジェクトがバインドされており、 UNPACK_ROW_LENGTH がゼロでなく width より小さい場合、または UNPACK_IMAGE_HEIGHT がゼロでなく height より小さい場合、 row/image の packing/unpacking は次の row/image まで及ぶことがある。その部分が範囲外である場合、 値はそれに応じて変化することがある。

copyTex{Sub}Image2D における色変換

WebGL 1.0(OpenGL ES 2.0)では、internalformat の component sizes が、 source buffer の internal format の対応する component sizes より小さいことが許可される。 しかし WebGL 2.0(OpenGL ES 3.0)では、internalformat が sized である場合、 その component sizes は source buffer の effective internal format の対応する component sizes と 正確に一致しなければならない。

WebGL 1.0 と 2.0 の両方において、source buffer components は internalformat への 変換中に削除されてもよいが、新しい components を追加することはできない。

FRAMEBUFFER_ATTACHMENT_OBJECT_NAME を指定した getFramebufferAttachmentParameter

pname FRAMEBUFFER_ATTACHMENT_OBJECT_NAME を指定して getFramebufferAttachmentParameter が呼び出され、attachment に image が アタッチされていない場合、WebGL 1.0 / ES 2.0 では INVALID_OPERATION が生成される。 WebGL 2.0 / ES 3.0 では、エラーは生成されず、null が返される。

WebGL 2.0 API でサポートされる新機能

GLSL ES 3.00 サポート

The OpenGL ES Shading Language, Version 1.00 をサポートすることに加えて、WebGL 2.0 API は The OpenGL ES Shading Language, Version 3.00 [GLES30GLSL] で書かれた shaders も、いくつかの制限付きで受け入れる。

WebGL 1.0 API と同様に、"webgl_" および "_webgl_" で始まる identifiers は WebGL による使用のために 予約されている。これらの prefixes で始まる function、variable、structure name、または structure field を 宣言する shader は、load を許可されてはならない。

最大 GLSL Token サイズ

WebGL 1.0 は長さ 256 文字までの tokens をサポートする。WebGL 2.0 は The OpenGL ES Shading Language, Version 3.00 OpenGL ES 3.0.6 §1.5.1 に従い、ESSL 1 および ESSL 3 shaders の両方について、長さ 1024 文字までの tokens を許可する。 1024 文字より長い tokens を含む shaders は compile に失敗しなければならない。

Uniform および Attribute Location の最大長

WebGL 2.0 は、uniform および attribute locations の長さに 1024 文字の制限を課す。

Vertex Attribute Divisor

WebGL 2.0 API では、非ゼロの divisor を持つ vertex attributes は drawArrays および drawElements の呼び出し中には進まない。 OpenGL ES 3.0.6 §2.9.3

WebGL と OpenGL ES 3.0 の相違点

この節は、さまざまな operating systems および devices 間の移植性を改善するために、 OpenGL ES 3.0 API に対して WebGL API に加えられた変更について記述する。

Buffer オブジェクトのバインディング

WebGL buffer type この型を設定する binding points
undefined none
element array ELEMENT_ARRAY_BUFFER
other data ELEMENT_ARRAY_BUFFER、COPY_READ_BUFFER および COPY_WRITE_BUFFER を除くすべての binding points

WebGL 2.0 API では、buffers の WebGL buffer type は初期状態で undefined に設定される。 target 引数を COPY_READ_BUFFER または COPY_WRITE_BUFFER 以外の 任意の buffer binding point に設定して bindBufferbindBufferRange または bindBufferBase を呼び出すと、バインドされる buffer の WebGL buffer type は 上の表に従って設定される。型が undefined の buffer を COPY_READ_BUFFER または COPY_WRITE_BUFFER binding points にバインドすると、その型は other data に設定される。

これらの関数のいずれかを呼び出し、削除された buffer をバインドしようとする場合、 INVALID_OPERATION エラーを生成し、バインディングは変更されないままとなる。

element array WebGL buffer type を持つ WebGLBuffer を other data に分類される binding point へバインドしようとする、または other data WebGL buffer type を持つ WebGLBuffer を ELEMENT_ARRAY_BUFFER へバインドしようとするこれらの関数の呼び出しは、 INVALID_OPERATION エラーを生成し、binding point の状態は変更されないままとなる。

この制限は、指定された buffer オブジェクトが indices または other data のどちらか一方を含み得るが、 両方は含めないことを意味する。

これらの制限は、WebGL 1.0 仕様の buffer object binding restrictions と似ている。

この制限は、GPU 上で index buffers へ書き込むことを防ぐために追加された。そうでなければ、 index data に対して CPU 側のチェックを行うことが非常に高コストになる。index buffers を他の buffer data と異なるものとして扱うことは、Direct3D API にもよりよく対応する。

Buffers のコピー

Buffer オブジェクトのバインディング節で指定されるように、 element array および other data WebGL buffer types を持つ buffers 間で copyBufferSubData を使用してコピーしようとすると、 INVALID_OPERATION エラーが生成され、コピーは実行されない。

上記の Buffer オブジェクトのバインディング制限と同じである。

Transform Feedback による未定義の振る舞いの防止

現在バインドされている transform feedback オブジェクト内の indexed TRANSFORM_FEEDBACK_BUFFER binding point と、generic TRANSFORM_FEEDBACK_BUFFER binding point を除く WebGL API 内の その他の任意の binding point に同時にバインドされている buffer は使用できない。そのような 二重にバインドされた buffer を使用しようとする試みは、transform feedback が有効かどうかにかかわらず、 INVALID_OPERATION エラーで失敗する。たとえば、PIXEL_PACK_BUFFER への readPixels は、 その buffer が現在の transform feedback オブジェクトにもバインドされている場合に失敗する。

エラーが生成されなければ、読み書きされる値は未定義になる。 OpenGL ES 3.0.6 §2.15.2

同じ buffer が active transform feedback 内の複数の indexed binding point にバインドされている場合、 beginTransformFeedbackINVALID_OPERATION エラーを生成する。

これは SEPARATE_ATTRIBS mode でのみ発生し得る。
これは D3D11 由来の制限であり、2 つの異なる streams を同じ buffer に書き込むことは許可されていない。

Draw Buffers

MAX_COLOR_ATTACHMENTS parameter の値は、MAX_DRAW_BUFFERS parameter の値と等しくなければならない。

これらの parameters が異なることに対する use case は存在しない。

ESSL1 fragment shader が gl_FragColor にも gl_FragData にも書き込まない場合、 shader 実行後の fragment colors の値は変更されない。対応する output variables が ESSL3 fragment shader で定義されていない場合、shader 実行後の fragment colors の値は変更されない。

すべての user-defined output variables は、shader 実行中に書き込まれない場合、デフォルトでゼロになる。

最適な性能のため、output array はアクセスされない elements を含むべきではない。

draw buffer は、次の場合に fragment shader と "shader-output-incompatible" である:

draw buffers のいずれかが "shader-output-incompatible" である場合、draws は次の場合に INVALID_OPERATION を生成する:

Program Binaries なし

compiled shader programs の binary representations へのアクセスは WebGL 2.0 API ではサポートされない。 これには OpenGL ES 3.0 の GetProgramBinaryProgramBinary、および ProgramParameteri entry points が含まれる。加えて、getProgramParameter による program binary length の問い合わせ、および getParameter による program binary formats の 問い合わせも WebGL 2.0 API ではサポートされない。

範囲チェック

WebGL 1.0 仕様の 有効化された Vertex Attributes と範囲チェック節で 指定される範囲チェックに加えて、drawElementsdrawRangeElements または drawElementsInstanced によって参照される indices が MAX_ELEMENT_INDEX parameter より大きい場合、それらがバインドされた buffer の storage 内に収まっていても、 draw call は INVALID_OPERATION エラーを生成する。primitive restart が有効な場合、 primitive restart を引き起こす indices については範囲チェックは実行されない。WebGL 1.0 API で drawArrays について指定される範囲チェックは、WebGL 2.0 API の drawArraysInstanced にも適用される。

OpenGL robustness extensions は、MAX_ELEMENT_INDEX を超える indices が使用された場合に何が起こるかを 指定していないため、それらを driver に渡すことは危険である。MAX_ELEMENT_INDEX が最大 unsigned integer 値と 同じであるプラットフォームでは、この節は効果を持たない。

Active Uniform Block Backing

WebGL 2.0 API では、drawArraysdrawElementsdrawRangeElements またはそれらの instanced variants で描画しようとするとき、 draw command に使用される program 内の active uniform block のいずれかが十分に大きな buffer object によって backing されていない場合、INVALID_OPERATION エラーを生成する。

OpenGL では、uniform block backing が不十分であることが GL interruption または termination を 引き起こすことが許可されている。OpenGL ES 3.0 仕様 section 2.12.6 OpenGL ES 3.0.6 §2.12.6)の "Uniform Buffer Object Bindings" を参照。

デフォルト Framebuffer

WebGL は常にデフォルト framebuffer を持つ。FRAMEBUFFER_UNDEFINED enumerant は WebGL 2.0 API から削除されている。

String Length Queries

WebGL 2.0 API では、ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTHTRANSFORM_FEEDBACK_VARYING_MAX_LENGTHUNIFORM_BLOCK_NAME_LENGTH、および UNIFORM_NAME_LENGTH enumerants が、WebGL 1.0 API で削除された類似の enumerants に加えて削除されている。

無効な Clears

WebGL 2.0 API では、指定された clear value の型と、クリアされる buffer の型との間に不一致がある状態で clear を実行しようとすると、未定義の結果を生成する代わりに INVALID_OPERATION エラーを生成する。

無効な Texture Offsets

texture lookup function arguments 内で、implementation-defined parameters MIN_PROGRAM_TEXEL_OFFSET および MAX_PROGRAM_TEXEL_OFFSET によって 指定される範囲外の texture offset 値を使用しようとする GLSL shader は、 WebGL 2.0 API で compilation に失敗しなければならない。

有効範囲外の offset を使用すると未定義の結果を返すため、許可することはできない。 GLSL ES 仕様によれば offset は constant expression でなければならないため、 正しい範囲に対して値をチェックすることは compile 時に行える。

Texel Fetches

OpenGL ES 3.0 API で未定義の結果を持つ Texel fetches は、WebGL 2.0 API ではゼロ、 または incomplete texture からの texel fetch の場合は texture source color (0, 0, 0, 1) を 返さなければならない。

out-of-range texel fetches の振る舞いは、セキュリティを保証するためにテスト可能である必要がある。

GLSL ES 1.00 Fragment Shader Output

The OpenGL ES Shading Language, Version 1.00 で書かれた fragment shader が、 n が constant value 0 と等しくない gl_FragData[n] に静的に値を 代入する場合、WebGL 2.0 API では compile に失敗しなければならない。これは The OpenGL ES 3.0 specification section 4.2.1 OpenGL ES 3.0.6 §4.2.1 および The OpenGL ES Shading Language 3.00.6 specification section 1.5 GLSL ES 3.00.6 §1.5との一貫性を達成するためである。 OpenGL ES 3.0 API と同様に、WebGL 2.0 API では、multiple fragment shader outputs は GLSL ES 3.00 shaders についてのみサポートされる。

MapBufferRange なし

MapBufferRangeFlushMappedBufferRange、および UnmapBuffer entry points は WebGL 2.0 API から削除されている。次の enum values も削除されている: BUFFER_ACCESS_FLAGSBUFFER_MAP_LENGTHBUFFER_MAP_OFFSETMAP_READ_BITMAP_WRITE_BITMAP_INVALIDATE_RANGE_BITMAP_INVALIDATE_BUFFER_BITMAP_FLUSH_EXPLICIT_BIT、および MAP_UNSYNCHRONIZED_BIT

MapBufferRange を使用する代わりに、buffer data は getBufferSubData entry point を使用して読み取ることができる。

TIMEOUT_IGNORED

WebGL 2.0 API では、TIMEOUT_IGNORED は値 0xFFFFFFFFFFFFFFFF を持つ GLuint64 ではなく、値 -1 を持つ GLint64 として定義される。 これは Javascript がそれほど大きな整数を正確に表現できないためである。同じ理由で、 waitSync は timeout について GLuint64 ではなく GLint64 値を取る。

clientWaitSync

WebGL 2.0 API では、WebGL 実装は main thread の実行を過度に長時間ブロックすることを避けるため、 clientWaitSync の呼び出しに短い maximum timeout を強制しなければならない。この timeout は 引数 MAX_CLIENT_WAIT_TIMEOUT_WEBGL を指定して getParameter を呼び出すことで 問い合わせることができる。

implementation-defined maximum timeout は指定されていない。実装が 0 の maximum timeout を強制することは 許容される。

Vertex Attribute Aliasing

WebGL 2.0 API 実装は、任意の vertex attribute aliasing が許可されないことを指定する GLSL ES 3.00.6 section 12.46 に厳密に従わなければならない。 [GLES30] p57 で述べられているように、GLSL ES 1.00 shaders は WebGL 1.0 仕様の Attribute aliasing 節で許可されるように、依然として alias してもよい。

PRIMITIVE_RESTART_FIXED_INDEX は常に有効である

OpenGL ES 3.0 で Enable/Disable によって制御される PRIMITIVE_RESTART_FIXED_INDEX context state は、WebGL 2.0 ではサポートされない。代わりに、WebGL 2.0 はこの state が常に有効であるかのように振る舞う。 これは WebGL 1.0 と比較した compatibility difference である。

drawElementsdrawElementsInstanced、または drawRangeElements が index を処理する際、その index の値がその data type の最大値 (UNSIGNED_BYTE indices では 255、UNSIGNED_SHORT では 65535、 UNSIGNED_INT では 4294967295)である場合、vertex は通常どおり処理されない。 代わりに、drawing command が直前の vertex で終了し、同じ parameters を持つ別の drawing command が 直ちに開始され、元々指定された indices の直後の index から末尾までのみが転送されるかのように扱われる。

この compatibility difference は、Direct3D ベースの WebGL 実装における性能上の落とし穴を避けるために 導入された。primitive restart の振る舞いが望まれない場合、applications および content creation tools は 最大 vertex index を使用しないように調整できる。

texture swizzles なし

OpenGL ES 3.0 は texture objects 上に、texture に対して 4-channel swizzle operation を指定できる 新しい state を導入する。swizzle は、その texture を参照する任意の shader 内で実行されるすべての texture lookup に適用される。これらの texture swizzles は WebGL 2.0 ではサポートされない。 TEXTURE_SWIZZLE_* enum values は WebGL 2.0 API から削除されている。

Texture swizzles は Direct3D ベースの WebGL 実装で性能よく実装できない。この機能に依存する applications は、それらの実装で著しく低速に動作することになる。applications は、この interface なしでも、 shaders 内で texture fetches の結果を swizzle したり、upload の前に texture data を swizzle したりできる。

link に失敗した program に対する queries は失敗すべきである

OpenGL ES 3.0 は、指定された program が link に失敗していても、applications が active variables および interface blocks の properties を列挙および問い合わせることを許可する OpenGL ES 3.0.6 §2.12.3。 WebGL では、これらの commands は link に失敗した program に対して常に INVALID_OPERATION エラーを生成し、 情報は返されない。

OpenGL ES 3.0 で返される情報は implementation dependent であり、不完全である可能性がある。 この error condition は、すべてのプラットフォームで一貫した振る舞いを確保するために追加される。

fragment shader からの color values は color buffer format と一致しなければならない

fragment shader によって書き込まれる color values は、floating-point、signed integer、または unsigned integer であってよい。fragment shader によって書き込まれる値が、対応する color buffer(s) の format(s) と 一致しない場合、その結果は OpenGL ES 3.0 では未定義である OpenGL ES 3.0.6 §3.9.2.3。WebGL では、対応する draw call において INVALID_OPERATION エラーを生成する。これには drawArraysdrawElementsdrawArraysInstanced drawElementsInstanced 、および drawRangeElements が含まれる。

color buffer が normalized fixed-point format を持つ場合、floating-point color values は その format と一致するように変換される。そのような状況ではエラーは生成されない。

sampler type は internal texture format と一致しなければならない

Texture lookup functions は、lookup function に渡された sampler type に応じて、floating point、 unsigned integer、または signed integer として値を返す。texture access に誤った sampler type が 使用された場合、すなわち sampler type が texture internal format と一致しない場合、返される値は OpenGL ES Shading Language 3.00.6 で未定義である OpenGL ES Shading Language 3.00.6 §8.8。 WebGL では、対応する draw call において INVALID_OPERATION エラーを生成する。 これには drawArraysdrawElementsdrawArraysInstanceddrawElementsInstanced 、および drawRangeElements が含まれる。

sampler type が floating point であり、internal texture format が normalized integer である場合、 それは一致しているとみなされ、返される値は [0, 1] の範囲の floating point に変換される。

Queries の results は current frame で利用可能にされてはならない

OpenGL ES 3.0 では、適切な primitives(例: glFinish() または別の synchronous API)が 呼び出された場合、query の result は、それが発行されたのと同じ frame 内で利用可能にされることがある。 WebGL では、application portability を改善するため、query の result は、その query が発行された 同じ frame 内で application に利用可能にされてはならない。議論および根拠については getQueryParameter の仕様を参照。

GLSL ES 3.00 #extension directive location

WebGL 1.0 仕様の GLSL ES #extension directive location 節は、OpenGL ES Shading Language 1.00 shaders にのみ適用される。OpenGL ES Shading Language 3.00 で書かれた shaders には適用されない。 OpenGL ES Shading Language 3.00 で書かれた shaders では、#extension directives は、 extension specification に何が書かれているかにかかわらず、non-preprocessor tokens より前に 出現しなければならない。

これは WebGL 2.0 が、書かれた GLSL ES 3.00 仕様により厳密に従うようにするために行われる。 native GLES drivers より厳密に制限を強制することで、振る舞いを well-defined にする。

uniform blocks では std140 layout のみがサポートされる

GLSL ES 3.00 仕様は uniform blocks について、variables が uniform buffers の storage 内でどのように 配置されるかを定義する sharedpacked、および std140 layout qualifiers をサポートする。これらのうち、WebGL 2.0 仕様は std140 layout のみを サポートする。これは OpenGL ES 3.0.6 §2.12 "Vertex Shaders" の subsection "Standard Uniform Block Layout" で定義される。shared または packed layout qualifiers を使用しようとする shaders は、compilation または linking stages のどちらかで失敗する。

compilation の初期状態は、次が宣言されているかのようである:

layout(std140) uniform;

この制限は、特定 vendor の GPU に固有の uniform block layouts を公開することを避けることで 移植性を改善するために強制される。

許可されない GLSL ES 3.00 operators の variants

WebGL 2.0 API では、次の shading language constructs は許可されず、それらを使用しようとすると compile error にならなければならない:

この制限は、OpenGL ES 3.0 をサポートする devices 間で容易な移植性を保証する。

checkFramebufferStatus は FRAMEBUFFER_INCOMPLETE_DIMENSIONS を返す場合がある

すべての attached images は同じ width および height を持たなければならない。そうでなければ、 checkFramebufferStatusFRAMEBUFFER_INCOMPLETE_DIMENSIONS を返す。

OpenGL ES 3 では、framebuffer の attached images は framebuffer complete であるために 同じ width および height を持つ必要はなく、FRAMEBUFFER_INCOMPLETE_DIMENSIONScheckFramebufferStatus の有効な return values の 1 つではない。しかし、OpenGL ES 3 の振る舞いが Windows 上でエミュレートされる基盤である Direct3D 11 では、すべての render targets はすべての dimensions で 同じ size を持たなければならない(msdn manual page を参照)。DirectX 11 上で ES3 semantics をエミュレートすることは非効率になる。 プラットフォーム間で一貫した WebGL 2.0 の振る舞いを持つため、すべての attached images が同じ width および height を持たなければならないという OpenGL ES 2 / WebGL 1.0 の制限を WebGL 2.0 でも維持することは妥当である。

Uniform block matching

WebGL 2.0 API では、layout qualifiers row_major および column_major は、 non-matrix variables にのみ適用される場合であっても、matched uniform blocks 内で一致する必要がある。

この uniform block matching rule は、OpenGL ES 3.0 実装間で一貫していないことが知られている。

invalidation 後の Framebuffer contents

OpenGL ES 3.0 では、invalidateFramebuffer または invalidateSubFramebuffer を 呼び出した後、影響を受ける region の contents は実質的に未定義になる。WebGL 2.0 では、contents は 変更されないままであるか、default values にクリアされるかのどちらかであることが要求される。 (例: colors および stencil については 0、depth については 1.0)

WebGL 2.0 実装が invalidateFramebuffer または invalidateSubFramebuffer を no-op にすることは許容される。

texture type FLOAT_32_UNSIGNED_INT_24_8_REV に一致する ArrayBufferView なし

ArrayBufferView を伴う texImage2D および texImage3D において、 typeFLOAT_32_UNSIGNED_INT_24_8_REV であり、srcDatanull でない場合、INVALID_OPERATION を生成する。

ArrayBufferView を伴う texSubImage2D および texSubImage3D において、 typeFLOAT_32_UNSIGNED_INT_24_8_REV である場合、 INVALID_ENUM を生成する。

VertexAttrib 関数は shader attribute 型と一致しなければならない

次の状況のいずれかが true である場合、drawArraysdrawElementsdrawRangeElements またはそれらの instanced variants で描画しようとすると INVALID_OPERATION エラーが生成される:

この未定義の振る舞いは OpenGL ES 3.0 仕様 section 2.8 にある OpenGL ES 3.0.6 §2.8

Transform feedback primitive capture

任意の output variable が buffer object へ stream されるように指定されているが、vertex shader によって 実際には書き込まれない場合、その値は 0 に設定される。

この未定義の振る舞いは OpenGL ES 3.0 仕様 section 2.15.2 にある OpenGL ES 3.0.6 §2.15.2

gl_FragDepth

fragment shader が gl_FragDepth に静的に値を代入する場合、gl_FragDepth に値を代入する statements が実行されない任意の fragment について、値 0 が使用される。

この未定義の振る舞いは OpenGL ES 3.0 仕様 section 3.9.2 にある OpenGL ES 3.0.6 §3.9.2)。

Framebuffer color attachments

image が framebuffer 内の複数の color attachment point にアタッチされている場合、 checkFramebufferStatusFRAMEBUFFER_UNSUPPORTED を返す。 image は、個別の mip level、array slice(2D array または cube map textures のいずれかから)、 または 3D texture slice であり得る。

これは、Windows 上で OpenGL ES 3 の振る舞いがエミュレートされる基盤である Direct3D 11 の制限である。 (msdn manual page を参照)。プラットフォーム間で一貫した WebGL 2.0 の振る舞いを持つため、 WebGL 2.0 でこの制限をすべてのプラットフォームに追加することは妥当である。

TexImageSource からのアップロードのための Pixel store parameters

UNPACK_ALIGNMENT および UNPACK_ROW_LENGTH は無視される。 UNPACK_ALIGNMENT はバイト単位で指定され、TexImageSource オブジェクトについては 暗黙的かつ implementation-dependent である。UNPACK_ROW_LENGTH は現在未使用である。

Subrect selection は UNPACK_ params を使用して可能である。 UNPACK_SKIP_PIXELS および UNPACK_SKIP_ROWS は subrect の origin を決定し、 width および height 引数は subrect の size を決定する。

3D textures については、widthheight、および depth 引数が unpack 先の texel array の矩形 region を指定する。 UNPACK_SKIP_IMAGES および UNPACK_IMAGE_HEIGHT は 2D source から 複数の slices を選択することを可能にする。UNPACK_IMAGE_HEIGHT は 2 つの slices 間の rows 単位の stride を決定する。たとえば、高さ 30 pixels の TexImageSource は、 height を 10、UNPACK_IMAGE_HEIGHT を 20、そして depth を 2 に設定して upload することにより、上部 10 rows と下部 10 rows を 3D texture の 2 つの slices に upload できる。UNPACK_IMAGE_HEIGHT が 0 の場合、 2 つの slices 間の rows 単位の stride はデフォルトで height になる。

幅 20 pixels の HTMLImageElement について、texture upload に width = 10 を 渡すと、image の左半分のみが選択され、それが upload される。結果の texture は width 10 を持つ。 さらにこの例で UNPACK_SKIP_PIXELS が 10 に設定されている場合、image の右半分のみが unpack のために選択される。

また、UNPACK_SKIP_IMAGES は 3D entrypoints にのみ適用され、2D entrypoints には適用されない。

別の例を見ると、上記の 32x48 image は 6 色からなり、それぞれの size は 16x16 であり、 width = 2height = 1、および depth = 3 の 3D texture に upload される。

Pixel store parameter constraints

定義:

PACK_SKIP_PIXELS + width > DataStoreWidth である場合、 readPixelsINVALID_OPERATION エラーを生成する。

UNPACK_SKIP_PIXELS + width > DataStoreWidth である場合、 texImage2D および texSubImage2DINVALID_OPERATION エラーを生成する。これは、 PIXEL_UNPACK_BUFFER がバインドされておらず、srcData が null である場合の texImage2D には適用されない。

UNPACK_SKIP_PIXELS + width > DataStoreWidth または UNPACK_SKIP_ROWS + height > DataStoreHeight である場合、 texImage3D および texSubImage3DINVALID_OPERATION エラーを 生成する。これは、PIXEL_UNPACK_BUFFER がバインドされておらず、 srcData が null である場合の texImage3D には適用されない。

これらの制約は、pixels が格納される sub region を指定するためのこれらの parameters の使用を 正規化する。たとえば readPixels の場合、entire data store の sub area に pixels を格納したいなら、PACK_ROW_LENGTH を使用して data store width を指定し、 PACK_SKIP_PIXELSPACK_SKIP_ROWSwidth および height を使用して subarea の xoffset、yoffset、width、および height を 指定できる。

これらの contraints は row および image overlap も禁止する。そうした状況は OpenGL ES 3.0 DEQP test suites でテストされておらず、多くの drivers は誤って振る舞う。また、random pixels や rows をスキップすることも禁止するが、それは data store offset を適宜調整することで実現できる。

さらに、TexImageSource からの uploads については、暗黙の UNPACK_ROW_LENGTH および UNPACK_ALIGNMENT は厳密には定義されていない。 これらの制限は、暗黙の UNPACK_ params にかかわらず、一貫した効率的な振る舞いを保証する。

UNPACK_FLIP_Y_WEBGL または UNPACK_PREMULTIPLY_ALPHA_WEBGL が true に設定されている場合、 texImage2D および texSubImage2D は、 PIXEL_UNPACK_BUFFER から data を upload するなら INVALID_OPERATION エラーを 生成する。

UNPACK_FLIP_Y_WEBGL または UNPACK_PREMULTIPLY_ALPHA_WEBGL が true に設定されている場合、 texImage3D および texSubImage3D は、 PIXEL_UNPACK_BUFFER または non-null client side ArrayBufferView から data を upload するなら INVALID_OPERATION エラーを生成する。

ETC2 および EAC compressed texture formats なし

OpenGL ES 3.0 は、次の ETC2 および EAC compressed texture formats のサポートを要求する: COMPRESSED_R11_EAC、COMPRESSED_SIGNED_R11_EAC、COMPRESSED_RG11_EAC、 COMPRESSED_SIGNED_RG11_EAC、COMPRESSED_RGB8_ETC2、COMPRESSED_SRGB8_ETC2、 COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2、COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2、 COMPRESSED_RGBA8_ETC2_EAC、および COMPRESSED_SRGB8_ALPHA8_ETC2_EAC。

これらの texture formats は、WebGL 2.0 ではデフォルトではサポートされない。

これらの formats は、ほとんどの desktop GPU hardware で native にサポートされていない。 そのため、これらの formats をサポートするには、WebGL 実装または基盤となる driver のどちらかで software decompression が必要になる。これは video memory usage の大幅な増加をもたらし、 WebGL application からは見えない performance losses を引き起こす。

ETC2 および EAC compressed texture formats を native にサポートする hardware (例: mobile OpenGL ES 3.0+ hardware)では、それらは extension WEBGL_compressed_texture_etc を介して公開されてもよい。

UNIFORM_BUFFER_OFFSET_ALIGNMENT の値は 4 で割り切れなければならない

basic machine units で与えられる UNIFORM_BUFFER_OFFSET_ALIGNMENT の値は、 4 で割り切れなければならない。

UNIFORM_BUFFER_OFFSET_ALIGNMENT の値が 4 で割り切れない場合、BindBufferRange でバインドされた uniform buffers へ ArrayBuffers を upload することが非現実的になる。

Sync objects の results は current frame で利用可能にされてはならない

OpenGL ES 3.0 では、適切な primitives(例: glFinish() または別の synchronous API)が呼び出された場合、sync object は、それが発行されたのと同じ frame 内で signaled になることがある。WebGL では、application portability を改善するため、sync object は その sync が発行されたのと同じ frame 内で signaled state へ遷移してはならない。議論および根拠については getSyncParameter および clientWaitSync の仕様を参照。

blitFramebuffer rectangle width/height limitations

blitFramebuffer() の src* および dst* parameters は、結果として生じる source および destination rectangles の width および height が GLint に格納できる最大値以下になるように 設定されなければならない。width または height の値のいずれかを GLint として計算した結果 integer overflow が発生する場合、blitFramebuffer()INVALID_VALUE エラーを生成する。

blitFramebuffer に対して最大 32-bit int より大きい sized rectangles を使用すると、 ほとんどの desktop OpenGL drivers で問題を引き起こし、blitFramebuffer が framebuffer を scale するために使用される場合に対する一般的な回避策は存在しない。

GenerateMipmap は正の image dimensions を要求する

generateMipmap は TEXTURE_BASE_LEVEL の dimensions がすべて正であることを要求する。

GLES 3.0.6 は技術的には 0x0 images に対して GenerateMipmap を呼び出すことを許可するが、 cubemaps は cube-complete でなければならないため、正の dimensions を持つ必要がある。
この変更は、non-mipmap-sampled validation のためにそれ以外では必要となる、textures の base-level-completeness の概念を可能にすることで実装を単純化する。GenerateMipmap は 0x0 texture に 効果を持たず、WebGL 1 では違法(0 は 2 のべき乗ではない)であるため、これは追加しやすい制限である。 さらに、GenerateMipmap はそうでなければ、undefined texture images 上で動作しなければならない唯一の entrypoint となり、通常必要な validation を回避することになる。

deleteQuery は query が active の場合、暗黙的に endQuery を呼び出す

GLES では、DeleteQueries は queries が active であっても、暗黙的にそれらを終了しない。

この逸脱は当初指定されていなかったが、conformance tests により browsers 間で暗黙的に標準化された。 一部の実装は、この振る舞いの方が実装しやすいと判断した。この振る舞いを GLES specs に合わせて 戻すと content を壊す可能性があり、この時点では実装したものを仕様化する方がよい。

必須 compressed texture formats

実装は、少なくとも 1 つの compressed texture formats の suite をサポートしなければならない。


実装は次をサポートしなければならない:

ecosystem を最適にサポートするため、実装には ETC2/EAC formats(GLES3 または類似の drivers、 多くの phones などで universal)または S3TC formats(その他すべての drivers で universal)の どちらかをサポートすることを要求する。これにより著者は、わずか 2 つの異なる formats のサポートを 維持しながら、すべての devices で compressed textures(srgb variants を含む)を常に使用できることが 保証される。

各 suite には、次の用途についておおよそ同等の formats が存在する:

用途 S3TC/RGTC option(desktop) ETC2/EAC option(mobile)
R11 unsigned COMPRESSED_RED_RGTC1_EXT COMPRESSED_R11_EAC
R11 signed COMPRESSED_SIGNED_RED_RGTC1_EXT COMPRESSED_SIGNED_R11_EAC
RG11 unsigned COMPRESSED_RED_GREEN_RGTC2_EXT COMPRESSED_RG11_EAC
RG11 signed COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT COMPRESSED_SIGNED_RG11_EAC
RGB8 unsigned COMPRESSED_RGB_S3TC_DXT1_EXT COMPRESSED_RGB8_ETC2
RGB8 sRGB COMPRESSED_SRGB_S3TC_DXT1_EXT COMPRESSED_SRGB8_ETC2
RGB8 punchthrough unsigned COMPRESSED_RGBA_S3TC_DXT1_EXT COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
RGB8 punchthrough sRGB COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
RGBA8 unsigned COMPRESSED_RGBA_S3TC_DXT5_EXT COMPRESSED_RGBA8_ETC2_EAC
RGBA8 sRGB COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT COMPRESSED_SRGB8_ALPHA8_ETC2_EAC

例: sampler2DShadow は、例として LINEAR filtering を保証しない

TEXTURE_COMPARE_MODE が COMPARE_REF_TO_TEXTURE に設定されている場合、texture は必要な extensions なしで LINEAR filtering を使用していても常に complete である。しかし、LINEAR filtering が 行われるかどうかは implementation-defined である。(実装は代わりに NEAREST sampling を行ってもよい)

この機能は GLES では十分に指定されていない。一般的ではあるが普遍的ではない。 ここでは寛容であることを選ぶが、実装はこの機能の要求に対して警告してもよい。

Clamped Constant Blend Color

実装は、基盤となるプラットフォームが同じことを行う場合、store 時に constant blend color を clamp してもよい。applications は BLEND_COLOR parameter を問い合わせて effective behavior を確認してもよい。

Generic TRANSFORM_FEEDBACK_BUFFER state location

TRANSFORM_FEEDBACK_BUFFER generic buffer binding point は、per-object state ではなく context state へ移動された。

同様の変更は OpenGL ES 3.2 でも行われた。

未初期化の Compressed Textures

OpenGL ES 2.0 では、仕様は未初期化 data を持つ compressed 2D texture を作成できるべきかどうかを 宣言していなかった。WebGL 1.0 では、これは明示的に許可されない。

OpenGL ES 3.0 では、glCompressedTexImage2Dnull を渡すことにより、 未初期化 data を持つ compressed 2D texture を作成することが明示的に許可されている。 しかし WebGL 2.0 では、これは依然として明示的に許可されない。ユーザーは compressed internal format を 持つ texStorage2D を使用して、ゼロ初期化された compressed textures を割り当てることができる。 ただし、これらの textures は immutable であり、compressedTexImage2D によって 割り当てられる textures とは完全には互換性がない。

参照

[WEBGL10]
WebGL Specification 1.0.4 Editor's Draft, Dean Jackson, Jeff Gilbert.
[CANVAS]
HTML5: The Canvas Element, World Wide Web Consortium (W3C).
[OFFSCREENCANVAS]
HTML Living Standard - The OffscreenCanvas interface, WHATWG.
[CANVASCONTEXTS]
Canvas Context Registry, WHATWG.
[GLES30]
OpenGL® ES Version 3.0.6, J. Leech, B. Lipchak, August 2019.
[GLES30GLSL]
The OpenGL® ES Shading Language Version 3.00.6, R. Simpson, January 2016.
[REGISTRY]
WebGL Extension Registry
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels, S. Bradner. IETF, March 1997.
[WEBIDL]
Web IDL - Living Standard, E. Chen, T. Gu, B. Zbarsky, C. McCormack, T. Langel.