これは 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 の相違点の節で要約される。
次の 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]
に対して新しいオブジェクトを返すことになっている場合、ユーザーエージェントは次の手順を
実行しなければならない。
WebGL2RenderingContext オブジェクト context を作成する。
getContext() メソッドが関連付けられている canvas または offscreen
canvas とする。
WebGLContextAttributes オブジェクト contextAttributes を作成する。
getContext() が第 2 引数 options で呼び出された場合、
contextAttributes の属性を options で指定されたものから設定する。
WebGLContextAttributes オブジェクト actualAttributes を作成する。
WebGL 1.0 と異なり、WebGL 2.0 の depth、stencil、および
antialias 属性は、WebGL 実装によって遵守されなければならない。
この節は、上で記述された機能への実行時アクセスをサポートするために DOM に追加されるインターフェイスおよび機能について記述する。
次の型は WebGL 2.0 で導入される。
typedef long long GLint64; typedef unsigned long long GLuint64;
WebGLQuery インターフェイスは OpenGL Query Object を表す。
基盤となるオブジェクトは glGenQueries を呼び出したかのように作成され
(OpenGL
ES 3.0.6 §2.14、
man
ページ)
、
glBeginQuery を呼び出したかのようにアクティブ化され
(OpenGL
ES 3.0.6 §2.14、
man
ページ)
、
glEndQuery を呼び出したかのように終了され
(OpenGL
ES 3.0.6 §2.14、
man
ページ)
そして glDeleteQueries を呼び出したかのように破棄される
(OpenGL
ES 3.0.6 §2.14、
man
ページ)
。
[Exposed=(Window,Worker)]
interface WebGLQuery : WebGLObject {
};
WebGLSampler インターフェイスは OpenGL Sampler Object を表す。
基盤となるオブジェクトは glGenSamplers を呼び出したかのように作成され
(OpenGL
ES 3.0.6 §3.8.2、
man
ページ)
、
glBindSampler を呼び出したかのようにバインドされ
(OpenGL
ES 3.0.6 §3.8.2、
man
ページ)
そして glDeleteSamplers を呼び出したかのように破棄される
(OpenGL
ES 3.0.6 §3.8.2、
man page)
。
[Exposed=(Window,Worker)]
interface WebGLSampler : WebGLObject {
};
WebGLSync インターフェイスは OpenGL Sync Object を表す。
基盤となるオブジェクトは glFenceSync を呼び出したかのように作成され
(OpenGL
ES 3.0.6 §5.2、
man
ページ)
、
glClientWaitSync を呼び出したかのようにブロックされ
(OpenGL
ES 3.0.6 §5.2.1、
man page)
、
glWaitSync を呼び出したかのように GL 内部で待機され
(OpenGL
ES 3.0.6 §5.2.1、
man
ページ)
、
glGetSynciv を呼び出したかのように問い合わせられ
(OpenGL
ES 3.0.6 §6.1.8、
man
ページ)
、
そして glDeleteSync を呼び出したかのように破棄される
(OpenGL
ES 3.0.6 §5.2、
man
ページ)
。
[Exposed=(Window,Worker)]
interface WebGLSync : WebGLObject {
};
WebGLTransformFeedback インターフェイスは OpenGL Transform Feedback Object を表す。
基盤となるオブジェクトは glGenTransformFeedbacks を呼び出したかのように作成され
(OpenGL
ES 3.0.6 §2.15.1、
man page)
、
glBindTransformFeedback を呼び出したかのようにバインドされ
(OpenGL
ES 3.0.6 §2.15.1、
man page)
そして glDeleteTransformFeedbacks を呼び出したかのように破棄される
(OpenGL
ES 3.0.6 §2.15.1、
man
ページ)
。
[Exposed=(Window,Worker)]
interface WebGLTransformFeedback : WebGLObject {
};
WebGLVertexArrayObject インターフェイスは OpenGL Vertex Array Object を表す。
基盤となるオブジェクトは glGenVertexArrays を呼び出したかのように作成され
(OpenGL
ES 3.0.6 §2.10、
man page)
、
glBindVertexArray を呼び出したかのようにバインドされ
(OpenGL
ES 3.0.6 §2.10、
man page)
そして glDeleteVertexArrays を呼び出したかのように破棄される
(OpenGL
ES 3.0.6 §2.10、
man page)
。
[Exposed=(Window,Worker)]
interface WebGLVertexArrayObject : WebGLObject {
};
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;
| 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 エラーを生成する。
| target |
|---|
| FRAMEBUFFER |
| READ_FRAMEBUFFER |
| DRAW_FRAMEBUFFER |
target が上の表にない場合、INVALID_ENUM エラーを生成する。
| target |
|---|
| TEXTURE_2D |
| TEXTURE_3D |
| TEXTURE_2D_ARRAY |
| TEXTURE_CUBE_MAP |
target が上の表にない場合、INVALID_ENUM エラーを生成する。
| 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_BITS、GREEN_BITS、BLUE_BITS、および
ALPHA_BITS について、draw framebuffer の active color attachments が
同一の形式を持たない場合、INVALID_OPERATION エラーを生成し、0 を返す。
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 を返す。
cap 値に加えて、
RASTERIZER_DISCARD がサポートされる。
| 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 |
srcData の sub-region を buffer オブジェクトへコピーする。
buf を target にバインドされた buffer とする。
length が 0 の場合:
srcData が DataView である場合、copyLength を
srcData.byteLength - srcOffset とする。下のテキストにおける typed elements はバイトである。
copyLength を srcData.length - srcOffset とする。
copyLength を length とする。
srcData が DataView である場合、buf のサイズを
copyLength に設定する。そうでなければ、buf のサイズを
copyLength * srcData.BYTES_PER_ELEMENT に設定する。
srcData が DataView である場合、elementSize を 1 とする。
そうでなければ、elementSize を srcData.BYTES_PER_ELEMENT とする。
copyLength が 0 より大きい場合、srcData から buf へ
copyLength 個の typed elements(各サイズは elementSize)をコピーし、
要素インデックス srcOffset から srcData を読み取る。
copyLength が 0 の場合、buf へデータは書き込まれないが、
これは GL エラーの生成を引き起こさない。
target に WebGLBuffer がバインドされていない場合、
INVALID_OPERATION エラーを生成する。
srcOffset が srcData.length(または
DataView については srcData.byteLength)より大きい場合、
INVALID_VALUE エラーを生成する。
srcOffset + copyLength が srcData.length(または
DataView については srcData.byteLength)より大きい場合、
INVALID_VALUE エラーを生成する。
buf のサイズは変更されず、データも書き込まれない。
srcData の sub-region を、現在バインドされている WebGLBuffer オブジェクトへコピーする。
buf を target にバインドされた buffer とする。
length が 0 の場合:
srcData が DataView である場合、copyLength を
srcData.byteLength - srcOffset とする。下のテキストにおける typed elements はバイトである。
copyLength を srcData.length - srcOffset とする。
copyLength を length とする。
srcData が DataView である場合、copyByteLength を
copyLength とする。そうでなければ、copyByteLength を
copyLength * srcData.BYTES_PER_ELEMENT とする。
srcData が DataView である場合、elementSize を 1 とする。
そうでなければ、elementSize を srcData.BYTES_PER_ELEMENT とする。
copyLength が 0 より大きい場合、srcData から buf へ
copyLength 個の typed elements(各サイズは elementSize)をコピーし、
要素インデックス srcOffset から srcData を読み取り、
バイトオフセット dstByteOffset から buf に書き込む。
copyLength が 0 の場合、buf へデータは書き込まれないが、
これは GL エラーの生成を引き起こさない。
target に WebGLBuffer がバインドされていない場合、
INVALID_OPERATION エラーを生成する。
dstByteOffset が 0 より小さい場合、INVALID_VALUE エラーを生成する。
dstByteOffset + copyByteLength が buf のサイズより大きい場合、
INVALID_VALUE エラーを生成する。
srcOffset が srcData.length(または
DataView については srcData.byteLength)より大きい場合、
INVALID_VALUE エラーを生成する。
srcOffset + copyLength が srcData.length(または
DataView については srcData.byteLength)より大きい場合、
INVALID_VALUE エラーを生成する。
buf へデータは書き込まれない。
void copyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) (OpenGL ES 3.0.6 §2.10.5、 man ページ)
undefined getBufferSubData(GLenum target, GLintptr srcByteOffset, [AllowShared] ArrayBufferView dstBuffer, optional unsigned long long dstOffset = 0, optional GLuint length = 0)
dstBuffer へデータを読み戻す。
buf を target にバインドされた buffer とする。
length が 0 の場合:
dstBuffer が DataView である場合、copyLength を
dstBuffer.byteLength - dstOffset とする。下のテキストにおける typed elements はバイトである。
copyLength を dstBuffer.length - dstOffset とする。
copyLength を length とする。
dstBuffer が DataView である場合、copyByteLength を
copyLength とする。そうでなければ、copyByteLength を
copyLength * dstBuffer.BYTES_PER_ELEMENT とする。
dstBuffer が DataView である場合、elementSize を 1 とする。
そうでなければ、elementSize を dstBuffer.BYTES_PER_ELEMENT とする。
copyLength が 0 より大きい場合、
buf から dstBuffer へ
copyLength 個の typed elements(各サイズは elementSize)をコピーし、
バイトインデックス srcByteOffset から buf を読み取り、
要素インデックス dstOffset から dstBuffer に書き込む。
copyLength が 0 の場合、dstBuffer へデータは書き込まれないが、
これは GL エラーの生成を引き起こさない。
target に WebGLBuffer がバインドされていない場合、
INVALID_OPERATION エラーを生成する。
target が TRANSFORM_FEEDBACK_BUFFER であり、
かつ任意の transform feedback オブジェクトが現在 active である場合、
INVALID_OPERATION エラーを生成する。
dstOffset が dstBuffer.length
(または DataView の場合は dstBuffer.byteLength)より大きい場合、
INVALID_VALUE エラーを生成する。
dstOffset + copyLength が dstBuffer.length
(または DataView の場合は dstBuffer.byteLength)より大きい場合、
INVALID_VALUE エラーを生成する。
srcByteOffset が 0 より小さい場合、
INVALID_VALUE エラーを生成する。
srcByteOffset + copyByteLength が
buf のサイズより大きい場合、INVALID_OPERATION エラーを生成する。
dstBuffer へデータは書き込まれない。
getBufferSubData によって順番に書き込まれ、読み取られる場合、
データが一貫してアクセスされることを保証するのは WebGL API の責任である。これは、buffer が
現在 transform feedback バインディングポイントにバインドされている場合にも適用される。
これはブロッキング操作である。結果を返すためには、WebGL は source buffer への以前の
すべての書き込みを完全に完了しなければならないためである。
マルチプロセス WebGL 実装では、getBufferSubData は、remote process から
結果を取得するために高コストなプロセス間 round-trip も発生させる可能性がある。
ユーザーは、buffer から読み戻す意図を示すことで、これらのコストを回避できる場合がある。
fenceSync を挿入し、
getBufferSubData 操作を実行する前に、それが通過するのを待つ。
_READ usage hint で
buffers を割り当てる。(_READ usage hints で割り当てられた
buffers は buffer data の shadow copy を維持する際に overhead を発生させる可能性が
あるため、過度の使用は避ける。)
ここでは、WebGL 1.0 の checkFramebufferStatus との差分のみを記述する。
target は DRAW_FRAMEBUFFER、READ_FRAMEBUFFER または
FRAMEBUFFER でなければならない。FRAMEBUFFER は
DRAW_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を参照。
| 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 を返す。
attachment が DEPTH_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.3、 man ページ)
alpha:false で作成された context は internal format RGB8 を持つとみなされ、
alpha:true で作成された context は internal format RGBA8 を持つとみなされる。INVALID_OPERATION エラーが生成される。
void framebufferTextureLayer(GLenum target, GLenum attachment, WebGLTexture? texture, GLint level, GLint layer) (OpenGL ES 3.0.6 §4.4.2.4、 man ページ)
texture がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。
void invalidateFramebuffer(GLenum target, sequence<GLenum> attachments) (OpenGL ES 3.0.6 §4.5、 man ページ)
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.5、 man ページ)
void readBuffer(GLenum src) (OpenGL ES 3.0.6 §4.3.1、 man ページ)
any getInternalformatParameter(GLenum target, GLenum internalformat, GLenum pname) (OpenGL ES 3.0.6 §6.1.15、 man ページ)
| pname | 返される型 |
|---|---|
| SAMPLES | Int32Array |
pname が上の表にない場合、INVALID_ENUM エラーを生成する。
OpenGL エラーが生成された場合、null を返す。
SAMPLES に対する各問い合わせは、新しい typed array オブジェクトインスタンスを返す。
| 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.1、 man ページ)
仕様 および 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.1、 man ページ)
`internalFormat == DEPTH_STENCIL && samples > 0` のとき INVALID_OPERATION を生成する。
Texture オブジェクトは、テクスチャリング操作のためのストレージおよび状態を提供する。
WebGLTexture がバインドされていない場合(たとえば bindTexture に null または 0 を渡す場合)、
texture オブジェクトを変更または問い合わせようとすると INVALID_OPERATION エラーが
生成されなければならない。これは、OpenGL ES 3.0 仕様がデフォルト texture を変更することを
関数に許可する場合に、以下の関数で示される。
| 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 を返す。
| 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 エラーを生成する。
渡された 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.4、 man ページ)
texStorage2D は texImage2D に対する推奨される代替と
みなされるべきである。一部の実装では texImage2D よりもメモリコストが低い場合がある。
void texStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) (OpenGL ES 3.0.6 §3.8.4、 man ページ)
ここでは、WebGL 1.0 の texImage2D との差分のみを 記述する。
WebGLBuffer が PIXEL_UNPACK_BUFFER target にバインドされている場合、
INVALID_OPERATION エラーを生成する。
Sized internal formats は WebGL 2.0 でサポートされ、internalformat は format と同じである必要がなくなった。代わりに、 internalformat、format、および type の組み合わせは man ページの Table 1 または 2 に列挙されていなければならない。
type が FLOAT_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 からの読み取りは、srcData の srcOffset
要素分だけ進んだ位置から開始される。(Elements は Uint8Array ではバイト、Int32Array では int32 などである。)
srcOffset から開始して srcData 内に十分なデータがない場合、
INVALID_OPERATION を生成する。
ここでは、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 でサポートされ、internalformat は format と同じである必要がなくなった。代わりに、 internalformat、format、および 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 |
HTMLImageElement、
HTMLCanvasElement、または HTMLVideoElement)である場合、
または ImageBitmap、ImageData、または OffscreenCanvas
オブジェクトである場合、一般に各 channel の表現は少なくとも 8 ビットの unsigned integer 型である。
そのような表現を signed integers またはより多くのビットを持つ unsigned integers へ変換することは
明確に定義されていない。たとえば、RGBA8 を RGBA16UI へ変換するとき、その意図が値を 16 ビット
unsigned integer の全範囲へ拡大することかどうかは不明である。したがって、最大 8 ビットの
unsigned integer、half float、または float への変換のみが許可される。
PIXEL_UNPACK_BUFFER target にバインドされた WebGLBuffer から、現在バインドされている
WebGLTexture へデータをアップロードする。
offset は WebGLBuffer の data store へのバイトオフセットであり、0 より小さい場合は
INVALID_VALUE を生成する。
format、type、および WebGLTexture の internal format の組み合わせは、 man ページの Table 1 または 2 に列挙されていなければならない。
WebGLTexture がバインドされていない状態でこの関数を呼び出そうとした場合、
INVALID_OPERATION エラーを生成する。
PIXEL_UNPACK_BUFFER target に WebGLBuffer がバインドされていない場合、
INVALID_OPERATION エラーを生成する。
pixel store parameter constraints が満たされない場合、
INVALID_OPERATION エラーを生成する。
ここでは、WebGL 1.0 の texSubImage2D との差分のみを 記述する。
WebGLBuffer が PIXEL_UNPACK_BUFFER target にバインドされている場合、
INVALID_OPERATION エラーを生成する。
format、type、および 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 からの読み取りは、srcData の srcOffset
要素分だけ進んだ位置から開始される。(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.5、 man ページ)
ここでは、WebGL 1.0 の texSubImage2D との差分のみを 記述する。
要素の subregions のアップロードについては、
TexImageSource からのアップロードのための Pixel
store parameters で詳述される。
WebGLBuffer が PIXEL_UNPACK_BUFFER target にバインドされている場合、
INVALID_OPERATION エラーを生成する。
format、type、および 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.5、 man ページ)
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.3、 man ページ)
三次元または二次元 array texture の指定された mipmap level を割り当て、初期化する。
WebGLBuffer が PIXEL_UNPACK_BUFFER target にバインドされている場合、
INVALID_OPERATION エラーを生成する。
srcData が null の場合、0 に初期化された十分なサイズの buffer が渡される。
internalformat、format、および type の組み合わせは、 man ページの Table 1 または 2 に列挙されていなければならない。
type が FLOAT_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 からの読み取りは、srcData の srcOffset
要素分だけ進んだ位置から開始される。(Elements は Uint8Array ではバイト、Int32Array では int32 などである。)
srcOffset から開始して srcData 内に十分なデータがない場合、
INVALID_OPERATION を生成する。
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.3、 man ページ)
現在バインドされている 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によって変更される。
format、type、および 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 に設定された
HTMLCanvasElement、ImageBitmap、または
OffscreenCanvas で呼び出される場合、SECURITY_ERR 例外が
投げられなければならない。Origin Restrictionsを参照。
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.5、 man ページ)
現在バインドされている WebGLTexture の矩形 subregion を更新する。
WebGLTexture がバインドされていない状態(上記参照)でこの関数を呼び出そうとした場合、
INVALID_OPERATION エラーを生成する。
WebGLBuffer が PIXEL_UNPACK_BUFFER target にバインドされている場合、
INVALID_OPERATION エラーを生成する。
format、type、および WebGLTexture の internal format の組み合わせは、 man ページの Table 1 または 2 に列挙されていなければならない。
type が FLOAT_32_UNSIGNED_INT_24_8_REV である場合、
INVALID_ENUM エラーを生成する。
srcData の型は、上の表に従って type と一致しなければならない。
そうでなければ、INVALID_OPERATION エラーを生成する。
srcData が非 null であるが、そのサイズが、指定された
width、height、depth、format、type、および
pixel storage parameters によって要求されるものより小さい場合、
INVALID_OPERATION エラーを生成する。
この関数の振る舞いに影響する WebGL 固有の pixel storage parameters については、 Pixel Storage Parametersを参照。
pixel store parameter constraints が満たされない場合、
INVALID_OPERATION エラーを生成する。
srcData からの読み取りは、srcData の srcOffset
要素分だけ進んだ位置から開始される。(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.5、 man ページ)
現在バインドされている 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によって変更される。
format、type、および 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 に設定された
HTMLCanvasElement、ImageBitmap、または
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.5、 man ページ)
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.5、 man ページ)
INVALID_OPERATION エラーが生成される。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.6、 man ページ)
srcData からの読み取りは、srcData の srcOffset
要素分だけ進んだ位置から開始される。(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.6、 man ページ)
srcData からの読み取りは、srcData の srcOffset
要素分だけ進んだ位置から開始される。(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.6、 man ページ)
srcData からの読み取りは、srcData の srcOffset
要素分だけ進んだ位置から開始される。(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.6、 man ページ)
srcData からの読み取りは、srcData の srcOffset
要素分だけ進んだ位置から開始される。(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.6、 man ページ)
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.6、 man ページ)
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.6、 man ページ)
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.6、 man ページ)
この節は上記 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 では利用できない。
[WebGLHandlesContextLoss] GLint getFragDataLocation(WebGLProgram program, DOMString name) (OpenGL ES 3.0.6 §3.9.2.3、 man ページ)
program がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成し、-1 を返す。
program がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成し、null を返す。| 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 を返す。
program または location のいずれかが、このものとは異なる
WebGL2RenderingContext によって生成された場合、
INVALID_OPERATION エラーを生成する。| 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.6、 man ページ)
location が null でなく、かつ現在使用中の program から以前の
getUniformLocation 呼び出しによって取得されたものでない場合、
INVALID_OPERATION エラーが生成される。渡された
location が null の場合、渡されたデータは黙って無視され、uniform
変数は変更されない。
v で終わるもの)のいずれかに渡された array が
無効な長さを持つ場合、INVALID_VALUE エラーが生成される。その長さが、
割り当てられた型に対して短すぎる場合、またはその型の整数倍でない場合、その長さは無効である。
srcLength 引数を持つ overloads では:
srcLength が 0 の場合、デフォルトで
data.length - srcOffset になる。
srcOffset + srcLength が
data.length より長い場合、INVALID_VALUE を生成する。
void vertexAttribI4[u]i(GLuint index, ...)
void vertexAttribI4[u]iv(GLuint index, ...) (OpenGL ES 3.0.6 §2.8、 man ページ)
vertexAttrib によって設定された値は、途中に drawArrays または
drawElements の呼び出しがあった場合でも、CURRENT_VERTEX_ATTRIB
param を指定した getVertexAttrib 関数から返されることが保証される。
v で終わるもの)のいずれかに渡された array が短すぎる場合、
INVALID_VALUE エラーが生成される。
void vertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset) (OpenGL ES 3.0.6 §2.9、 man ページ)
INVALID_OPERATION エラーが生成される。
Buffer Offset
および Stride の要件を参照。offset が負の場合、
INVALID_VALUE エラーが生成される。ARRAY_BUFFER target に WebGLBuffer が
バインドされておらず、offset が非ゼロの場合、
INVALID_OPERATION エラーが生成される。WebGL では、サポートされる最大 stride は
255 である。 Vertex
Attribute Data Strideを参照。
| 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.3、 man ページ)
INVALID_OPERATION エラーが生成され、何もクリアされない。
void vertexAttribDivisor(GLuint index, GLuint divisor) (OpenGL ES 3.0.6 §2.9、 man ページ)
index で識別される vertex attribute が進む割合を設定する。
void drawArrays(GLenum mode, GLint first, GLsizei count) (OpenGL ES 3.0.6 §2.9.3、 man ページ)
void drawElements(GLenum mode, GLsizei count, GLenum type, GLintptr offset) (OpenGL ES 3.0.6 §2.9.3、 man ページ)
void drawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount) (OpenGL ES 3.0.6 §2.9.3、 man ページ)
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.3、 man ページ)
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.3、 man ページ)
drawElements について指定されるすべてのエラー条件が適用される。drawElements を
呼び出すかのいずれかを行える。いずれの場合でも、この原因について GL エラーは
生成されるべきではない。
drawElements、drawArrays、drawRangeElements およびそれらの
instanced variants の呼び出し中、WebGL 2.0 は OpenGL ES 3.0 で指定されるものを超える追加の
エラーチェックを実行する。
CURRENT_PROGRAM が null の場合、INVALID_OPERATION エラーが生成される。現在の framebuffer 内のピクセルは、ArrayBufferView オブジェクト、または
PIXEL_PACK_BUFFER target にバインドされた WebGLBuffer へ読み戻すことができる。
ここでは、WebGL 1.0 の ピクセルの読み戻しとの差分のみを 記述する。
WebGLBuffer が PIXEL_PACK_BUFFER target にバインドされている場合、
INVALID_OPERATION エラーを生成する。
pixel store parameter constraints が満たされない場合、
INVALID_OPERATION エラーを生成する。
dstData が dstOffset から開始する読み取り操作に十分な空間を
持たない場合、INVALID_OPERATION を生成する。
これはブロッキング操作である。結果を返すためには、WebGL は source framebuffer への以前の すべてのレンダリング操作を完全に完了しなければならないためである。 マルチプロセス WebGL 実装では、remote process から結果を取得するために、高コストな プロセス間 round-trip も発生する。
代わりに、PIXEL_PACK_BUFFER への readPixels の使用を検討すること。
その buffer からデータを読み取るには getBufferSubData を使用する。
(その呼び出しでのブロックを避ける方法については getBufferSubData を参照。)
PIXEL_PACK_BUFFER target に WebGLBuffer がバインドされていない場合、
INVALID_OPERATION エラーを生成する。
offset は WebGLBuffer の data store へのバイトオフセットであり、0 より小さい場合は
INVALID_VALUE エラーを生成する。WebGLBuffer の data store の残りが、
pixel store modes を考慮して指定された矩形内のすべてのピクセルを取得するのに十分な大きさでない場合、
INVALID_OPERATION を生成する。
void drawBuffers(sequence<GLenum> buffers) (OpenGL ES 3.0.6 §4.2.1、 man ページ)
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.3、 man ページ) これらは [描画操作]である。
clearBuffer 関数は、次の表に示される color buffer の型に依存する。
| buffer の型 | clearBuffer 関数 |
|---|---|
| floating point | clearBufferfv |
| fixed point | clearBufferfv |
| signed integer | clearBufferiv |
| unsigned integer | clearBufferuiv |
buffer が COLOR_BUFFER であり、関数が上の表に従って選択されていない場合、
INVALID_OPERATION エラーが生成され、何もクリアされない。
ArrayBufferView エントリポイントについて、srcOffset から開始して
values 内に十分な要素がない場合、INVALID_VALUE を生成する。
clearBufferfi は depth および stencil buffers をクリアするために使用してよい。
buffer は DEPTH_STENCIL でなければならず、
drawBuffer は 0 でなければならない。depth および
stencil は、それぞれ depth 値および stencil 値である。
この関数が complete framebuffer の欠落した attachment をクリアしようとする場合、 欠落した Attachment への描画に従い、 何もクリアされず、エラーも生成されない。
WebGLQuery createQuery() (OpenGL ES 3.0.6 §2.14、 man ページ)
void deleteQuery(WebGLQuery? query) (OpenGL ES 3.0.6 §2.14、 man ページ)
query がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。WebGLQuery に含まれる query オブジェクトを削除対象として
マークする。オブジェクトがすでに削除対象としてマークされている場合、この呼び出しは
効果を持たない。基盤となる GL オブジェクトは JS オブジェクトが破棄されると自動的に
削除対象としてマークされるが、このメソッドは著者がオブジェクトを早期に削除対象として
マークすることを可能にすることに注意。
[WebGLHandlesContextLoss] GLboolean isQuery(WebGLQuery? query) (OpenGL ES 3.0.6 §6.1.7、 man ページ)
WebGLQuery が有効である場合は true を返し、
そうでない場合は false を返す。WebGL2RenderingContext によって生成された場合、
false を返す。void beginQuery(GLenum target, WebGLQuery query) (OpenGL ES 3.0.6 §2.14、 man ページ)
query がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。void endQuery(GLenum target) (OpenGL ES 3.0.6 §2.14、 man ページ)
getQueryParameter を呼び出すことで result を取得できる。
WebGLQuery? getQuery(GLenum target, GLenum pname) (OpenGL ES 3.0.6 §6.1.7、 man ページ)
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.7、 man ページ)
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 を実行していないときにのみ利用可能にされなければならない。 言い換えると:
WebGLSampler createSampler() (OpenGL ES 3.0.6 §3.8.2、 man ページ)
WebGLSampler オブジェクトを作成し、
sampler オブジェクト名で初期化する。
void deleteSampler(WebGLSampler? sampler) (OpenGL ES 3.0.6 §3.8.2、 man ページ)
sampler がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。WebGLSampler に含まれる sampler オブジェクトを削除対象として
マークする。オブジェクトがすでに削除対象としてマークされている場合、この呼び出しは
効果を持たない。基盤となる GL オブジェクトは JS オブジェクトが破棄されると自動的に
削除対象としてマークされるが、このメソッドは著者がオブジェクトを早期に削除対象として
マークすることを可能にすることに注意。
[WebGLHandlesContextLoss] GLboolean isSampler(WebGLSampler? sampler) (OpenGL ES 3.0.6 §6.1.5、 man ページ)
WebGLSampler が有効である場合は true を返し、
そうでない場合は false を返す。WebGL2RenderingContext によって生成された場合、
false を返す。void bindSampler(GLuint unit, WebGLSampler? sampler) (OpenGL ES 3.0.6 §3.8.2、 man ページ)
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 に
同時にバインドされてもよい。MAX_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.2、 man ページ)sampler がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。| 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 エラーを生成する。
sampler がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。| 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 オブジェクトは、GL server と client の間で実行を同期するために使用できる。
WebGLSync? fenceSync(GLenum condition, GLbitfield flags) (OpenGL ES 3.0.6 §5.2、 man ページ)
[WebGLHandlesContextLoss] GLboolean isSync(WebGLSync? sync) (OpenGL ES 3.0.6 §6.1.8、 man ページ)
WebGLSync が有効である場合は true を返し、
そうでない場合は false を返す。WebGL2RenderingContext によって生成された場合、
false を返す。void deleteSync(WebGLSync? sync) (OpenGL ES 3.0.6 §5.2、 man ページ)
sync がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。WebGLSync に含まれる sync オブジェクトを削除対象として
マークする。オブジェクトがすでに削除対象としてマークされている場合、この呼び出しは
効果を持たない。基盤となる GL オブジェクトは JS オブジェクトが破棄されると自動的に
削除対象としてマークされるが、このメソッドは著者がオブジェクトを早期に削除対象として
マークすることを可能にすることに注意。
GLenum clientWaitSync(WebGLSync sync, GLbitfield flags, GLuint64 timeout) (OpenGL ES 3.0.6 §5.2.1、 man ページ)
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 エラーが
生成される。flags に SYNC_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 エラーが生成される。
この関数の実行中に OpenGL エラーが生成された場合、WAIT_FAILED を返す。
プラットフォーム間で一貫した振る舞いを確保するため、sync オブジェクトはユーザーエージェントの event loop が task を実行していないときにのみ signaled 状態へ遷移してよい。 言い換えると:
void waitSync(WebGLSync sync, GLbitfield flags, GLint64 timeout) (OpenGL ES 3.0.6 §5.2.1、 man ページ)
sync がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。TIMEOUT_IGNORED に設定されなければならない。
sync がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。| 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 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
オブジェクトを作成し、transform feedback オブジェクト名で初期化する。
transformFeedback がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。WebGLTransformFeedback に含まれる transform feedback オブジェクトを
削除対象としてマークする。オブジェクトがすでに削除対象としてマークされている場合、この呼び出しは
効果を持たない。基盤となる GL オブジェクトは JS オブジェクトが破棄されると自動的に
削除対象としてマークされるが、このメソッドは著者がオブジェクトを早期に削除対象として
マークすることを可能にする。
WebGLTransformFeedback が有効である場合は true を返し、
そうでない場合は false を返す。WebGL2RenderingContext によって生成された場合、
false を返す。transformFeedback がこのものとは異なる
WebGL2RenderingContext によって生成された場合、
INVALID_OPERATION エラーを生成する。WebGLTransformFeedback オブジェクトをバインドする。
transformFeedback が null の場合、context によって提供される
デフォルト transform feedback オブジェクトがバインドされる。
削除対象としてマークされたオブジェクトをバインドしようとすると
INVALID_OPERATION エラーが生成され、現在のバインディングは変更されないままとなる。
program がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。program がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成し、null を返す。Uniform buffer オブジェクトは、named uniform blocks のためのストレージを提供する。 そのため、named uniform blocks 内の active uniforms の値は、buffer オブジェクトの内容を 変更することで変更できる。
buffer がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。target によって指定される targets の配列の
index にある binding point へ、指定された
WebGLBuffer オブジェクトをバインドする。
buffer がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。offset および size によって表される
WebGLBuffer オブジェクト buffer の範囲を、
target によって指定される targets の配列の
index にある binding point へバインドする。
program がこのものとは異なる
WebGL2RenderingContext によって生成された場合、
INVALID_OPERATION エラーを生成する。program 内の複数の uniforms の indices を取得する。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 を返す。
program がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。program 内の uniform block の index を取得する。
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
エラーを生成する。
uniformBlockIndex が program の active block uniform
でない場合、または
ACTIVE_UNIFORM_BLOCKS の値以上である場合、INVALID_VALUE エラーを生成する。
OpenGL エラーが生成された場合、null を返す。
program がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。program 内の uniformBlockIndex にある
active uniform block の名前を取得する。
program がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。Vertex Array オブジェクト(VAO と呼ばれることもある)は、vertex processor によって使用される データの定義に関連するすべての状態をカプセル化する。
デフォルト Vertex Array オブジェクトが存在し、null WebGLVertexArrayObject
handle によって表される。
context の初期状態では、デフォルトオブジェクトがバインドされている。
バインドされているとき、getParameter(VERTEX_ARRAY_BINDING) は null を返す。
vertexArray がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。WebGLVertexArrayObject オブジェクトをバインドする。
vertexArray が null の場合、context によって提供される
デフォルト vertex array がバインドされる。
削除された vertex array をバインドしようとすると INVALID_OPERATION エラーが生成され、
現在のバインディングは変更されないままとなる。
WebGLVertexArrayObject
オブジェクトを作成し、vertex array オブジェクト名で初期化する。
vertexArray がこのものとは異なる WebGL2RenderingContext によって
生成された場合、INVALID_OPERATION エラーを生成する。WebGLVertexArrayObject に含まれる vertex array オブジェクトを
削除対象としてマークする。オブジェクトがすでに削除対象としてマークされている場合、この呼び出しは
効果を持たない。基盤となる GL オブジェクトは JS オブジェクトが破棄されると自動的に
削除対象としてマークされるが、このメソッドは著者がオブジェクトを早期に削除対象として
マークすることを可能にする。
WebGLVertexArrayObject が有効である場合は true を返し、
そうでない場合は false を返す。WebGL2RenderingContext によって生成された場合、
false を返す。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 を参照。
Texture アクセスは、WebGL 2.0 API では OpenGL ES 3.0 API と同様に機能する。言い換えると、 WebGL 1.0 API とは異なり、非 2 のべき乗 textures に特別な制限はない。すべての mipmapping およびすべての wrapping modes は、非 2 のべき乗 images についてサポートされる。
PRIMITIVE_RESTART_FIXED_INDEX は常に有効である節を参照。
WebGL 1.0 では、DEPTH_STENCIL_ATTACHMENT は
DEPTH_ATTACHMENT および STENCIL_ATTACHMENT 以外の代替 attachment point である。
しかし WebGL 2.0 では、DEPTH_STENCIL_ATTACHMENT は DEPTH_ATTACHMENT +
STENCIL_ATTACHMENT の alias とみなされる。すなわち、同じ image が
DEPTH_ATTACHMENT と STENCIL_ATTACHMENT の両方にアタッチされ、
2 つの attachment points にアタッチされていた元の images を上書きする。
次の一連の操作を考える:
DEPTH_ATTACHMENT にアタッチする;DEPTH_STENCIL_ATTACHMENT にアタッチする;DEPTH_STENCIL_ATTACHMENT にアタッチする。DEPTH_ATTACHMENT にアタッチされ、
STENCIL_ATTACHMENT には image がアタッチされない状態になる。一方 WebGL 2.0 では、
DEPTH_ATTACHMENT にも STENCIL_ATTACHMENT にも image はアタッチされない。
Framebuffer オブジェクトの Attachmentsで定義される制約は、 WebGL 2.0 ではもはや適用されない。
異なる images が depth および stencil attachment points にバインドされている場合、
checkFramebufferStatus は FRAMEBUFFER_UNSUPPORTED を返し、
attachment が DEPTH_STENCIL_ATTACHMENT である
getFramebufferAttachmentParameter は INVALID_OPERATION エラーを生成する。
WebGL 1.0 API では、texSubImage2D に渡される type 引数は、
texture オブジェクトを最初に定義するために使用された型(すなわち texImage2D で使用された型)と
一致しなければならない。WebGL 2.0 API では、この制限は解除されている。
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 まで及ぶことがある。その部分が範囲外である場合、
値はそれに応じて変化することがある。
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 を追加することはできない。
pname FRAMEBUFFER_ATTACHMENT_OBJECT_NAME を指定して
getFramebufferAttachmentParameter が呼び出され、attachment に image が
アタッチされていない場合、WebGL 1.0 / ES 2.0 では INVALID_OPERATION が生成される。
WebGL 2.0 / ES 3.0 では、エラーは生成されず、null が返される。
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 を許可されてはならない。
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 に失敗しなければならない。
WebGL 2.0 は、uniform および attribute locations の長さに 1024 文字の制限を課す。
WebGL 2.0 API では、非ゼロの divisor を持つ vertex attributes は
drawArrays および drawElements の呼び出し中には進まない。
(OpenGL
ES 3.0.6 §2.9.3)
この節は、さまざまな operating systems および devices 間の移植性を改善するために、 OpenGL ES 3.0 API に対して WebGL API に加えられた変更について記述する。
| 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 に設定して bindBuffer、bindBufferRange または
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 と似ている。
Buffer オブジェクトのバインディング節で指定されるように、
element array および other data WebGL buffer types を持つ buffers 間で
copyBufferSubData を使用してコピーしようとすると、
INVALID_OPERATION エラーが生成され、コピーは実行されない。
現在バインドされている 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 オブジェクトにもバインドされている場合に失敗する。
同じ buffer が active transform feedback 内の複数の indexed binding point にバインドされている場合、
beginTransformFeedback は INVALID_OPERATION エラーを生成する。
SEPARATE_ATTRIBS mode でのみ発生し得る。
MAX_COLOR_ATTACHMENTS parameter の値は、MAX_DRAW_BUFFERS parameter の値と等しくなければならない。
ESSL1 fragment shader が gl_FragColor にも gl_FragData にも書き込まない場合、
shader 実行後の fragment colors の値は変更されない。対応する output variables が
ESSL3 fragment shader で定義されていない場合、shader 実行後の fragment colors の値は変更されない。
すべての user-defined output variables は、shader 実行中に書き込まれない場合、デフォルトでゼロになる。
draw buffer は、次の場合に fragment shader と "shader-output-incompatible" である:
draw buffers のいずれかが "shader-output-incompatible" である場合、draws は次の場合に
INVALID_OPERATION を生成する:
colorMask の任意の channel が true に設定されているDRAW_FRAMEBUFFER の "shader-output-incompatible" である各
DRAW_BUFFERi について:
DRAW_BUFFERi が NONE でないcolorMaski(例: OES_draw_buffers_indexed 由来)が true に設定されている。
compiled shader programs の binary representations へのアクセスは WebGL 2.0 API ではサポートされない。
これには OpenGL ES 3.0 の GetProgramBinary、ProgramBinary、および
ProgramParameteri entry points が含まれる。加えて、getProgramParameter による
program binary length の問い合わせ、および getParameter による program binary formats の
問い合わせも WebGL 2.0 API ではサポートされない。
WebGL 1.0 仕様の
有効化された Vertex Attributes と範囲チェック節で
指定される範囲チェックに加えて、drawElements、drawRangeElements または
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 にも適用される。
WebGL 2.0 API では、drawArrays、drawElements、
drawRangeElements またはそれらの instanced variants で描画しようとするとき、
draw command に使用される program 内の active uniform block のいずれかが十分に大きな
buffer object によって backing されていない場合、INVALID_OPERATION エラーを生成する。
WebGL は常にデフォルト framebuffer を持つ。FRAMEBUFFER_UNDEFINED enumerant は
WebGL 2.0 API から削除されている。
WebGL 2.0 API では、ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH、
TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH、UNIFORM_BLOCK_NAME_LENGTH、および
UNIFORM_NAME_LENGTH enumerants が、WebGL 1.0 API で削除された類似の
enumerants に加えて削除されている。
WebGL 2.0 API では、指定された clear value の型と、クリアされる buffer の型との間に不一致がある状態で
clear を実行しようとすると、未定義の結果を生成する代わりに INVALID_OPERATION エラーを生成する。
texture lookup function arguments 内で、implementation-defined parameters
MIN_PROGRAM_TEXEL_OFFSET および MAX_PROGRAM_TEXEL_OFFSET によって
指定される範囲外の texture offset 値を使用しようとする GLSL shader は、
WebGL 2.0 API で compilation に失敗しなければならない。
OpenGL ES 3.0 API で未定義の結果を持つ Texel fetches は、WebGL 2.0 API ではゼロ、 または incomplete texture からの texel fetch の場合は texture source color (0, 0, 0, 1) を 返さなければならない。
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、FlushMappedBufferRange、および UnmapBuffer
entry points は WebGL 2.0 API から削除されている。次の enum values も削除されている:
BUFFER_ACCESS_FLAGS、BUFFER_MAP_LENGTH、BUFFER_MAP_OFFSET、
MAP_READ_BIT、MAP_WRITE_BIT、MAP_INVALIDATE_RANGE_BIT、
MAP_INVALIDATE_BUFFER_BIT、MAP_FLUSH_EXPLICIT_BIT、および
MAP_UNSYNCHRONIZED_BIT。
MapBufferRange を使用する代わりに、buffer data は
getBufferSubData entry point を使用して読み取ることができる。
WebGL 2.0 API では、TIMEOUT_IGNORED は値 0xFFFFFFFFFFFFFFFF を持つ
GLuint64 ではなく、値 -1 を持つ GLint64 として定義される。
これは Javascript がそれほど大きな整数を正確に表現できないためである。同じ理由で、
waitSync は timeout について GLuint64 ではなく GLint64 値を取る。
WebGL 2.0 API では、WebGL 実装は main thread の実行を過度に長時間ブロックすることを避けるため、
clientWaitSync の呼び出しに短い maximum timeout を強制しなければならない。この timeout は
引数 MAX_CLIENT_WAIT_TIMEOUT_WEBGL を指定して getParameter を呼び出すことで
問い合わせることができる。
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 してもよい。
OpenGL ES 3.0 で Enable/Disable によって制御される
PRIMITIVE_RESTART_FIXED_INDEX context state は、WebGL
2.0 ではサポートされない。代わりに、WebGL 2.0 はこの state が常に有効であるかのように振る舞う。
これは WebGL 1.0 と比較した compatibility difference である。
drawElements、drawElementsInstanced、または
drawRangeElements が index を処理する際、その index の値がその data type の最大値
(UNSIGNED_BYTE indices では 255、UNSIGNED_SHORT では 65535、
UNSIGNED_INT では 4294967295)である場合、vertex は通常どおり処理されない。
代わりに、drawing command が直前の vertex で終了し、同じ parameters を持つ別の drawing command が
直ちに開始され、元々指定された indices の直後の index から末尾までのみが転送されるかのように扱われる。
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 から削除されている。
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 エラーを生成し、 情報は返されない。
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 エラーを生成する。これには
drawArrays、drawElements、drawArraysInstanced
、drawElementsInstanced 、および drawRangeElements が含まれる。
color buffer が normalized fixed-point format を持つ場合、floating-point color values は その 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 エラーを生成する。
これには drawArrays、drawElements、drawArraysInstanced、
drawElementsInstanced 、および drawRangeElements が含まれる。
sampler type が floating point であり、internal texture format が normalized integer である場合、 それは一致しているとみなされ、返される値は [0, 1] の範囲の floating point に変換される。
OpenGL ES 3.0 では、適切な primitives(例: glFinish() または別の synchronous API)が
呼び出された場合、query の result は、それが発行されたのと同じ frame 内で利用可能にされることがある。
WebGL では、application portability を改善するため、query の result は、その query が発行された
同じ frame 内で application に利用可能にされてはならない。議論および根拠については
getQueryParameter の仕様を参照。
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 より前に
出現しなければならない。
std140 layout のみがサポートされる
GLSL ES 3.00 仕様は uniform blocks について、variables が uniform buffers の storage 内でどのように
配置されるかを定義する shared、packed、および 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;
WebGL 2.0 API では、次の shading language constructs は許可されず、それらを使用しようとすると compile error にならなければならない:
すべての attached images は同じ width および height を持たなければならない。そうでなければ、
checkFramebufferStatus は FRAMEBUFFER_INCOMPLETE_DIMENSIONS を返す。
FRAMEBUFFER_INCOMPLETE_DIMENSIONS は
checkFramebufferStatus の有効な 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 でも維持することは妥当である。
WebGL 2.0 API では、layout qualifiers row_major および column_major は、
non-matrix variables にのみ適用される場合であっても、matched uniform blocks 内で一致する必要がある。
OpenGL ES 3.0 では、invalidateFramebuffer または invalidateSubFramebuffer を
呼び出した後、影響を受ける region の contents は実質的に未定義になる。WebGL 2.0 では、contents は
変更されないままであるか、default values にクリアされるかのどちらかであることが要求される。
(例: colors および stencil については 0、depth については 1.0)
invalidateFramebuffer または
invalidateSubFramebuffer を no-op にすることは許容される。
ArrayBufferView を伴う texImage2D および texImage3D において、
type が FLOAT_32_UNSIGNED_INT_24_8_REV であり、srcData が
null でない場合、INVALID_OPERATION を生成する。
ArrayBufferView を伴う texSubImage2D および texSubImage3D において、
type が FLOAT_32_UNSIGNED_INT_24_8_REV である場合、
INVALID_ENUM を生成する。
次の状況のいずれかが true である場合、drawArrays、drawElements、
drawRangeElements またはそれらの instanced variants で描画しようとすると
INVALID_OPERATION エラーが生成される:
vertexAttribPointer、vertexAttrib{1234}f、または vertexAttrib{1234}fv
が使用され、slot index にある shader attribute の base type が
floating-point でない(例: signed または unsigned integer である)場合;
vertexAttribIPointer が type UNSIGNED_BYTE、
UNSIGNED_SHORT または UNSIGNED_INT とともに使用される、または
vertexAttribI4ui または vertexAttribI4uiv が使用され、
slot index にある shader attribute の base type が unsigned integer でない
(例: floating-point または signed integer である)場合;
vertexAttribIPointer が type BYTE、
SHORT または INT とともに使用される、または
vertexAttribI4i または
vertexAttribI4iv が使用され、slot index にある shader attribute の base type が
signed integer でない(例: floating-point または unsigned integer である)場合。
任意の output variable が buffer object へ stream されるように指定されているが、vertex shader によって 実際には書き込まれない場合、その値は 0 に設定される。
fragment shader が gl_FragDepth に静的に値を代入する場合、gl_FragDepth に値を代入する
statements が実行されない任意の fragment について、値 0 が使用される。
image が framebuffer 内の複数の color attachment point にアタッチされている場合、
checkFramebufferStatus は FRAMEBUFFER_UNSUPPORTED を返す。
image は、個別の mip level、array slice(2D array または cube map textures のいずれかから)、
または 3D texture slice であり得る。
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 については、width、height、および 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 = 2、height = 1、および depth = 3 の 3D texture に
upload される。
UNPACK_SKIP_PIXELS が 0、UNPACK_SKIP_ROWS が 0、かつ
UNPACK_IMAGE_HEIGHT
が 0 の場合、texel array 全体は red に設定される。
UNPACK_SKIP_PIXELS が 16、UNPACK_SKIP_ROWS が 16、かつ
UNPACK_IMAGE_HEIGHT
が 0 の場合、texel array 全体は yellow に設定される。
UNPACK_SKIP_PIXELS が 0、UNPACK_SKIP_ROWS が 0、かつ
UNPACK_IMAGE_HEIGHT
が 16 の場合、texel array の first slice は red、second slice は blue、third slice は purple になる。
UNPACK_SKIP_PIXELS が 16、UNPACK_SKIP_ROWS が 0、かつ
UNPACK_IMAGE_HEIGHT
が 16 の場合、texel array の first slice は green、second slice は yellow、third slice は pink になる。
定義:
ROW_LENGTH ? ROW_LENGTH : widthIMAGE_HEIGHT ? IMAGE_HEIGHT : height
PACK_SKIP_PIXELS + width > DataStoreWidth である場合、
readPixels は INVALID_OPERATION エラーを生成する。
UNPACK_SKIP_PIXELS + width > DataStoreWidth である場合、
texImage2D および texSubImage2D は
INVALID_OPERATION エラーを生成する。これは、
PIXEL_UNPACK_BUFFER がバインドされておらず、srcData が null である場合の
texImage2D には適用されない。
UNPACK_SKIP_PIXELS + width > DataStoreWidth または
UNPACK_SKIP_ROWS + height > DataStoreHeight である場合、
texImage3D および texSubImage3D は INVALID_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_PIXELS、PACK_SKIP_ROWS、width および
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 エラーを生成する。
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 を介して公開されてもよい。
basic machine units で与えられる UNIFORM_BUFFER_OFFSET_ALIGNMENT の値は、
4 で割り切れなければならない。
OpenGL ES 3.0 では、適切な primitives(例: glFinish() または別の
synchronous API)が呼び出された場合、sync object は、それが発行されたのと同じ frame 内で
signaled になることがある。WebGL では、application portability を改善するため、sync object は
その sync が発行されたのと同じ frame 内で signaled state へ遷移してはならない。議論および根拠については
getSyncParameter および
clientWaitSync の仕様を参照。
blitFramebuffer() の src* および dst* parameters は、結果として生じる source および
destination rectangles の width および height が GLint に格納できる最大値以下になるように
設定されなければならない。width または height の値のいずれかを GLint として計算した結果
integer overflow が発生する場合、blitFramebuffer() は
INVALID_VALUE エラーを生成する。
generateMipmap は TEXTURE_BASE_LEVEL の dimensions がすべて正であることを要求する。
deleteQuery は query が active の場合、暗黙的に endQuery を呼び出す
GLES では、DeleteQueries は queries が active であっても、暗黙的にそれらを終了しない。
実装は、少なくとも 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 では十分に指定されていない。一般的ではあるが普遍的ではない。 ここでは寛容であることを選ぶが、実装はこの機能の要求に対して警告してもよい。
実装は、基盤となるプラットフォームが同じことを行う場合、store 時に constant blend color を
clamp してもよい。applications は BLEND_COLOR parameter を問い合わせて
effective behavior を確認してもよい。
TRANSFORM_FEEDBACK_BUFFER generic buffer binding point は、per-object state ではなく context state へ移動された。
OpenGL ES 2.0 では、仕様は未初期化 data を持つ compressed 2D texture を作成できるべきかどうかを 宣言していなかった。WebGL 1.0 では、これは明示的に許可されない。
OpenGL ES 3.0 では、glCompressedTexImage2D に null を渡すことにより、
未初期化 data を持つ compressed 2D texture を作成することが明示的に許可されている。
しかし WebGL 2.0 では、これは依然として明示的に許可されない。ユーザーは compressed internal format を
持つ texStorage2D を使用して、ゼロ初期化された compressed textures を割り当てることができる。
ただし、これらの textures は immutable であり、compressedTexImage2D によって
割り当てられる textures とは完全には互換性がない。