이것은 WebGL 명세의 Version 2.0이다.
이 명세는 HTML 5 canvas 요소 [CANVAS]를 위한 추가 렌더링 컨텍스트와 지원 객체들을 설명한다. 이 컨텍스트는 OpenGL ES 3.0 API에 밀접하게 부합하는 API를 사용하여 렌더링할 수 있게 한다.
이 문서는 WebGL 1.0 명세의 확장으로 읽어야 한다. 1.0과의 차이점만 설명한다.
이 문서는 editor's draft이다. 진행 중인 작업 이외의 것으로 이 문서를 인용하지 말라.
이 명세에 대한 공개 논의는 [email protected] mailing list (instructions, archives)에서 환영한다.
명세 또는 해당 conformance tests에 대한 bugs는 issue tracker에 제출하라. Pull requests는 Github repository에 대해 환영한다.
WebGL™은 웹을 위해 설계된 immediate mode 3D rendering API이다. 이것은 WebGL 명세의 Version 2이다. OpenGL® ES 3.0에서 파생되었으며, 유사한 렌더링 기능을 제공하지만 HTML context에서 제공한다.
WebGL 2.0은 WebGL 1.0과 완전히 backwards compatible하지는 않다. extensions 없이 core WebGL 1.0 명세에 대해 작성된 기존 error-free content는 종종 수정 없이 WebGL 2.0에서 실행되지만, 항상 그런 것은 아니다. backwards compatibility에 대한 모든 예외는 Backwards Incompatibility 섹션에 기록되어 있다. 이 명세에서 제공하는 새 동작에 접근하려면, content가 명시적으로 새 context를 요청한다(아래 세부사항).
이 문서에 설명된 많은 함수에는 OpenGL ES man pages에 대한 links가 포함되어 있다. 이러한 pages가 OpenGL ES 3.0 명세 [GLES30]와 일치하도록 모든 노력을 기울였지만, 오류가 포함될 수 있다. 모순이 있는 경우 OpenGL ES 3.0 명세가 최종 권위이다.
이 문서의 나머지 섹션은 OpenGL ES 3.0 명세(이 문서 작성 시점의 3.0.6, Khronos OpenGL ES API Registry에서 이용 가능)와 함께 읽도록 의도되었다. 달리 지정되지 않는 한, 각 method의 동작은 OpenGL ES 3.0 명세에 의해 정의된다. 이 명세는 interoperability 또는 security를 보장하기 위해 OpenGL ES 3.0과 다를 수 있으며, OpenGL ES 3.0이 implementation-defined로 남겨 둔 영역을 종종 정의한다. 이러한 차이점은 WebGL과 OpenGL ES 3.0의 차이점 섹션에 요약되어 있다.
다음 WeGL 1.0 extensions는 WebGL 2.0에서 core인 기능을 반영하므로, WebGL 2.0에서는 더 이상 extensions가 아니다:
WebGL API를 사용하기 전에, 작성자는 아래 설명된 대로 주어진
HTMLCanvasElement [CANVAS] 또는
OffscreenCanvas [OFFSCREENCANVAS]에 대한
WebGLRenderingContext 객체를 얻어야 한다. 이 객체는 OpenGL state를
관리하고 drawing buffer에 렌더링하는 데 사용되며, drawing buffer는 context creation
시점에 생성되어야 한다.
각 WebGLRenderingContext 및 WebGL2RenderingContext는
생성 시 설정되는 연관된 canvas를 가지며,
이는 canvas [CANVAS] 또는 offscreen
canvas [OFFSCREENCANVAS]이다.
각 WebGLRenderingContext 및 WebGL2RenderingContext는
생성 시 설정되는 context
creation parameters를
WebGLContextAttributes 객체 안에 가진다.
각 WebGLRenderingContext 및 WebGL2RenderingContext는
drawing buffer가 생성될 때마다 설정되는 actual
context parameters를
WebGLContextAttributes 객체 안에 가진다.
각 WebGLRenderingContext 및 WebGL2RenderingContext는
처음에는 설정되어 있지 않은 webgl
context lost flag를 가진다.
canvas 요소의 getContext() method가
contextId webgl2 [CANVASCONTEXTS]에 대해
새 객체를 반환해야 할 때,
user agent는 다음 단계를 수행해야 한다:
WebGL2RenderingContext 객체 context를 생성한다.
getContext()
method가 연관된 canvas 또는 offscreen canvas로 둔다.
WebGLContextAttributes 객체 contextAttributes를 생성한다.
getContext()가 두 번째 인수 options와 함께 호출되었다면,
contextAttributes의 attributes를 options에 지정된 것들로 설정한다.
WebGLContextAttributes 객체 actualAttributes를 생성한다.
WebGL 1.0과 달리, WebGL 2.0의 depth, stencil, 및
antialias attributes는 WebGL 구현에 의해 반드시 준수되어야 한다.
이 섹션은 위에 설명된 기능에 대한 runtime access를 지원하기 위해 DOM에 추가된 interfaces와 기능을 설명한다.
다음 types가 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
page)
,
glBeginQuery를 호출한 것처럼 active가 되며
(OpenGL
ES 3.0.6 §2.14,
man
page)
,
glEndQuery를 호출한 것처럼 concluded되고
(OpenGL
ES 3.0.6 §2.14,
man
page)
glDeleteQueries를 호출한 것처럼 destroyed된다
(OpenGL
ES 3.0.6 §2.14,
man
page)
.
[Exposed=(Window,Worker)]
interface WebGLQuery : WebGLObject {
};
WebGLSampler 인터페이스는 OpenGL Sampler Object를 나타낸다.
기저 객체는 glGenSamplers를 호출한 것처럼 생성되고
(OpenGL
ES 3.0.6 §3.8.2,
man
page)
,
glBindSampler를 호출한 것처럼 bound되며
(OpenGL
ES 3.0.6 §3.8.2,
man
page)
glDeleteSamplers를 호출한 것처럼 destroyed된다
(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
page)
,
glClientWaitSync를 호출한 것처럼 blocked on되며
(OpenGL
ES 3.0.6 §5.2.1,
man page)
,
glWaitSync를 호출한 것처럼 GL 내부에서 waited on되고
(OpenGL
ES 3.0.6 §5.2.1,
man
page)
,
glGetSynciv를 호출한 것처럼 queried되며
(OpenGL
ES 3.0.6 §6.1.8,
man
page)
,
glDeleteSync를 호출한 것처럼 destroyed된다
(OpenGL
ES 3.0.6 §5.2,
man
page)
.
[Exposed=(Window,Worker)]
interface WebGLSync : WebGLObject {
};
WebGLTransformFeedback 인터페이스는 OpenGL Transform Feedback Object를 나타낸다.
기저 객체는 glGenTransformFeedbacks를 호출한 것처럼 생성되고
(OpenGL
ES 3.0.6 §2.15.1,
man page)
,
glBindTransformFeedback를 호출한 것처럼 bound되며
(OpenGL
ES 3.0.6 §2.15.1,
man page)
glDeleteTransformFeedbacks를 호출한 것처럼 destroyed된다
(OpenGL
ES 3.0.6 §2.15.1,
man
page)
.
[Exposed=(Window,Worker)]
interface WebGLTransformFeedback : WebGLObject {
};
WebGLVertexArrayObject 인터페이스는 OpenGL Vertex Array Object를 나타낸다.
기저 객체는 glGenVertexArrays를 호출한 것처럼 생성되고
(OpenGL
ES 3.0.6 §2.10,
man page)
,
glBindVertexArray를 호출한 것처럼 bound되며
(OpenGL
ES 3.0.6 §2.10,
man page)
glDeleteVertexArrays를 호출한 것처럼 destroyed된다
(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? |
sequences 또는 typed arrays를 반환하는 모든 쿼리는 매번 새 객체를 반환한다.
pname이 위 표에 없고 WebGL 1.0에서 지원하는 parameter names 중 하나도 아니면,
INVALID_ENUM 오류를 생성하고 null을 반환한다.
다음 pname 인수들은 현재 WebGL 구현의 어떤 측면을 설명하는 문자열을 반환한다:
| VERSION | 다음 형식의 version 또는 release number를 반환한다
WebGL<space>2.0<optional><space><vendor-specific information></optional>.
|
| SHADING_LANGUAGE_VERSION | 다음 형식의 version 또는 release number를 반환한다
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가 동일한 formats를 갖지 않으면,
INVALID_OPERATION 오류를 생성하고 0을 반환한다.
target에 대한 indexed value를 반환한다. 반환되는 타입은
요청된 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는 bytes이다.
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)를 복사하며,
srcData는 element index srcOffset에서 시작해 읽는다.
copyLength가 0이면 buf에 data가 쓰이지 않지만, 이는
GL 오류가 생성되게 하지 않는다.
target에 WebGLBuffer가 바인딩되어 있지 않으면 INVALID_OPERATION
오류를 생성한다.
srcOffset이 srcData.length(또는
DataView의 경우 srcData.byteLength)보다 크면
INVALID_VALUE 오류를 생성한다.
srcOffset + copyLength가 srcData.length(또는
DataView의 경우 srcData.byteLength)보다 크면
INVALID_VALUE 오류를 생성한다.
buf의 크기는 수정되지 않으며, 어떤 data도 쓰이지 않는다.
srcData의 sub-region을 현재 바인딩된 WebGLBuffer 객체로 복사한다.
buf를 target에 바인딩된 buffer라고 하자.
length가 0이면:
srcData가 DataView이면, copyLength를
srcData.byteLength - srcOffset로 둔다. 아래 텍스트의 typed elements는 bytes이다.
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)를 복사하며,
srcData는 element index srcOffset에서 시작해 읽고,
buf는 byte offset dstByteOffset에서 시작해 쓴다.
copyLength가 0이면 buf에 data가 쓰이지 않지만, 이는
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 page)
undefined getBufferSubData(GLenum target, GLintptr srcByteOffset, [AllowShared] ArrayBufferView dstBuffer, optional unsigned long long dstOffset = 0, optional GLuint length = 0)
dstBuffer로 data를 다시 읽는다.
buf를 target에 바인딩된 buffer라고 하자.
length가 0이면:
dstBuffer가 DataView이면, copyLength를
dstBuffer.byteLength - dstOffset로 둔다. 아래 텍스트의 typed elements는 bytes이다.
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)를 복사하며,
buf는 byte index srcByteOffset에서 시작해 읽고
dstBuffer에는 element index dstOffset에서 시작해 쓴다.
copyLength가 0이면 dstBuffer에 data가 쓰이지 않지만,
이는 GL 오류가 생성되게 하지 않는다.
target에 WebGLBuffer가 바인딩되어 있지 않으면
INVALID_OPERATION 오류를 생성한다.
target이 TRANSFORM_FEEDBACK_BUFFER이고,
transform feedback object가 현재 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에 의해 순차적으로 쓰이고 읽히는 경우,
data가 일관되게 접근되도록 보장하는 것은 WebGL API의 책임이다. 이는 buffer가 현재
transform feedback binding point에 바인딩되어 있는 경우에도 적용된다.
이는 blocking operation이다. WebGL은 결과를 반환하기 위해 source buffer에 대한
이전 모든 writes를 완전히 끝내야 하기 때문이다.
multi-process WebGL 구현에서 getBufferSubData는
remote process에서 결과를 가져오기 위해 비용이 큰 inter-process round-trip도
발생시킬 수 있다.
사용자는 buffer에서 다시 읽을 의도를 알림으로써 이러한 비용을 피할 수 있다:
fenceSync를 삽입하고,
getBufferSubData operation을 수행하기 전에 그것이 통과하기를 기다린다.
_READ usage hint로 할당한다.
(_READ usage hint로 할당된 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 Object Attachments를 보라.
attach된 renderbuffers 사이에서 RENDERBUFFER_SAMPLES 값이 다르거나,
attach된 images가 renderbuffers와 textures의 혼합이고 그 값이 0이 아니면
FRAMEBUFFER_INCOMPLETE_MULTISAMPLE을 반환한다.
attach된 images의 width, height 및 depth(3D textures의 경우) 또는 array size
(2D array textures의 경우)가 서로 다르면 FRAMEBUFFER_INCOMPLETE_DIMENSIONS를
반환한다. checkFramebufferStatus may return
FRAMEBUFFER_INCOMPLETE_DIMENSIONS를 보라.
같은 image가 둘 이상의 color attachment point에 attach되어 있으면
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에 attach되어 있으면, INVALID_OPERATION
오류를 생성한다. 자세한 논의는 Framebuffer Object 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 page)
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 page)
texture가 이 컨텍스트와 다른 WebGL2RenderingContext에 의해
생성되었다면 INVALID_OPERATION 오류를 생성한다.
void invalidateFramebuffer(GLenum target, sequence<GLenum> attachments) (OpenGL ES 3.0.6 §4.5, man page)
x와 y를 0으로 설정하고 width와
height를 가장 큰 framebuffer object 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 page)
void readBuffer(GLenum src) (OpenGL ES 3.0.6 §4.3.1, man page)
any getInternalformatParameter(GLenum target, GLenum internalformat, GLenum pname) (OpenGL ES 3.0.6 §6.1.15, man page)
| pname | 반환 타입 |
|---|---|
| SAMPLES | Int32Array |
pname이 위 표에 없으면 INVALID_ENUM 오류를 생성한다.
OpenGL 오류가 생성되면 null을 반환한다.
SAMPLES에 대한 각 쿼리는 새 typed array object instance를 반환한다.
| 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 page)
specification 및 man page에 자세히 설명된 OpenGL ES 3.0의 internal formats를 허용한다.
WebGL 1과 backward compatible하기 위해 internal format DEPTH_STENCIL도
허용하며, 구현은 이를 DEPTH24_STENCIL8로 mapping해야 한다.
void renderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) (OpenGL ES 3.0.6 §4.4.2.1, man page)
`internalFormat == DEPTH_STENCIL && samples > 0`일 때 INVALID_OPERATION을 생성한다.
Texture objects는 texturing operations를 위한 storage와 state를 제공한다. WebGLTexture가
바인딩되어 있지 않으면(예: bindTexture에 null 또는 0을 전달), texture object를 수정하거나
쿼리하려는 시도는 INVALID_OPERATION 오류를 생성해야 한다. 이는
OpenGL ES 3.0 명세가 함수가 default 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 page)
texStorage2D는 texImage2D에 대한
선호되는 대안으로 간주되어야 한다. 일부 구현에서는 texImage2D보다
memory cost가 낮을 수 있다.
void texStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) (OpenGL ES 3.0.6 §3.8.4, man page)
WebGL 1.0의 texImage2D와의 차이점만 여기에 설명한다.
WebGLBuffer가 PIXEL_UNPACK_BUFFER target에 바인딩되어 있으면
INVALID_OPERATION 오류를 생성한다.
Sized internal formats는 WebGL 2.0에서 지원되며 internalformat은 더 이상 format과 같을 필요가 없다. 대신 internalformat, format, 및 type의 조합은 man page의 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 지점에서 시작된다. (Elements는 Uint8Array의 경우 bytes, Int32Array의 경우 int32s 등이다.)
srcOffset에서 시작하여 srcData에 충분한 data가 없으면
INVALID_OPERATION을 생성한다.
WebGL 1.0의 texImage2D와의 차이점만 여기에 설명한다.
WebGL 2.0에서 도입된 새 formats로의 변환은 다음 표에 따라 수행된다.
| Source DOM Image Format | Target WebGL Format | |
|---|---|---|
| RED | RG | |
| Grayscale (1 channel) | R = sourceGray |
R = sourceGray G = 0 |
| Grayscale + Alpha (2 channels) | R = sourceGray |
R = sourceGray G = 0 |
| Color (3 channels) Color + Alpha (4 channels) |
R = sourceRed |
R = sourceRed G = sourceGreen |
elements의 subregions 업로드는 Pixel
store parameters for uploads from TexImageSource에 자세히 설명되어 있다.
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의 representation은 적어도 8 bits의 unsigned integer
type이다. 그러한 representation을 signed integers 또는 더 많은 bits를 가진
unsigned integers로 변환하는 것은 명확히 정의되어 있지 않다. 예를 들어, RGBA8을
RGBA16UI로 변환할 때, 의도가 값을 16-bit unsigned integer의 전체 범위로 scale up하는
것인지 아닌지는 명확하지 않다. 따라서 최대 8 bits의 unsigned integer, half float,
또는 float로의 변환만 허용된다.
PIXEL_UNPACK_BUFFER target에 바인딩된 WebGLBuffer에서 현재 바인딩된
WebGLTexture로 data를 업로드한다.
offset은 WebGLBuffer의 data store 안의 byte offset이다. 0보다 작으면
INVALID_VALUE를 생성한다.
format, type, 및 WebGLTexture의 internal format의 조합은 man page의 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 page의 Table 1 또는 2에 나열되어 있어야 한다.
srcData의 타입은 위 표에 따라 type과 일치해야 한다.
그렇지 않으면 INVALID_OPERATION 오류를 생성한다.
이 함수의 동작에 영향을 주는 WebGL-specific pixel storage parameters는 Pixel Storage Parameters를 보라.
pixel store parameter constraints가 충족되지 않으면
INVALID_OPERATION 오류를 생성한다.
srcData에서 읽기는 srcData 안의 srcOffset
elements 지점에서 시작된다. (Elements는 Uint8Array의 경우 bytes, Int32Array의 경우 int32s 등이다.)
srcOffset에서 시작하여 srcData에 충분한 data가 없으면
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 page)
WebGL 1.0의 texSubImage2D와의 차이점만 여기에 설명한다.
elements의 subregions 업로드는 Pixel
store parameters for uploads from TexImageSource에 자세히 설명되어 있다.
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 page)
PIXEL_UNPACK_BUFFER target에 바인딩된 WebGLBuffer의 data로 현재 바인딩된
WebGLTexture의 sub-rectangle을 업데이트한다.
offset은 WebGLBuffer의 data store 안의 byte offset이다. 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 page)
three-dimensional 또는 two-dimensional array texture의 지정된 mipmap level을 할당하고 초기화한다.
WebGLBuffer가 PIXEL_UNPACK_BUFFER target에 바인딩되어 있으면
INVALID_OPERATION 오류를 생성한다.
srcData가 null이면, 0으로 초기화된 충분한 크기의 buffer가 전달된다.
internalformat, format, 및 type의 조합은 man page의 Table 1 또는 2에 나열되어 있어야 한다.
type이 FLOAT_32_UNSIGNED_INT_24_8_REV로 지정되면,
srcData는 null이어야 한다. 그렇지 않으면 INVALID_OPERATION
오류를 생성한다.
srcData가 non-null이면, srcData의 타입은
위 표에 따라 type과 일치해야 한다.
그렇지 않으면 INVALID_OPERATION 오류를 생성한다.
WebGLTexture가 바인딩되지 않은 상태(위 참조)에서 이 함수를 호출하려는 시도가
이루어지면 INVALID_OPERATION 오류를 생성한다.
이 함수의 동작에 영향을 주는 WebGL-specific pixel storage parameters는 Pixel Storage Parameters를 보라.
pixel store parameter constraints가 충족되지 않으면
INVALID_OPERATION 오류를 생성한다.
srcData에서 읽기는 srcData 안의 srcOffset
elements 지점에서 시작된다. (Elements는 Uint8Array의 경우 bytes, Int32Array의 경우 int32s 등이다.)
srcOffset에서 시작하여 srcData에 충분한 data가 없으면
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 page)
현재 바인딩된 WebGLTexture의 rectangular subregion을 업데이트한다.
elements의 subregions 업로드는 Pixel
store parameters for uploads from TexImageSource에 자세히 설명되어 있다.
format 및 type 인수의 해석과
UNPACK_PREMULTIPLY_ALPHA_WEBGL pixel storage parameter에 대한 참고는
texImage2D를 보라.
ImageBitmap 이외의 인수 타입으로 이 함수가 호출될 때 그 동작에 영향을 주는
WebGL-specific pixel storage parameters는
Pixel Storage Parameters를 보라.
source에서 WebGL 구현으로 전송되는 첫 번째 pixel은 source의 왼쪽 위 모서리에
해당한다. 이 동작은 위에서 언급한 섹션에 설명된 대로 ImageBitmap
인수를 제외하고 UNPACK_FLIP_Y_WEBGL
pixel storage parameter에 의해 수정된다.
format, type, 및 WebGLTexture의 internal format의 조합은 이 표에 나열되어 있어야 한다.
WebGLTexture가 바인딩되지 않은 상태(위 참조)에서 이 함수를 호출하려는 시도가
이루어지면 INVALID_OPERATION 오류를 생성한다.
WebGLBuffer가 PIXEL_UNPACK_BUFFER target에 바인딩되어 있으면
INVALID_OPERATION 오류를 생성한다.
이 함수가 data 속성이 neutered된 ImageData와 함께 호출되면
INVALID_VALUE 오류가 생성된다.
이 함수가 neutered된 ImageBitmap과 함께 호출되면
INVALID_VALUE 오류가 생성된다.
이 함수가 포함하는 Document의 origin과 다른 origin을 가진
HTMLImageElement 또는 HTMLVideoElement와 함께 호출되거나,
bitmap의 origin-clean flag가 false로 설정된 HTMLCanvasElement,
ImageBitmap, 또는 OffscreenCanvas와 함께 호출되면,
SECURITY_ERR 예외가 반드시 throw되어야 한다. Origin
Restrictions를 보라.
PIXEL_UNPACK_BUFFER target에 바인딩된 WebGLBuffer에서 현재 바인딩된
WebGLTexture로 data를 업로드한다.
offset은 WebGLBuffer의 data store 안의 byte offset이다. 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 page)
현재 바인딩된 WebGLTexture의 rectangular subregion을 업데이트한다.
WebGLTexture가 바인딩되지 않은 상태(위 참조)에서 이 함수를 호출하려는 시도가
이루어지면 INVALID_OPERATION 오류를 생성한다.
WebGLBuffer가 PIXEL_UNPACK_BUFFER target에 바인딩되어 있으면
INVALID_OPERATION 오류를 생성한다.
format, type, 및 WebGLTexture의 internal format의 조합은 man page의 Table 1 또는 2에 나열되어 있어야 한다.
type이 FLOAT_32_UNSIGNED_INT_24_8_REV이면
INVALID_ENUM 오류를 생성한다.
srcData의 타입은 위 표에 따라 type과 일치해야 한다.
그렇지 않으면 INVALID_OPERATION 오류를 생성한다.
srcData가 non-null이지만 그 크기가 지정된
width, height, depth, format, type, 및
pixel storage parameters에 필요한 것보다 작으면 INVALID_OPERATION 오류를
생성한다.
이 함수의 동작에 영향을 주는 WebGL-specific pixel storage parameters는 Pixel Storage Parameters를 보라.
pixel store parameter constraints가 충족되지 않으면
INVALID_OPERATION 오류를 생성한다.
srcData에서 읽기는 srcData 안의 srcOffset
elements 지점에서 시작된다. (Elements는 Uint8Array의 경우 bytes, Int32Array의 경우 int32s 등이다.)
srcOffset에서 시작하여 srcData에 충분한 data가 없으면
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 page)
현재 바인딩된 WebGLTexture의 rectangular subregion을 업데이트한다.
elements의 subregions 업로드는 Pixel
store parameters for uploads from TexImageSource에 자세히 설명되어 있다.
format 및 type 인수의 해석과
UNPACK_PREMULTIPLY_ALPHA_WEBGL pixel storage parameter에 대한 참고는
texImage2D를 보라.
ImageBitmap 이외의 인수 타입으로 이 함수가 호출될 때 그 동작에 영향을 주는
WebGL-specific pixel storage parameters는
Pixel Storage Parameters를 보라.
source에서 WebGL 구현으로 전송되는 첫 번째 pixel은 source의 왼쪽 위 모서리에
해당한다. 이 동작은 위에서 언급한 섹션에 설명된 대로 ImageBitmap
인수를 제외하고 UNPACK_FLIP_Y_WEBGL
pixel storage parameter에 의해 수정된다.
format, type, 및 WebGLTexture의 internal format의 조합은 이 표에 나열되어 있어야 한다.
WebGLTexture가 바인딩되지 않은 상태(위 참조)에서 이 함수를 호출하려는 시도가
이루어지면 INVALID_OPERATION 오류를 생성한다.
WebGLBuffer가 PIXEL_UNPACK_BUFFER target에 바인딩되어 있으면
INVALID_OPERATION 오류를 생성한다.
이 함수가 data 속성이 neutered된 ImageData와 함께 호출되면
INVALID_VALUE 오류가 생성된다.
이 함수가 neutered된 ImageBitmap과 함께 호출되면
INVALID_VALUE 오류가 생성된다.
이 함수가 포함하는 Document의 origin과 다른 origin을 가진
HTMLImageElement 또는 HTMLVideoElement와 함께 호출되거나,
bitmap의 origin-clean flag가 false로 설정된 HTMLCanvasElement,
ImageBitmap, 또는 OffscreenCanvas와 함께 호출되면,
SECURITY_ERR 예외가 반드시 throw되어야 한다. 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 page)
PIXEL_UNPACK_BUFFER target에 바인딩된 WebGLBuffer의 data로 현재 바인딩된
WebGLTexture의 sub-rectangle을 업데이트한다.
offset은 WebGLBuffer의 data store 안의 byte offset이다. 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 page)
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 page)
srcData에서 읽기는 srcData 안의 srcOffset
elements 지점에서 시작된다. (Elements는 Uint8Array의 경우 bytes, Int32Array의 경우 int32s 등이다.)
srcOffset > srcData.length이면 INVALID_VALUE 오류를 생성한다.
srcLengthOverride의 기본값은 srcData.length - srcOffset이다.
srcOffset에서 시작하여 srcData에 충분한 data가 없거나,
전달된 data의 양이 compressed image의 format, dimensions 및 contents와
일치하지 않으면 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 page)
srcData에서 읽기는 srcData 안의 srcOffset
elements 지점에서 시작된다. (Elements는 Uint8Array의 경우 bytes, Int32Array의 경우 int32s 등이다.)
srcOffset > srcData.length이면 INVALID_VALUE 오류를 생성한다.
srcLengthOverride의 기본값은 srcData.length - srcOffset이다.
srcOffset에서 시작하여 srcData에 충분한 data가 없거나,
전달된 data의 양이 compressed image의 format, dimensions 및 contents와
일치하지 않으면 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 page)
srcData에서 읽기는 srcData 안의 srcOffset
elements 지점에서 시작된다. (Elements는 Uint8Array의 경우 bytes, Int32Array의 경우 int32s 등이다.)
srcOffset > srcData.length이면 INVALID_VALUE 오류를 생성한다.
srcLengthOverride의 기본값은 srcData.length - srcOffset이다.
srcOffset에서 시작하여 srcData에 충분한 data가 없거나,
전달된 data의 양이 compressed image의 format, dimensions 및 contents와
일치하지 않으면 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 page)
srcData에서 읽기는 srcData 안의 srcOffset
elements 지점에서 시작된다. (Elements는 Uint8Array의 경우 bytes, Int32Array의 경우 int32s 등이다.)
srcOffset > srcData.length이면 INVALID_VALUE 오류를 생성한다.
srcLengthOverride의 기본값은 srcData.length - srcOffset이다.
srcOffset에서 시작하여 srcData에 충분한 data가 없거나,
전달된 data의 양이 compressed image의 format, dimensions 및 contents와
일치하지 않으면 INVALID_VALUE 오류를 생성한다.
이 섹션은 위 네 entry points에 적용된다.
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 page)
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 page)
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 page)
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 page)
이 섹션은 위 네 entry points에 적용된다.
WebGLTexture가 바인딩되지 않은 상태(위 참조)에서 이러한 함수를 호출하려는 시도가
이루어지면 INVALID_OPERATION 오류를 생성한다.
PIXEL_UNPACK_BUFFER target에 WebGLBuffer가 바인딩되어 있지 않으면
INVALID_OPERATION 오류를 생성한다.
offset은 WebGLBuffer의 data store 안의 byte offset이다. 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 page)
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 type | 반환 타입 |
|---|---|
| uint | GLuint |
| uvec2 | Uint32Array (2 elements 포함) |
| uvec3 | Uint32Array (3 elements 포함) |
| uvec4 | Uint32Array (4 elements 포함) |
| mat2x3 | Float32Array (6 elements 포함) |
| mat2x4 | Float32Array (8 elements 포함) |
| mat3x2 | Float32Array (6 elements 포함) |
| mat3x4 | Float32Array (12 elements 포함) |
| mat4x2 | Float32Array (8 elements 포함) |
| mat4x3 | Float32Array (12 elements 포함) |
| any sampler type | GLint |
WebGL 1.0과 공유되는 uniform types에 대해 반환되는 타입은 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 page)
location이 null이 아니고 현재 사용 중인 program에서 이전의
getUniformLocation 호출을 통해 얻어진 것이 아니라면,
INVALID_OPERATION 오류가 생성된다. 전달된
location이 null이면, 전달된 data는 조용히 무시되고 어떤 uniform
variables도 변경되지 않는다.
v로 끝나는 것들) 중 어느 것에 전달된 array가
invalid length를 가지면, INVALID_VALUE 오류가 생성된다. length는
할당된 type에 비해 너무 짧거나 정수 배수가 아니면 invalid이다.
srcLength arg가 있는 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 page)
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 page)
INVALID_OPERATION 오류가
생성된다. Buffer Offset
and Stride Requirements를 보라. offset이 음수이면 INVALID_VALUE 오류가
생성된다. ARRAY_BUFFER target에 WebGLBuffer가 바인딩되어 있지 않고 offset이
0이 아니면, 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 elements 포함) |
| VERTEX_ATTRIB_ARRAY_INTEGER | GLboolean |
| VERTEX_ATTRIB_ARRAY_DIVISOR | GLint |
CURRENT_VERTEX_ATTRIB의 경우, 반환 타입은 주어진 index에 대해 가장 최근에 호출된 vertexAttrib 계열 함수에 의해 결정된다. 즉, vertexAttribI4i*가 사용되었다면 반환 타입은 Int32Array이고, vertexAttribI4ui*가 사용되었다면 반환 타입은 Uint32Array이며, 그렇지 않으면 Float32Array이다.
sequences 또는 typed arrays를 반환하는 모든 쿼리는 매번 새 객체를 반환한다.
pname이 위 표에 없으면 INVALID_ENUM 오류를 생성한다.
OpenGL 오류가 생성되면 null을 반환한다.
void clear(GLbitfield mask) (OpenGL ES 3.0.6 §4.2.3, man page)
INVALID_OPERATION 오류가 생성되고 아무것도 clear되지 않는다.
void vertexAttribDivisor(GLuint index, GLuint divisor) (OpenGL ES 3.0.6 §2.9, man page)
index로 식별되는 vertex attribute가 drawing 중 advance하는 rate를 설정한다.
void drawArrays(GLenum mode, GLint first, GLsizei count) (OpenGL ES 3.0.6 §2.9.3, man page)
void drawElements(GLenum mode, GLsizei count, GLenum type, GLintptr offset) (OpenGL ES 3.0.6 §2.9.3, man page)
void drawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount) (OpenGL ES 3.0.6 §2.9.3, man page)
instanceCount개의 geometry instances를 그린다.
non-zero divisor를 가진 vertex attributes는 divisor instances마다 한 번 advance한다.void drawElementsInstanced(GLenum mode, GLsizei count, GLenum type, GLintptr offset, GLsizei instanceCount) (OpenGL ES 3.0.6 §2.9.3, man page)
instanceCount개의 geometry instances를 그린다.
non-zero divisor를 가진 vertex attributes는 divisor instances마다 한 번 advance한다.void drawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLintptr offset) (OpenGL ES 3.0.6 §2.9.3, man page)
drawElements에 대해 지정된 모든
error conditions가 적용된다.drawElements를
호출할 수 있다. 어느 경우에도 이 원인으로 GL 오류가 생성되어서는 안 된다.
drawElements, drawArrays, drawRangeElements 및 그
instanced variants 호출 중, WebGL 2.0은 OpenGL ES 3.0에 지정된 것 이상의 추가 error checking을 수행한다:
CURRENT_PROGRAM이 null이면 INVALID_OPERATION 오류가 생성된다;현재 framebuffer의 pixels는 ArrayBufferView 객체 또는 PIXEL_PACK_BUFFER
target에 바인딩된 WebGLBuffer로 다시 읽을 수 있다.
WebGL 1.0의 Reading back pixels와의 차이점만 여기에 설명한다.
WebGLBuffer가 PIXEL_PACK_BUFFER target에 바인딩되어 있으면
INVALID_OPERATION 오류를 생성한다.
pixel store parameter constraints가 충족되지 않으면
INVALID_OPERATION 오류를 생성한다.
dstData가 dstOffset에서 시작하는 read operation을 위한
충분한 공간을 갖지 않으면 INVALID_OPERATION을 생성한다.
이는 blocking operation이다. WebGL은 결과를 반환하기 위해 source framebuffer에 대한 이전 모든 rendering operations를 완전히 끝내야 하기 때문이다. multi-process WebGL 구현에서는 remote process에서 결과를 가져오기 위해 비용이 큰 inter-process round-trip도 발생한다.
대신 PIXEL_PACK_BUFFER로 readPixels를 사용하는 것을
고려하라. 해당 buffer에서 data를 읽으려면 getBufferSubData를
사용하라.
(그 호출에서 blocking을 피하는 방법은 getBufferSubData를 보라.)
PIXEL_PACK_BUFFER target에 WebGLBuffer가 바인딩되어 있지 않으면
INVALID_OPERATION 오류를 생성한다.
offset은 WebGLBuffer의 data store 안의 byte offset이다. 0보다 작으면
INVALID_VALUE 오류를 생성한다. pixel store modes를 고려했을 때
WebGLBuffer의 data store 나머지가 지정된 rectangle의 모든 pixels를 가져오기에
충분히 크지 않으면, INVALID_OPERATION을 생성한다.
void drawBuffers(sequence<GLenum> buffers) (OpenGL ES 3.0.6 §4.2.1, man page)
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 page) 이들은 [Draw Operations]이다.
clearBuffer 함수는 color buffer의 타입에 따라 달라지며,
다음 표에 제시되어 있다:
| buffer의 타입 | clearBuffer 함수 |
|---|---|
| floating point | clearBufferfv |
| fixed point | clearBufferfv |
| signed integer | clearBufferiv |
| unsigned integer | clearBufferuiv |
buffer가 COLOR_BUFFER이고 함수가 위 표에 따라 선택되지 않으면,
INVALID_OPERATION 오류가 생성되고 아무것도 clear되지 않는다.
ArrayBufferView entrypoints의 경우, srcOffset에서 시작하여
values에 충분한 elements가 없으면 INVALID_VALUE를 생성한다.
clearBufferfi는 depth 및 stencil buffers를 clear하는 데 사용할 수 있다.
buffer는 DEPTH_STENCIL이어야 하고 drawBuffer는
zero여야 한다. depth 및 stencil은 각각 depth 및 stencil 값이다.
이 함수가 complete framebuffer의 missing attachment를 clear하려고 하면, Drawing to a Missing Attachment에 따라 아무것도 clear되지 않고 오류도 생성되지 않는다.
WebGLQuery createQuery() (OpenGL ES 3.0.6 §2.14, man page)
void deleteQuery(WebGLQuery? query) (OpenGL ES 3.0.6 §2.14, man page)
query가 이 컨텍스트와 다른 WebGL2RenderingContext에 의해
생성되었다면 INVALID_OPERATION 오류를 생성한다. WebGLQuery 안에 포함된 query object를
glDeleteQueries를 호출한 것처럼 deletion 대상으로 표시한다.
객체가 이미 deletion 대상으로 표시되어 있다면, 이 호출은 아무 효과가 없다. underlying
GL object는 JS object가 destroyed될 때 자동으로 deletion 대상으로 표시되지만,
이 method는 authors가 객체를 일찍 deletion 대상으로 표시할 수 있게 한다는 점에 유의하라.
[WebGLHandlesContextLoss] GLboolean isQuery(WebGLQuery? query) (OpenGL ES 3.0.6 §6.1.7, man page)
WebGLQuery가 유효하면 true를 반환하고, 그렇지 않으면 false를 반환한다.WebGL2RenderingContext에 의해 생성되었다면 false를 반환한다. void beginQuery(GLenum target, WebGLQuery query) (OpenGL ES 3.0.6 §2.14, man page)
query가 이 컨텍스트와 다른 WebGL2RenderingContext에 의해
생성되었다면 INVALID_OPERATION 오류를 생성한다. void endQuery(GLenum target) (OpenGL ES 3.0.6 §2.14, man page)
getQueryParameter를 호출하여 result를 가져올 수 있다.
WebGLQuery? getQuery(GLenum target, GLenum pname) (OpenGL ES 3.0.6 §6.1.7, man page)
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 page)
query가 이 컨텍스트와 다른 WebGL2RenderingContext에 의해
생성되었다면 INVALID_OPERATION 오류를 생성한다. query object의 parameter pname을 반환한다. QUERY_RESULT는
query object의 passed samples counter 값을 반환한다.
QUERY_RESULT_AVAILABLE은 samples counter가 즉시 사용 가능한지 여부를
반환한다. 반환되는 타입은 요청된 pname에 대한 자연스러운 타입이며, 다음 표에
제시되어 있다:
| pname | 반환 타입 |
|---|---|
| QUERY_RESULT | GLuint |
| QUERY_RESULT_AVAILABLE | GLboolean |
pname이 위 표에 없으면 INVALID_ENUM
오류를 생성하고 null을 반환한다.
query가 유효한 query object가 아니거나, 현재 active query object이면,
INVALID_OPERATION 오류를 생성하고 null을 반환한다.
이 함수의 실행 중 OpenGL 오류가 생성되면 null을 반환한다.
platforms 전반에 걸친 일관된 동작을 보장하기 위해, queries의 results는 user agent의 event loop가 task를 실행 중이 아닐 때만 사용 가능하게 되어야 한다. 다시 말해:
WebGLSampler createSampler() (OpenGL ES 3.0.6 §3.8.2, man page)
WebGLSampler 객체를 생성하고, glGenSamplers를 호출한 것처럼
sampler object name으로 초기화한다.
void deleteSampler(WebGLSampler? sampler) (OpenGL ES 3.0.6 §3.8.2, man page)
sampler가 이 컨텍스트와 다른 WebGL2RenderingContext에 의해
생성되었다면 INVALID_OPERATION 오류를 생성한다. WebGLSampler 안에 포함된 sampler object를,
glDeleteSamplers를 호출한 것처럼 deletion 대상으로 표시한다.
객체가 이미 deletion 대상으로 표시되어 있다면, 이 호출은 아무 효과가 없다. underlying
GL object는 JS object가 destroyed될 때 자동으로 deletion 대상으로 표시되지만,
이 method는 authors가 객체를 일찍 deletion 대상으로 표시할 수 있게 한다는 점에 유의하라.
[WebGLHandlesContextLoss] GLboolean isSampler(WebGLSampler? sampler) (OpenGL ES 3.0.6 §6.1.5, man page)
WebGLSampler가 유효하면 true를 반환하고,
그렇지 않으면 false를 반환한다. WebGL2RenderingContext에 의해
생성되었다면 false를 반환한다. void bindSampler(GLuint unit, WebGLSampler? sampler) (OpenGL ES 3.0.6 §3.8.2, man page)
sampler가 이 컨텍스트와 다른 WebGL2RenderingContext에 의해
생성되었다면 INVALID_OPERATION 오류를 생성한다. WebGLSampler 안에 포함된 sampler object를 전달된 index의 texture unit에
바인딩한다. sampler가 texture unit에 바인딩되어 있으면, sampler의 state가 해당 texture unit에
바인딩된 texture의 sampling state를 대체한다. sampler가 null이면,
현재 바인딩된 sampler가 texture unit에서 언바인딩된다. 하나의 sampler object는 동시에
여러 texture units에 바인딩될 수 있다. MAX_COMBINED_TEXTURE_IMAGE_UNITS 값보다 크거나 같으면,
INVALID_VALUE 오류를 생성한다.INVALID_OPERATION 오류를
생성하며, 현재 binding은 그대로 유지된다.
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 page)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 object가 아니면 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 object가 아니면 INVALID_OPERATION 오류를 생성한다.
이 함수의 실행 중 OpenGL 오류가 생성되면 null을 반환한다.
Sync objects는 GL server와 client 사이의 실행을 동기화하는 데 사용할 수 있다.
WebGLSync? fenceSync(GLenum condition, GLbitfield flags) (OpenGL ES 3.0.6 §5.2, man page)
[WebGLHandlesContextLoss] GLboolean isSync(WebGLSync? sync) (OpenGL ES 3.0.6 §6.1.8, man page)
WebGLSync가 유효하면 true를 반환하고, 그렇지 않으면 false를 반환한다. WebGL2RenderingContext에 의해 생성되었다면 false를 반환한다. void deleteSync(WebGLSync? sync) (OpenGL ES 3.0.6 §5.2, man page)
sync가 이 컨텍스트와 다른 WebGL2RenderingContext에 의해
생성되었다면 INVALID_OPERATION 오류를 생성한다. WebGLSync 안에 포함된 sync object를
glDeleteSync를 호출한 것처럼 deletion 대상으로 표시한다.
객체가 이미 deletion 대상으로 표시되어 있다면, 이 호출은 아무 효과가 없다. underlying
GL object는 JS object가 destroyed될 때 자동으로 deletion 대상으로 표시되지만,
이 method는 authors가 객체를 일찍 deletion 대상으로 표시할 수 있게 한다는 점에 유의하라.
GLenum clientWaitSync(WebGLSync sync, GLbitfield flags, GLuint64 timeout) (OpenGL ES 3.0.6 §5.2.1, man page)
sync가 이 컨텍스트와 다른 WebGL2RenderingContext에 의해
생성되었다면 INVALID_OPERATION 오류를 생성한다.
전달된 sync object가 signaled되거나 지정된 timeout이 경과할 때까지 실행을 block한다.
timeout의 단위는 nanoseconds이다.
네 가지 status values 중 하나를 반환한다. 반환값 ALREADY_SIGNALED는
clientWaitSync가 호출된 시점에 sync가 signaled되었음을
나타낸다. ALREADY_SIGNALED는 sync가 signaled되었다면
timeout이 zero였더라도 항상 반환된다. 반환값 TIMEOUT_EXPIRED는
sync가 signaled되기 전에 지정된 timeout period가 만료되었음을 나타낸다.
반환값 CONDITION_SATISFIED는 timeout이 만료되기 전에 sync가
signaled되었음을 나타낸다. 마지막으로 오류가 발생하면, 아래에 지정된 대로 오류를 생성하는 것에
더해, block하지 않고 WAIT_FAILED를 반환한다.
flags는 command flushing 동작을 제어하며
SYNC_FLUSH_COMMANDS_BIT를 포함할 수 있다. flags에 다른 bit가
설정되어 있으면 INVALID_OPERATION 오류가 생성된다.
flags에 SYNC_FLUSH_COMMANDS_BIT가 설정되어 있고
clientWaitSync가 호출될 때 sync가 unsignaled 상태이면,
sync에서 block하기 전에 flush와 동등한 작업이 수행된다.
differences section에서 논의한 대로, WebGL 구현은
main thread가 오랜 시간 block되는 것을 방지하기 위해 짧은 maximum timeout을 부과해야 한다.
implementation-defined timeout은 MAX_CLIENT_WAIT_TIMEOUT_WEBGL 인수로
getParameter를 호출하여 쿼리할 수 있다. timeout이 이
implementation-defined timeout보다 크면 INVALID_OPERATION 오류가 생성된다.
이 함수의 실행 중 OpenGL 오류가 생성되면 WAIT_FAILED를 반환한다.
platforms 전반에 걸친 일관된 동작을 보장하기 위해, sync objects는 user agent의 event loop가 task를 실행 중이 아닐 때만 signaled state로 transition할 수 있다. 다시 말해:
void waitSync(WebGLSync sync, GLbitfield flags, GLint64 timeout) (OpenGL ES 3.0.6 §5.2.1, man page)
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을 반환한다.
platforms 전반에 걸친 일관된 동작을 보장하기 위해, sync objects는 user agent의 event loop가 task를 실행 중이 아닐 때만 signaled state로 transition할 수 있다. 다시 말해:
Transform feedback mode는 vertex shader가 쓴 output variables의 값을 capture한다. vertices는 flatshading 및 clipping 전에 capture된다. 변환된 vertices는 하나 이상의 buffer objects에 저장된 뒤 선택적으로 discarded될 수도 있고, 추가 처리를 위해 clipping stage로 전달될 수도 있다. capture되는 output variables의 집합은 program이 linked될 때 결정된다.
default Transform Feedback object가 있으며, 이는 null
WebGLTransformFeedback handle로 표현된다.
context의 initial state에서 default object가 바인딩되어 있다.
바인딩되어 있을 때 getParameter(TRANSFORM_FEEDBACK_BINDING)은 null을 반환한다.
output variable이 transform feedback buffer object로 streamed되도록 지정되었지만 vertex shader가 실제로 쓰지 않았다면, 그 값은 0으로 설정된다. Transform feedback primitive capture를 보라.
WebGLTransformFeedback 객체를 생성하고,
glGenTransformFeedbacks를 호출한 것처럼 transform feedback object name으로 초기화한다.
transformFeedback가 이 컨텍스트와 다른 WebGL2RenderingContext에 의해
생성되었다면 INVALID_OPERATION 오류를 생성한다. WebGLTransformFeedback 안에 포함된
transform feedback object를 glDeleteTransformFeedbacks를 호출한 것처럼 deletion 대상으로 표시한다.
객체가 이미 deletion 대상으로 표시되어 있다면, 이 호출은 아무 효과가 없다. underlying
GL object는 JS object가 destroyed될 때 자동으로 deletion 대상으로 표시되지만,
이 method는 authors가 객체를 일찍 deletion 대상으로 표시할 수 있게 한다는 점에 유의하라.
WebGLTransformFeedback이 유효하면 true를 반환하고,
그렇지 않으면 false를 반환한다. WebGL2RenderingContext에 의해
생성되었다면 false를 반환한다. transformFeedback가 이 컨텍스트와 다른 WebGL2RenderingContext에 의해
생성되었다면 INVALID_OPERATION 오류를 생성한다. WebGLTransformFeedback 객체를 바인딩한다.
transformFeedback이 null이면, context가 제공하는 default transform feedback
object가 바인딩된다.
deletion 대상으로 표시된 객체를 바인딩하려는 시도는 INVALID_OPERATION 오류를
생성하며, 현재 binding은 그대로 유지된다.
program이 이 컨텍스트와 다른 WebGL2RenderingContext에 의해
생성되었다면 INVALID_OPERATION 오류를 생성한다. program이 이 컨텍스트와 다른 WebGL2RenderingContext에 의해
생성되었다면 INVALID_OPERATION 오류를 생성하고 null을 반환한다. Uniform buffer objects는 named uniform blocks를 위한 storage를 제공하므로, named uniform blocks 안의 active uniforms 값은 buffer object의 내용을 수정하여 변경될 수 있다.
buffer가 이 컨텍스트와 다른 WebGL2RenderingContext에 의해
생성되었다면 INVALID_OPERATION 오류를 생성한다. WebGLBuffer 객체를 target이 지정한 targets 배열의 index에 있는
binding point에 바인딩한다.
buffer가 이 컨텍스트와 다른 WebGL2RenderingContext에 의해
생성되었다면 INVALID_OPERATION 오류를 생성한다. offset 및 size로 표현되는
WebGLBuffer object buffer의 range를 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 name을 가져온다.
program이 이 컨텍스트와 다른 WebGL2RenderingContext에 의해
생성되었다면 INVALID_OPERATION 오류를 생성한다. Vertex Array objects(VAOs라고도 함)는 vertex processor가 사용하는 data의 정의와 관련된 모든 state를 캡슐화한다.
default Vertex Array object가 있으며, 이는 null WebGLVertexArrayObject
handle로 표현된다.
context의 initial state에서 default object가 바인딩되어 있다.
바인딩되어 있을 때 getParameter(VERTEX_ARRAY_BINDING)은 null을 반환한다.
vertexArray가 이 컨텍스트와 다른 WebGL2RenderingContext에 의해
생성되었다면 INVALID_OPERATION 오류를 생성한다. WebGLVertexArrayObject 객체를 바인딩한다.
vertexArray가 null이면, context가 제공하는 default vertex array가
바인딩된다.
deleted vertex array를 바인딩하려는 시도는 INVALID_OPERATION 오류를 생성하며,
현재 binding은 그대로 유지된다.
WebGLVertexArrayObject 객체를 생성하고, glGenVertexArrays를
호출한 것처럼 vertex array object name으로 초기화한다.
vertexArray가 이 컨텍스트와 다른 WebGL2RenderingContext에 의해
생성되었다면 INVALID_OPERATION 오류를 생성한다. WebGLVertexArrayObject 안에 포함된
vertex array object를 glDeleteVertexArrays를 호출한 것처럼 deletion 대상으로 표시한다.
객체가 이미 deletion 대상으로 표시되어 있다면, 이 호출은 아무 효과가 없다. underlying
GL object는 JS object가 destroyed될 때 자동으로 deletion 대상으로 표시되지만,
이 method는 authors가 객체를 일찍 deletion 대상으로 표시할 수 있게 한다는 점에 유의하라.
WebGLVertexArrayObject가 유효하면 true를 반환하고,
그렇지 않으면 false를 반환한다. WebGL2RenderingContext에 의해
생성되었다면 false를 반환한다. WebGL 2.0 API는 WebGL 1.0 API가 오류를 생성하는 경우와 다르게 동작할 수 있다. 오류를 생성하는 WebGL 1.0 API용 코드는 WebGL 2.0과 forward-compatible하다고 보장되지 않는다.
WebGL 1.0 API에서 지원되었을 수 있는 일부 extensions는 WebGL 2.0 API에서 제거되었다. 자세한 내용은 WebGL Extension Registry를 보라.
Texture access는 WebGL 2.0 API에서 OpenGL ES 3.0 API와 같이 동작한다. 다시 말해, WebGL 1.0 API와 달리 non power of 2 textures에 대한 특별한 제한이 없다. 모든 mipmapping 및 모든 wrapping modes가 non-power-of-two images에 대해 지원된다.
PRIMITIVE_RESTART_FIXED_INDEX is always enabled 섹션을 보라.
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 양쪽에 attach되어, 두 attachment points에 원래 attach되어 있던
images를 덮어쓴다.
다음과 같은 동작 sequence를 고려하라:
DEPTH_ATTACHMENT에 attach한다;DEPTH_STENCIL_ATTACHMENT에 attach한다;DEPTH_STENCIL_ATTACHMENT에 attach한다.DEPTH_ATTACHMENT에 attach하고
STENCIL_ATTACHMENT에는 image가 attach되지 않은 상태가 된다. 그러나 WebGL 2.0에서는
DEPTH_ATTACHMENT도 STENCIL_ATTACHMENT도 image가 attach되지 않는다.
Framebuffer Object Attachments에 정의된 constraints는 더 이상 WebGL 2.0에 적용되지 않는다.
서로 다른 images가 depth 및 stencil attachment points에 bind되어 있으면,
checkFramebufferStatus는 FRAMEBUFFER_UNSUPPORTED를 반환하고,
attachment가 DEPTH_STENCIL_ATTACHMENT인
getFramebufferAttachmentParameter는 INVALID_OPERATION 오류를 생성한다.
WebGL 1.0 API에서 texSubImage2D에 전달되는 type 인수는
texture object를 원래 정의할 때 사용된 type(즉, texImage2D 사용 시)과
일치해야 한다. WebGL 2.0 API에서는 이 제한이 해제되었다.
WebGL 1.0의
Reading Pixels Outside the Framebuffer에서는,
copyTexSubImage2D와 readPixels가 out-of-bound pixels에 대해
대응하는 destination range를 건드리지 않아야 한다.
WebGL 2.0에서 PACK_BUFFER 객체가 bind되어 있고
PACK_ROW_LENGTH가 0이 아니며 width보다 작거나,
또는 UNPACK_BUFFER 객체가 bind되어 있고
UNPACK_ROW_LENGTH가 0이 아니며 width보다 작거나
UNPACK_IMAGE_HEIGHT가 0이 아니며 height보다 작으면,
row/image를 packing/unpacking할 때 다음 row/image까지 확장될 수 있다. 해당
부분이 out-of-bounds이면 값은 그에 따라 변경될 수 있다.
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으로 변환되는 동안 drop될 수 있지만, 새 components는 추가될 수 없다.
getFramebufferAttachmentParameter가 pname
FRAMEBUFFER_ATTACHMENT_OBJECT_NAME과 함께 호출되고 attachment에
attach된 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이 사용하도록 reserved되어 있다. 이러한 prefixes로 시작하는 function, variable, structure name 또는 structure field를 선언하는 shader는 load가 허용되어서는 안 된다.
WebGL 1.0은 길이가 최대 256 characters인 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 characters인 tokens를 허용한다. 1024 characters보다 긴 tokens를 포함하는 shaders는 compile에 실패해야 한다.
WebGL 2.0은 uniform 및 attribute locations의 길이에 1024 characters 제한을 부과한다.
WebGL 2.0 API에서 non-zero divisor를 가진 vertex attributes는
drawArrays 및 drawElements 호출 중 advance하지 않는다.
(OpenGL
ES 3.0.6 §2.9.3)
이 섹션은 다양한 operating systems 및 devices 전반의 portability를 개선하기 위해 OpenGL ES 3.0 API에 비해 WebGL API에 적용된 변경 사항을 설명한다.
| WebGL buffer type | 이 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를
호출하면, bind되는 buffer의 WebGL buffer type이 위 표에 따라 설정된다. type이
undefined인 buffer를 COPY_READ_BUFFER 또는
COPY_WRITE_BUFFER binding points에 bind하면 그 type은 other data로
설정된다.
삭제된 buffer를 bind하려는 이러한 함수 중 하나에 대한 호출은
INVALID_OPERATION 오류를 생성하고, binding은 그대로 유지된다.
element array WebGL buffer type을 가진 WebGLBuffer를 other data에 속하는
binding point에 bind하려 하거나, other data WebGL buffer type을 가진 WebGLBuffer를
ELEMENT_ARRAY_BUFFER에 bind하려는 이러한 함수 중 하나에 대한 호출은
INVALID_OPERATION 오류를 생성하고, binding point의 state는 그대로 유지된다.
이 제한은 주어진 buffer object가 indices 또는 other data 중 하나만 포함할 수 있으며 둘 다 포함할 수는 없음을 의미한다.
이러한 제한은 WebGL 1.0 specification의 buffer object binding restrictions와 유사하다.
Buffer Object Binding 섹션에 지정된 것처럼
element array 및 other data WebGL buffer types를 가진 buffers 사이에서
copyBufferSubData를 사용해 복사하려고 하면
INVALID_OPERATION 오류가 생성되고 복사는 수행되지 않는다.
현재 bind된 transform feedback object 안의 indexed TRANSFORM_FEEDBACK_BUFFER binding point와
WebGL API의 다른 binding point에 동시에 bind되어 있는 buffer는,
generic TRANSFORM_FEEDBACK_BUFFER binding point를 제외하고, 사용할 수 없다. 이러한
double bound buffer를 사용하려는 모든 시도는 transform feedback이 enabled인지 여부와 관계없이
INVALID_OPERATION 오류로 실패한다. 예를 들어, buffer가 current transform feedback object에도
bind되어 있으면 PIXEL_PACK_BUFFER로의 readPixels는 실패한다.
같은 buffer가 active transform feedback 안에서 둘 이상의 indexed binding point에 bind되어 있는 경우,
beginTransformFeedback는 INVALID_OPERATION 오류를 생성한다.
SEPARATE_ATTRIBS mode에서만 발생할 수 있다.
MAX_COLOR_ATTACHMENTS parameter의 값은 MAX_DRAW_BUFFERS parameter의 값과 같아야 한다.
ESSL1 fragment shader가 gl_FragColor와 gl_FragData 어느 쪽에도 쓰지 않으면,
shader execution 이후 fragment colors의 값은 그대로 유지된다. ESSL3 fragment shader에서 대응하는
output variables가 정의되어 있지 않으면, shader execution 이후 fragment colors의 값은 그대로 유지된다.
모든 user-defined output variables는 shader execution 중 쓰이지 않으면 기본값이 zero가 된다.
draw buffer는 다음 경우 fragment shader와 "shader-output-incompatible"이다:
draw buffers 중 하나라도 "shader-output-incompatible"이면, draws는 다음 경우
INVALID_OPERATION을 생성한다:
colorMask의 임의의 channel이 true로 설정된 경우DRAW_FRAMEBUFFER의 각 DRAW_BUFFERi 중
"shader-output-incompatible"인 것에 대해:
DRAW_BUFFERi가 NONE이 아니고colorMaski가 true로 설정된 경우.
compiled shader programs의 binary representations에 접근하는 것은 WebGL 2.0 API에서 지원되지 않는다.
여기에는 OpenGL ES 3.0 GetProgramBinary, ProgramBinary, 및
ProgramParameteri entry points가 포함된다. 또한
getProgramParameter로 program binary length를 query하는 것과,
getParameter로 program binary formats를 query하는 것은 WebGL 2.0 API에서
지원되지 않는다.
WebGL 1.0 specification 섹션
Enabled Vertex Attributes and Range Checking에
지정된 range checking에 더해, drawElements, drawRangeElements 또는
drawElementsInstanced가 참조하는 indices가 MAX_ELEMENT_INDEX parameter보다
크면, bound buffer의 storage 안에 있더라도 draw call은 INVALID_OPERATION 오류를 생성한다.
primitive restart가 enabled인 경우 primitive restart를 trigger하는 indices에는 range checking이 수행되지 않는다.
WebGL 1.0 API에서 drawArrays에 대해 지정된 range checking은 WebGL 2.0 API의
drawArraysInstanced에도 적용된다.
WebGL 2.0 API에서 drawArrays, drawElements,
drawRangeElements 또는 그 instanced variants로 draw하려는 시도는,
draw command에 사용되는 program 안의 active uniform block 중 하나라도 충분히 큰 buffer object로
backed되어 있지 않으면 INVALID_OPERATION 오류를 생성한다.
WebGL에는 항상 default framebuffer가 있다. FRAMEBUFFER_UNDEFINED enumerant는
WebGL 2.0 API에서 제거되었다.
WebGL 2.0 API에서 enumerants ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH,
TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH, UNIFORM_BLOCK_NAME_LENGTH, 및
UNIFORM_NAME_LENGTH는 유사하게
WebGL 1.0 API에서 제거된 enumerants에 더해
제거되었다.
WebGL 2.0 API에서 지정된 clear value의 type과 clear되는 buffer의 type 사이에 mismatch가 있을 때
clear를 수행하려고 하면 undefined results를 생성하는 대신
INVALID_OPERATION 오류가 생성된다.
GLSL shader가 texture lookup function arguments에서 implementation-defined parameters
MIN_PROGRAM_TEXEL_OFFSET 및 MAX_PROGRAM_TEXEL_OFFSET가 지정한
범위 밖의 texture offset value를 사용하려고 하면, WebGL 2.0 API에서 compilation에 실패해야 한다.
OpenGL ES 3.0 API에서 undefined results를 가지는 texel fetches는 WebGL 2.0 API에서 zero를 반환해야 하며, 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)와의 consistency를 달성하기 위한 것이다.
OpenGL ES 3.0 API에서처럼, WebGL 2.0 API에서는 GLSL ES 3.00 shaders에 대해서만 multiple
fragment shader outputs가 지원된다.
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가 그만큼 큰 integer를 정확히 표현할 수 없기 때문이다. 같은 이유로
waitSync는 timeout에 대해 GLuint64 대신 GLint64 값을 받는다.
WebGL 2.0 API에서 WebGL 구현은 main thread의 실행이 과도하게 긴 시간 동안 block되는 것을 피하기 위해
clientWaitSync 호출에 대해 짧은 maximum timeout을 강제해야 한다. 이 timeout은
MAX_CLIENT_WAIT_TIMEOUT_WEBGL 인수로 getParameter를 호출하여 query할 수 있다.
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 spec 섹션 Attribute aliasing에서 허용한 대로 여전히 alias할 수 있다.
OpenGL ES 3.0에서 Enable/Disable로 제어되는
PRIMITIVE_RESTART_FIXED_INDEX context state는 WebGL
2.0에서 지원되지 않는다. 대신, WebGL 2.0은 이 state가 항상 enabled된 것처럼 동작한다.
이는 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에 대해 four-channel swizzle operation을 지정할 수 있게 하는
texture objects의 새 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가 그 program의 active variables 및 interface blocks의 properties를 enumerate하고 query하는 것을 허용한다 (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에서는 결과가 undefined이다 (OpenGL
ES 3.0.6 §3.9.2.3). WebGL에서는 대응하는 draw call에서
drawArrays, drawElements, drawArraysInstanced
, drawElementsInstanced , 및 drawRangeElements를 포함하여
INVALID_OPERATION 오류를 생성한다.
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에서 undefined이다
(OpenGL
ES Shading Language 3.00.6 §8.8).
WebGL에서는 대응하는 draw call에서
drawArrays, drawElements, drawArraysInstanced,
drawElementsInstanced , 및 drawRangeElements를 포함하여
INVALID_OPERATION 오류를 생성한다.
sampler type이 floating point이고 internal texture format이 normalized integer이면, 이는 match로 간주되며 반환되는 값은 [0, 1] 범위의 floating point로 변환된다.
OpenGL ES 3.0에서는 적절한 primitives(예: glFinish() 또는 다른
synchronous API)가 호출되면, query의 result가 발행된 동일 frame에서 사용 가능해질 수 있다.
WebGL에서는 application portability를 개선하기 위해 query가 발행된 동일 frame에서 query의 result가
application에 사용 가능해져서는 절대 안 된다. 논의 및 rationale은
getQueryParameter의 specification을 보라.
WebGL 1.0 specification section
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 specification은 uniform blocks에 대해 shared, packed,
및 std140 layout qualifiers를 지원하며, uniform buffers의 storage 안에 variables가
어떻게 laid out되는지를 정의한다. 이 중 WebGL 2.0 specification은
OpenGL
ES 3.0.6 §2.12 "Vertex Shaders", subsection "Standard Uniform Block
Layout"에 정의된 std140 layout만 지원한다. shared 또는
packed layout qualifiers를 사용하려는 shaders는 compilation 또는 linking stages 중 하나에서 실패한다.
compilation의 initial state는 다음이 선언된 것과 같다:
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 중 하나가 아니다. 그러나 Direct3D 11에서는
Windows에서 OpenGL ES 3 behavior가 그 위에서 emulated되며, 모든 render targets는 모든 dimensions에서
같은 size를 가져야 한다(msdn
manual
page 참조). DirectX 11 위에서 ES3 semantic을 emulation하는 것은 비효율적이다. platforms
전반에 걸쳐 일관된 WebGL 2.0 behaviors를 갖기 위해, 모든 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에만 exclusively 적용되는 경우에도 matched uniform blocks에서 일치해야 한다.
OpenGL ES 3.0에서 invalidateFramebuffer 또는 invalidateSubFramebuffer를
호출한 뒤, 영향을 받은 region의 contents는 사실상 undefined가 된다. WebGL 2.0에서는 contents가
unchanged 상태로 남거나 default values로 cleared되어야 한다.
(예: 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로 draw하려는 시도는
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로 streamed되도록 지정되었지만 vertex shader가 실제로 쓰지 않았다면, 그 값은 0으로 설정된다.
fragment shader가 gl_FragDepth에 정적으로 값을 할당하는 경우,
gl_FragDepth에 값을 할당하는 statements가 실행되지 않는 모든 fragment에서는 값 0이 사용된다.
image가 framebuffer 안에서 둘 이상의 color attachment point에 attach되어 있으면,
checkFramebufferStatus는 FRAMEBUFFER_UNSUPPORTED를 반환한다.
image는 individual mip level, array slice(2D array 또는 cube map textures 중 하나에서 온),
또는 3D texture slice일 수 있다.
UNPACK_ALIGNMENT 및 UNPACK_ROW_LENGTH는 무시된다.
UNPACK_ALIGNMENT는 bytes로 지정되며, TexImageSource objects에 대해 implicit하고
implementation-dependent이다. UNPACK_ROW_LENGTH는 현재 사용되지 않는다.
Subrect selection은 UNPACK_ params를 사용하여 가능하다.
UNPACK_SKIP_PIXELS 및 UNPACK_SKIP_ROWS는 subrect의 origin을 결정하며,
width 및 height arguments는 subrect의 size를 결정한다.
3D textures의 경우, width, height, 및 depth
arguments는 unpack할 texel array의 rectangular region을 지정한다.
UNPACK_SKIP_IMAGES 및 UNPACK_IMAGE_HEIGHT는
2D source에서 multiple slices를 선택할 수 있게 한다. UNPACK_IMAGE_HEIGHT는
두 slices 사이의 stride를 rows 단위로 결정한다. 예를 들어, 높이가 30 pixels인
TexImageSource는 height를 10으로, UNPACK_IMAGE_HEIGHT를 20으로,
depth를 2로 설정하여 upload함으로써 top 10 및 bottom 10 rows를 3D texture의
두 slices로 upload할 수 있다. UNPACK_IMAGE_HEIGHT가 0이면 두 slices 사이의 stride는
rows 단위로 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는 16x16 크기의 여섯 colors로 구성되어 있으며,
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의 첫 번째 slice는 red, 두 번째 slice는 blue, 세 번째 slice는 purple이다.
UNPACK_SKIP_PIXELS가 16, UNPACK_SKIP_ROWS가 0, 그리고
UNPACK_IMAGE_HEIGHT
가 16이면, texel array의 첫 번째 slice는 green, 두 번째 slice는 yellow, 세 번째 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가
bind되어 있지 않고 srcData가 null인 경우의 texImage2D에는 적용되지 않는다.
UNPACK_SKIP_PIXELS + width > DataStoreWidth 또는
UNPACK_SKIP_ROWS + height > DataStoreHeight이면, texImage3D
및 texSubImage3D는 INVALID_OPERATION 오류를 생성한다. 이는
PIXEL_UNPACK_BUFFER가 bind되어 있지 않고 srcData가 null인 경우의
texImage3D에는 적용되지 않는다.
이 constraints는 pixels가 저장되는 sub region을 지정하기 위해 이러한 parameters를 사용하는 방식을
normalize한다. 예를 들어 readPixels 경우, 전체 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는 OpenGL ES 3.0 DEQP test suites에서 test되지 않고 많은 drivers가 잘못 동작하는 row 및 image overlap 상황도 금지한다. 또한 random pixels 또는 rows를 skip하는 것도 금지하지만, 이는 data store offset을 그에 맞춰 조정하여 달성할 수 있다.
또한 TexImageSource에서 uploads하는 경우 implied
UNPACK_ROW_LENGTH 및 UNPACK_ALIGNMENT는 엄격히 정의되어 있지 않다.
이러한 restrictions는 implied 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에서 natively 지원되지 않는다. 따라서 이 formats를 지원하려면 WebGL implementation 또는 underlying driver에서 software decompression이 필요하다. 이는 video memory usage를 급격히 증가시켜 WebGL application에는 보이지 않는 performance losses를 일으킨다.
ETC2 및 EAC compressed texture formats를 natively 지원하는 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가 발행된 동일 frame에서
signaled state로 transition해서는 절대 안 된다.
논의 및 rationale은 getSyncParameter 및
clientWaitSync의 specification을 보라.
blitFramebuffer() src* 및 dst* parameters는 결과 source 및 destination rectangles의
width와 height가 GLint에 저장할 수 있는 maximum value보다 작거나 같도록 설정되어야 한다.
width 또는 height 값 중 하나를 GLint로 계산한 결과 integer overflow가 발생하는 경우,
blitFramebuffer()는 INVALID_VALUE 오류를 생성한다.
generateMipmap은 TEXTURE_BASE_LEVEL의 dimensions가 모두 positive일 것을 요구한다.
deleteQuery implicitly calls endQuery if the query is active
GLES에서 DeleteQueries는 queries가 active인 경우에도 implicitly end하지 않는다.
Implementations는 compressed texture formats의 suite 중 적어도 하나를 지원해야 한다.
Implementations는 다음을 지원해야 한다:
우리의 ecosystem을 가장 잘 지원하기 위해, implementations가 ETC2/EAC formats(GLES3 또는 유사 drivers, 예를 들어 많은 phones에서 보편적) 또는 S3TC formats(그 외 모든 drivers에서 보편적) 중 하나를 지원하도록 요구한다. 이는 authors가 모든 devices에서 compressed textures(srgb variants 포함)를 항상 사용할 수 있음을 보장하면서, 두 가지 format만큼 적은 수의 formats에 대한 support를 유지할 수 있게 한다.
각 suite에는 다음 uses에 대해 대략 equivalent한 formats가 있다:
| Usage | 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로 설정되어 있으면, 필요한 extensions 없이 LINEAR filtering을 사용하더라도 texture는 항상 complete하다. 그러나 LINEAR filtering이 발생하는지 여부는 implementation-defined이다. (Implementations는 대신 NEAREST sampling을 수행할 수 있다)
이 functionality는 GLES에서 underspecified되어 있다. 이는 흔하지만 보편적이지는 않다. 여기서는 liberal하게 선택하지만, implementations는 이 functionality에 대한 requests에 warning을 표시할 수 있다.
underlying platform이 동일하게 동작할 때 implementations는 store 시 constant blend color를 clamp할 수 있다.
Applications는 effective behavior를 확인하기 위해 BLEND_COLOR parameter를 query할 수 있다.
TRANSFORM_FEEDBACK_BUFFER generic buffer binding point는 per-object state가 아니라 context state로 이동되었다.
OpenGL ES 2.0 specification은 uninitialized data로 compressed 2D texture를 생성할 수 있어야 하는지 여부를 선언하지 않았다. WebGL 1.0에서는 이것이 명시적으로 disallowed된다.
OpenGL ES 3.0에서는 glCompressedTexImage2D에 null을 전달하여
uninitialized data로 compressed 2D texture를 생성하는 것이 명시적으로 허용된다. 그러나 WebGL 2.0에서는
이것이 여전히 명시적으로 disallowed된다. Users는 compressed internal format과 함께
texStorage2D를 사용하여 zero-initialized compressed textures를 allocate할 수 있다.
그러나 이러한 textures는 immutable이며, compressedTexImage2D를 통해 allocate된 textures와
완전히 compatible하지는 않다.