Skip to content

Instantly share code, notes, and snippets.

@codehz
Last active October 3, 2019 08:17
Show Gist options
  • Save codehz/1dc6ae02dafa547e5a88026b8252cff6 to your computer and use it in GitHub Desktop.
Save codehz/1dc6ae02dafa547e5a88026b8252cff6 to your computer and use it in GitHub Desktop.
declare module 'picogl' {
enum GL {
DEPTH_BUFFER_BIT = 0x00000100,
STENCIL_BUFFER_BIT = 0x00000400,
COLOR_BUFFER_BIT = 0x00004000,
POINTS = 0x0000,
LINES = 0x0001,
LINE_LOOP = 0x0002,
LINE_STRIP = 0x0003,
TRIANGLES = 0x0004,
TRIANGLE_STRIP = 0x0005,
TRIANGLE_FAN = 0x0006,
ZERO = 0,
ONE = 1,
SRC_COLOR = 0x0300,
ONE_MINUS_SRC_COLOR = 0x0301,
SRC_ALPHA = 0x0302,
ONE_MINUS_SRC_ALPHA = 0x0303,
DST_ALPHA = 0x0304,
ONE_MINUS_DST_ALPHA = 0x0305,
DST_COLOR = 0x0306,
ONE_MINUS_DST_COLOR = 0x0307,
SRC_ALPHA_SATURATE = 0x0308,
FUNC_ADD = 0x8006,
BLEND_EQUATION = 0x8009,
BLEND_EQUATION_RGB = 0x8009,
BLEND_EQUATION_ALPHA = 0x883d,
FUNC_SUBTRACT = 0x800a,
FUNC_REVERSE_SUBTRACT = 0x800b,
BLEND_DST_RGB = 0x80c8,
BLEND_SRC_RGB = 0x80c9,
BLEND_DST_ALPHA = 0x80ca,
BLEND_SRC_ALPHA = 0x80cb,
CONSTANT_COLOR = 0x8001,
ONE_MINUS_CONSTANT_COLOR = 0x8002,
CONSTANT_ALPHA = 0x8003,
ONE_MINUS_CONSTANT_ALPHA = 0x8004,
BLEND_COLOR = 0x8005,
ARRAY_BUFFER = 0x8892,
ELEMENT_ARRAY_BUFFER = 0x8893,
ARRAY_BUFFER_BINDING = 0x8894,
ELEMENT_ARRAY_BUFFER_BINDING = 0x8895,
STREAM_DRAW = 0x88e0,
STATIC_DRAW = 0x88e4,
DYNAMIC_DRAW = 0x88e8,
BUFFER_SIZE = 0x8764,
BUFFER_USAGE = 0x8765,
CURRENT_VERTEX_ATTRIB = 0x8626,
FRONT = 0x0404,
BACK = 0x0405,
FRONT_AND_BACK = 0x0408,
CULL_FACE = 0x0b44,
BLEND = 0x0be2,
DITHER = 0x0bd0,
STENCIL_TEST = 0x0b90,
DEPTH_TEST = 0x0b71,
SCISSOR_TEST = 0x0c11,
POLYGON_OFFSET_FILL = 0x8037,
SAMPLE_ALPHA_TO_COVERAGE = 0x809e,
SAMPLE_COVERAGE = 0x80a0,
NO_ERROR = 0,
INVALID_ENUM = 0x0500,
INVALID_VALUE = 0x0501,
INVALID_OPERATION = 0x0502,
OUT_OF_MEMORY = 0x0505,
CW = 0x0900,
CCW = 0x0901,
LINE_WIDTH = 0x0b21,
ALIASED_POINT_SIZE_RANGE = 0x846d,
ALIASED_LINE_WIDTH_RANGE = 0x846e,
CULL_FACE_MODE = 0x0b45,
FRONT_FACE = 0x0b46,
DEPTH_RANGE = 0x0b70,
DEPTH_WRITEMASK = 0x0b72,
DEPTH_CLEAR_VALUE = 0x0b73,
DEPTH_FUNC = 0x0b74,
STENCIL_CLEAR_VALUE = 0x0b91,
STENCIL_FUNC = 0x0b92,
STENCIL_FAIL = 0x0b94,
STENCIL_PASS_DEPTH_FAIL = 0x0b95,
STENCIL_PASS_DEPTH_PASS = 0x0b96,
STENCIL_REF = 0x0b97,
STENCIL_VALUE_MASK = 0x0b93,
STENCIL_WRITEMASK = 0x0b98,
STENCIL_BACK_FUNC = 0x8800,
STENCIL_BACK_FAIL = 0x8801,
STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802,
STENCIL_BACK_PASS_DEPTH_PASS = 0x8803,
STENCIL_BACK_REF = 0x8ca3,
STENCIL_BACK_VALUE_MASK = 0x8ca4,
STENCIL_BACK_WRITEMASK = 0x8ca5,
VIEWPORT = 0x0ba2,
SCISSOR_BOX = 0x0c10,
COLOR_CLEAR_VALUE = 0x0c22,
COLOR_WRITEMASK = 0x0c23,
UNPACK_ALIGNMENT = 0x0cf5,
PACK_ALIGNMENT = 0x0d05,
MAX_TEXTURE_SIZE = 0x0d33,
MAX_VIEWPORT_DIMS = 0x0d3a,
SUBPIXEL_BITS = 0x0d50,
RED_BITS = 0x0d52,
GREEN_BITS = 0x0d53,
BLUE_BITS = 0x0d54,
ALPHA_BITS = 0x0d55,
DEPTH_BITS = 0x0d56,
STENCIL_BITS = 0x0d57,
POLYGON_OFFSET_UNITS = 0x2a00,
POLYGON_OFFSET_FACTOR = 0x8038,
TEXTURE_BINDING_2D = 0x8069,
SAMPLE_BUFFERS = 0x80a8,
SAMPLES = 0x80a9,
SAMPLE_COVERAGE_VALUE = 0x80aa,
SAMPLE_COVERAGE_INVERT = 0x80ab,
COMPRESSED_TEXTURE_FORMATS = 0x86a3,
DONT_CARE = 0x1100,
FASTEST = 0x1101,
NICEST = 0x1102,
GENERATE_MIPMAP_HINT = 0x8192,
BYTE = 0x1400,
UNSIGNED_BYTE = 0x1401,
SHORT = 0x1402,
UNSIGNED_SHORT = 0x1403,
INT = 0x1404,
UNSIGNED_INT = 0x1405,
FLOAT = 0x1406,
DEPTH_COMPONENT = 0x1902,
ALPHA = 0x1906,
RGB = 0x1907,
RGBA = 0x1908,
LUMINANCE = 0x1909,
LUMINANCE_ALPHA = 0x190a,
UNSIGNED_SHORT_4_4_4_4 = 0x8033,
UNSIGNED_SHORT_5_5_5_1 = 0x8034,
UNSIGNED_SHORT_5_6_5 = 0x8363,
FRAGMENT_SHADER = 0x8b30,
VERTEX_SHADER = 0x8b31,
MAX_VERTEX_ATTRIBS = 0x8869,
MAX_VERTEX_UNIFORM_VECTORS = 0x8dfb,
MAX_VARYING_VECTORS = 0x8dfc,
MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8b4d,
MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8b4c,
MAX_TEXTURE_IMAGE_UNITS = 0x8872,
MAX_FRAGMENT_UNIFORM_VECTORS = 0x8dfd,
SHADER_TYPE = 0x8b4f,
DELETE_STATUS = 0x8b80,
LINK_STATUS = 0x8b82,
VALIDATE_STATUS = 0x8b83,
ATTACHED_SHADERS = 0x8b85,
ACTIVE_UNIFORMS = 0x8b86,
ACTIVE_ATTRIBUTES = 0x8b89,
SHADING_LANGUAGE_VERSION = 0x8b8c,
CURRENT_PROGRAM = 0x8b8d,
NEVER = 0x0200,
LESS = 0x0201,
EQUAL = 0x0202,
LEQUAL = 0x0203,
GREATER = 0x0204,
NOTEQUAL = 0x0205,
GEQUAL = 0x0206,
ALWAYS = 0x0207,
KEEP = 0x1e00,
REPLACE = 0x1e01,
INCR = 0x1e02,
DECR = 0x1e03,
INVERT = 0x150a,
INCR_WRAP = 0x8507,
DECR_WRAP = 0x8508,
VENDOR = 0x1f00,
RENDERER = 0x1f01,
VERSION = 0x1f02,
NEAREST = 0x2600,
LINEAR = 0x2601,
NEAREST_MIPMAP_NEAREST = 0x2700,
LINEAR_MIPMAP_NEAREST = 0x2701,
NEAREST_MIPMAP_LINEAR = 0x2702,
LINEAR_MIPMAP_LINEAR = 0x2703,
TEXTURE_MAG_FILTER = 0x2800,
TEXTURE_MIN_FILTER = 0x2801,
TEXTURE_WRAP_S = 0x2802,
TEXTURE_WRAP_T = 0x2803,
TEXTURE_2D = 0x0de1,
TEXTURE = 0x1702,
TEXTURE_CUBE_MAP = 0x8513,
TEXTURE_BINDING_CUBE_MAP = 0x8514,
TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515,
TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516,
TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517,
TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518,
TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519,
TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851a,
MAX_CUBE_MAP_TEXTURE_SIZE = 0x851c,
TEXTURE0 = 0x84c0,
TEXTURE1 = 0x84c1,
TEXTURE2 = 0x84c2,
TEXTURE3 = 0x84c3,
TEXTURE4 = 0x84c4,
TEXTURE5 = 0x84c5,
TEXTURE6 = 0x84c6,
TEXTURE7 = 0x84c7,
TEXTURE8 = 0x84c8,
TEXTURE9 = 0x84c9,
TEXTURE10 = 0x84ca,
TEXTURE11 = 0x84cb,
TEXTURE12 = 0x84cc,
TEXTURE13 = 0x84cd,
TEXTURE14 = 0x84ce,
TEXTURE15 = 0x84cf,
TEXTURE16 = 0x84d0,
TEXTURE17 = 0x84d1,
TEXTURE18 = 0x84d2,
TEXTURE19 = 0x84d3,
TEXTURE20 = 0x84d4,
TEXTURE21 = 0x84d5,
TEXTURE22 = 0x84d6,
TEXTURE23 = 0x84d7,
TEXTURE24 = 0x84d8,
TEXTURE25 = 0x84d9,
TEXTURE26 = 0x84da,
TEXTURE27 = 0x84db,
TEXTURE28 = 0x84dc,
TEXTURE29 = 0x84dd,
TEXTURE30 = 0x84de,
TEXTURE31 = 0x84df,
ACTIVE_TEXTURE = 0x84e0,
REPEAT = 0x2901,
CLAMP_TO_EDGE = 0x812f,
MIRRORED_REPEAT = 0x8370,
FLOAT_VEC2 = 0x8b50,
FLOAT_VEC3 = 0x8b51,
FLOAT_VEC4 = 0x8b52,
INT_VEC2 = 0x8b53,
INT_VEC3 = 0x8b54,
INT_VEC4 = 0x8b55,
BOOL = 0x8b56,
BOOL_VEC2 = 0x8b57,
BOOL_VEC3 = 0x8b58,
BOOL_VEC4 = 0x8b59,
FLOAT_MAT2 = 0x8b5a,
FLOAT_MAT3 = 0x8b5b,
FLOAT_MAT4 = 0x8b5c,
SAMPLER_2D = 0x8b5e,
SAMPLER_CUBE = 0x8b60,
VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622,
VERTEX_ATTRIB_ARRAY_SIZE = 0x8623,
VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624,
VERTEX_ATTRIB_ARRAY_TYPE = 0x8625,
VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886a,
VERTEX_ATTRIB_ARRAY_POINTER = 0x8645,
VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889f,
IMPLEMENTATION_COLOR_READ_TYPE = 0x8b9a,
IMPLEMENTATION_COLOR_READ_FORMAT = 0x8b9b,
COMPILE_STATUS = 0x8b81,
LOW_FLOAT = 0x8df0,
MEDIUM_FLOAT = 0x8df1,
HIGH_FLOAT = 0x8df2,
LOW_INT = 0x8df3,
MEDIUM_INT = 0x8df4,
HIGH_INT = 0x8df5,
FRAMEBUFFER = 0x8d40,
RENDERBUFFER = 0x8d41,
RGBA4 = 0x8056,
RGB5_A1 = 0x8057,
RGB565 = 0x8d62,
DEPTH_COMPONENT16 = 0x81a5,
STENCIL_INDEX = 0x1901,
STENCIL_INDEX8 = 0x8d48,
DEPTH_STENCIL = 0x84f9,
RENDERBUFFER_WIDTH = 0x8d42,
RENDERBUFFER_HEIGHT = 0x8d43,
RENDERBUFFER_INTERNAL_FORMAT = 0x8d44,
RENDERBUFFER_RED_SIZE = 0x8d50,
RENDERBUFFER_GREEN_SIZE = 0x8d51,
RENDERBUFFER_BLUE_SIZE = 0x8d52,
RENDERBUFFER_ALPHA_SIZE = 0x8d53,
RENDERBUFFER_DEPTH_SIZE = 0x8d54,
RENDERBUFFER_STENCIL_SIZE = 0x8d55,
FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8cd0,
FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8cd1,
FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8cd2,
FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8cd3,
COLOR_ATTACHMENT0 = 0x8ce0,
DEPTH_ATTACHMENT = 0x8d00,
STENCIL_ATTACHMENT = 0x8d20,
DEPTH_STENCIL_ATTACHMENT = 0x821a,
NONE = 0,
FRAMEBUFFER_COMPLETE = 0x8cd5,
FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8cd6,
FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8cd7,
FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8cd9,
FRAMEBUFFER_UNSUPPORTED = 0x8cdd,
FRAMEBUFFER_BINDING = 0x8ca6,
RENDERBUFFER_BINDING = 0x8ca7,
MAX_RENDERBUFFER_SIZE = 0x84e8,
INVALID_FRAMEBUFFER_OPERATION = 0x0506,
UNPACK_FLIP_Y_WEBGL = 0x9240,
UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241,
CONTEXT_LOST_WEBGL = 0x9242,
UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243,
BROWSER_DEFAULT_WEBGL = 0x9244,
READ_BUFFER = 0x0c02,
UNPACK_ROW_LENGTH = 0x0cf2,
UNPACK_SKIP_ROWS = 0x0cf3,
UNPACK_SKIP_PIXELS = 0x0cf4,
PACK_ROW_LENGTH = 0x0d02,
PACK_SKIP_ROWS = 0x0d03,
PACK_SKIP_PIXELS = 0x0d04,
COLOR = 0x1800,
DEPTH = 0x1801,
STENCIL = 0x1802,
RED = 0x1903,
RGB8 = 0x8051,
RGBA8 = 0x8058,
RGB10_A2 = 0x8059,
TEXTURE_BINDING_3D = 0x806a,
UNPACK_SKIP_IMAGES = 0x806d,
UNPACK_IMAGE_HEIGHT = 0x806e,
TEXTURE_3D = 0x806f,
TEXTURE_WRAP_R = 0x8072,
MAX_3D_TEXTURE_SIZE = 0x8073,
UNSIGNED_INT_2_10_10_10_REV = 0x8368,
MAX_ELEMENTS_VERTICES = 0x80e8,
MAX_ELEMENTS_INDICES = 0x80e9,
TEXTURE_MIN_LOD = 0x813a,
TEXTURE_MAX_LOD = 0x813b,
TEXTURE_BASE_LEVEL = 0x813c,
TEXTURE_MAX_LEVEL = 0x813d,
MIN = 0x8007,
MAX = 0x8008,
DEPTH_COMPONENT24 = 0x81a6,
MAX_TEXTURE_LOD_BIAS = 0x84fd,
TEXTURE_COMPARE_MODE = 0x884c,
TEXTURE_COMPARE_FUNC = 0x884d,
CURRENT_QUERY = 0x8865,
QUERY_RESULT = 0x8866,
QUERY_RESULT_AVAILABLE = 0x8867,
STREAM_READ = 0x88e1,
STREAM_COPY = 0x88e2,
STATIC_READ = 0x88e5,
STATIC_COPY = 0x88e6,
DYNAMIC_READ = 0x88e9,
DYNAMIC_COPY = 0x88ea,
MAX_DRAW_BUFFERS = 0x8824,
DRAW_BUFFER0 = 0x8825,
DRAW_BUFFER1 = 0x8826,
DRAW_BUFFER2 = 0x8827,
DRAW_BUFFER3 = 0x8828,
DRAW_BUFFER4 = 0x8829,
DRAW_BUFFER5 = 0x882a,
DRAW_BUFFER6 = 0x882b,
DRAW_BUFFER7 = 0x882c,
DRAW_BUFFER8 = 0x882d,
DRAW_BUFFER9 = 0x882e,
DRAW_BUFFER10 = 0x882f,
DRAW_BUFFER11 = 0x8830,
DRAW_BUFFER12 = 0x8831,
DRAW_BUFFER13 = 0x8832,
DRAW_BUFFER14 = 0x8833,
DRAW_BUFFER15 = 0x8834,
MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8b49,
MAX_VERTEX_UNIFORM_COMPONENTS = 0x8b4a,
SAMPLER_3D = 0x8b5f,
SAMPLER_2D_SHADOW = 0x8b62,
FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8b8b,
PIXEL_PACK_BUFFER = 0x88eb,
PIXEL_UNPACK_BUFFER = 0x88ec,
PIXEL_PACK_BUFFER_BINDING = 0x88ed,
PIXEL_UNPACK_BUFFER_BINDING = 0x88ef,
FLOAT_MAT2x3 = 0x8b65,
FLOAT_MAT2x4 = 0x8b66,
FLOAT_MAT3x2 = 0x8b67,
FLOAT_MAT3x4 = 0x8b68,
FLOAT_MAT4x2 = 0x8b69,
FLOAT_MAT4x3 = 0x8b6a,
SRGB = 0x8c40,
SRGB8 = 0x8c41,
SRGB8_ALPHA8 = 0x8c43,
COMPARE_REF_TO_TEXTURE = 0x884e,
RGBA32F = 0x8814,
RGB32F = 0x8815,
RGBA16F = 0x881a,
RGB16F = 0x881b,
VERTEX_ATTRIB_ARRAY_INTEGER = 0x88fd,
MAX_ARRAY_TEXTURE_LAYERS = 0x88ff,
MIN_PROGRAM_TEXEL_OFFSET = 0x8904,
MAX_PROGRAM_TEXEL_OFFSET = 0x8905,
MAX_VARYING_COMPONENTS = 0x8b4b,
TEXTURE_2D_ARRAY = 0x8c1a,
TEXTURE_BINDING_2D_ARRAY = 0x8c1d,
R11F_G11F_B10F = 0x8c3a,
UNSIGNED_INT_10F_11F_11F_REV = 0x8c3b,
RGB9_E5 = 0x8c3d,
UNSIGNED_INT_5_9_9_9_REV = 0x8c3e,
TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8c7f,
MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8c80,
TRANSFORM_FEEDBACK_VARYINGS = 0x8c83,
TRANSFORM_FEEDBACK_BUFFER_START = 0x8c84,
TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8c85,
TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8c88,
RASTERIZER_DISCARD = 0x8c89,
MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8c8a,
MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8c8b,
INTERLEAVED_ATTRIBS = 0x8c8c,
SEPARATE_ATTRIBS = 0x8c8d,
TRANSFORM_FEEDBACK_BUFFER = 0x8c8e,
TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8c8f,
RGBA32UI = 0x8d70,
RGB32UI = 0x8d71,
RGBA16UI = 0x8d76,
RGB16UI = 0x8d77,
RGBA8UI = 0x8d7c,
RGB8UI = 0x8d7d,
RGBA32I = 0x8d82,
RGB32I = 0x8d83,
RGBA16I = 0x8d88,
RGB16I = 0x8d89,
RGBA8I = 0x8d8e,
RGB8I = 0x8d8f,
RED_INTEGER = 0x8d94,
RGB_INTEGER = 0x8d98,
RGBA_INTEGER = 0x8d99,
SAMPLER_2D_ARRAY = 0x8dc1,
SAMPLER_2D_ARRAY_SHADOW = 0x8dc4,
SAMPLER_CUBE_SHADOW = 0x8dc5,
UNSIGNED_INT_VEC2 = 0x8dc6,
UNSIGNED_INT_VEC3 = 0x8dc7,
UNSIGNED_INT_VEC4 = 0x8dc8,
INT_SAMPLER_2D = 0x8dca,
INT_SAMPLER_3D = 0x8dcb,
INT_SAMPLER_CUBE = 0x8dcc,
INT_SAMPLER_2D_ARRAY = 0x8dcf,
UNSIGNED_INT_SAMPLER_2D = 0x8dd2,
UNSIGNED_INT_SAMPLER_3D = 0x8dd3,
UNSIGNED_INT_SAMPLER_CUBE = 0x8dd4,
UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8dd7,
DEPTH_COMPONENT32F = 0x8cac,
DEPTH32F_STENCIL8 = 0x8cad,
FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8dad,
FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210,
FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211,
FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212,
FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213,
FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214,
FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215,
FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216,
FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217,
FRAMEBUFFER_DEFAULT = 0x8218,
UNSIGNED_INT_24_8 = 0x84fa,
DEPTH24_STENCIL8 = 0x88f0,
UNSIGNED_NORMALIZED = 0x8c17,
DRAW_FRAMEBUFFER_BINDING = 0x8ca6,
READ_FRAMEBUFFER = 0x8ca8,
DRAW_FRAMEBUFFER = 0x8ca9,
READ_FRAMEBUFFER_BINDING = 0x8caa,
RENDERBUFFER_SAMPLES = 0x8cab,
FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8cd4,
MAX_COLOR_ATTACHMENTS = 0x8cdf,
COLOR_ATTACHMENT1 = 0x8ce1,
COLOR_ATTACHMENT2 = 0x8ce2,
COLOR_ATTACHMENT3 = 0x8ce3,
COLOR_ATTACHMENT4 = 0x8ce4,
COLOR_ATTACHMENT5 = 0x8ce5,
COLOR_ATTACHMENT6 = 0x8ce6,
COLOR_ATTACHMENT7 = 0x8ce7,
COLOR_ATTACHMENT8 = 0x8ce8,
COLOR_ATTACHMENT9 = 0x8ce9,
COLOR_ATTACHMENT10 = 0x8cea,
COLOR_ATTACHMENT11 = 0x8ceb,
COLOR_ATTACHMENT12 = 0x8cec,
COLOR_ATTACHMENT13 = 0x8ced,
COLOR_ATTACHMENT14 = 0x8cee,
COLOR_ATTACHMENT15 = 0x8cef,
FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8d56,
MAX_SAMPLES = 0x8d57,
HALF_FLOAT = 0x140b,
RG = 0x8227,
RG_INTEGER = 0x8228,
R8 = 0x8229,
RG8 = 0x822b,
R16F = 0x822d,
R32F = 0x822e,
RG16F = 0x822f,
RG32F = 0x8230,
R8I = 0x8231,
R8UI = 0x8232,
R16I = 0x8233,
R16UI = 0x8234,
R32I = 0x8235,
R32UI = 0x8236,
RG8I = 0x8237,
RG8UI = 0x8238,
RG16I = 0x8239,
RG16UI = 0x823a,
RG32I = 0x823b,
RG32UI = 0x823c,
VERTEX_ARRAY_BINDING = 0x85b5,
R8_SNORM = 0x8f94,
RG8_SNORM = 0x8f95,
RGB8_SNORM = 0x8f96,
RGBA8_SNORM = 0x8f97,
SIGNED_NORMALIZED = 0x8f9c,
COPY_READ_BUFFER = 0x8f36,
COPY_WRITE_BUFFER = 0x8f37,
COPY_READ_BUFFER_BINDING = 0x8f36,
COPY_WRITE_BUFFER_BINDING = 0x8f37,
UNIFORM_BUFFER = 0x8a11,
UNIFORM_BUFFER_BINDING = 0x8a28,
UNIFORM_BUFFER_START = 0x8a29,
UNIFORM_BUFFER_SIZE = 0x8a2a,
MAX_VERTEX_UNIFORM_BLOCKS = 0x8a2b,
MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8a2d,
MAX_COMBINED_UNIFORM_BLOCKS = 0x8a2e,
MAX_UNIFORM_BUFFER_BINDINGS = 0x8a2f,
MAX_UNIFORM_BLOCK_SIZE = 0x8a30,
MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8a31,
MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8a33,
UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8a34,
ACTIVE_UNIFORM_BLOCKS = 0x8a36,
UNIFORM_TYPE = 0x8a37,
UNIFORM_SIZE = 0x8a38,
UNIFORM_BLOCK_INDEX = 0x8a3a,
UNIFORM_OFFSET = 0x8a3b,
UNIFORM_ARRAY_STRIDE = 0x8a3c,
UNIFORM_MATRIX_STRIDE = 0x8a3d,
UNIFORM_IS_ROW_MAJOR = 0x8a3e,
UNIFORM_BLOCK_BINDING = 0x8a3f,
UNIFORM_BLOCK_DATA_SIZE = 0x8a40,
UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8a42,
UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8a43,
UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8a44,
UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8a46,
INVALID_INDEX = 0xffffffff,
MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122,
MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125,
MAX_SERVER_WAIT_TIMEOUT = 0x9111,
OBJECT_TYPE = 0x9112,
SYNC_CONDITION = 0x9113,
SYNC_STATUS = 0x9114,
SYNC_FLAGS = 0x9115,
SYNC_FENCE = 0x9116,
SYNC_GPU_COMMANDS_COMPLETE = 0x9117,
UNSIGNALED = 0x9118,
SIGNALED = 0x9119,
ALREADY_SIGNALED = 0x911a,
TIMEOUT_EXPIRED = 0x911b,
CONDITION_SATISFIED = 0x911c,
WAIT_FAILED = 0x911d,
SYNC_FLUSH_COMMANDS_BIT = 0x00000001,
VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88fe,
ANY_SAMPLES_PASSED = 0x8c2f,
ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8d6a,
SAMPLER_BINDING = 0x8919,
RGB10_A2UI = 0x906f,
INT_2_10_10_10_REV = 0x8d9f,
TRANSFORM_FEEDBACK = 0x8e22,
TRANSFORM_FEEDBACK_PAUSED = 0x8e23,
TRANSFORM_FEEDBACK_ACTIVE = 0x8e24,
TRANSFORM_FEEDBACK_BINDING = 0x8e25,
TEXTURE_IMMUTABLE_FORMAT = 0x912f,
MAX_ELEMENT_INDEX = 0x8d6b,
TEXTURE_IMMUTABLE_LEVELS = 0x82df,
TIMEOUT_IGNORED = -1,
MAX_CLIENT_WAIT_TIMEOUT_WEBGL = 0x9247,
QUERY_COUNTER_BITS_EXT = 0x8864,
TIME_ELAPSED_EXT = 0x88bf,
TIMESTAMP_EXT = 0x8e28,
GPU_DISJOINT_EXT = 0x8fbb,
TEXTURE_MAX_ANISOTROPY_EXT = 0x84fe,
MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84ff,
UNMASKED_VENDOR_WEBGL = 0x9245,
UNMASKED_RENDERER_WEBGL = 0x9246,
COMPLETION_STATUS_KHR = 0x91b1,
COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83f0,
COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83f1,
COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83f2,
COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83f3,
COMPRESSED_SRGB_S3TC_DXT1_EXT = 0x8c4c,
COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT = 0x8c4d,
COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT = 0x8c4e,
COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT = 0x8c4f,
COMPRESSED_R11_EAC = 0x9270,
COMPRESSED_SIGNED_R11_EAC = 0x9271,
COMPRESSED_RG11_EAC = 0x9272,
COMPRESSED_SIGNED_RG11_EAC = 0x9273,
COMPRESSED_RGB8_ETC2 = 0x9274,
COMPRESSED_SRGB8_ETC2 = 0x9275,
COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276,
COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277,
COMPRESSED_RGBA8_ETC2_EAC = 0x9278,
COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279,
COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8c00,
COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 0x8c01,
COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8c02,
COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 0x8c03,
COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93b0,
COMPRESSED_RGBA_ASTC_5x4_KHR = 0x93b1,
COMPRESSED_RGBA_ASTC_5x5_KHR = 0x93b2,
COMPRESSED_RGBA_ASTC_6x5_KHR = 0x93b3,
COMPRESSED_RGBA_ASTC_6x6_KHR = 0x93b4,
COMPRESSED_RGBA_ASTC_8x5_KHR = 0x93b5,
COMPRESSED_RGBA_ASTC_8x6_KHR = 0x93b6,
COMPRESSED_RGBA_ASTC_8x8_KHR = 0x93b7,
COMPRESSED_RGBA_ASTC_10x5_KHR = 0x93b8,
COMPRESSED_RGBA_ASTC_10x6_KHR = 0x93b9,
COMPRESSED_RGBA_ASTC_10x8_KHR = 0x93ba,
COMPRESSED_RGBA_ASTC_10x10_KHR = 0x93bb,
COMPRESSED_RGBA_ASTC_12x10_KHR = 0x93bc,
COMPRESSED_RGBA_ASTC_12x12_KHR = 0x93bd,
COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR = 0x93d0,
COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR = 0x93d1,
COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR = 0x93d2,
COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR = 0x93d3,
COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR = 0x93d4,
COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR = 0x93d5,
COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR = 0x93d6,
COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR = 0x93d7,
COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR = 0x93d8,
COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR = 0x93d9,
COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR = 0x93da,
COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR = 0x93db,
COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR = 0x93dc,
COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR = 0x93dd,
}
type WEBGL_INFO = {
MAX_TEXTURE_UNITS: GLint
MAX_UNIFORM_BUFFERS: GLint
MAX_UNIFORMS: GLint
SAMPLES: GLint
VENDOR: string
RENDERER: string
FLOAT_RENDER_TARGETS: boolean
LINEAR_FLOAT_TEXTURES: boolean
S3TC_TEXTURES: boolean
S3TC_SRGB_TEXTURES: boolean
ETC_TEXTURES: boolean
ASTC_TEXTURES: boolean
PVRTC_TEXTURES: boolean
LOSE_CONTEXT: boolean
DEBUG_SHADERS: boolean
GPU_TIMER: boolean
TEXTURE_ANISOTROPY: boolean
MAX_TEXTURE_ANISOTROPY: GLint
DEBUG_RENDERER_INFO: boolean
PARALLEL_SHADER_COMPILE: boolean
MULTI_DRAW_INSTANCED: boolean
}
export const PicoGL: {
readonly version: string
/** Create a PicoGL app. The app is the primary entry point to PicoGL. It stores the canvas, the WebGL context and all WebGL state. */
createApp(canvas: OffscreenCanvas | HTMLCanvasElement, attributes: WebGLContextAttributes): App
} & Readonly<WEBGL_INFO> &
{
readonly [key in keyof typeof GL]: (typeof GL)[key]
}
export default PicoGL
type GLReadPixelFormat = GL.STENCIL_INDEX | GL.DEPTH_COMPONENT | GL.RED | GL.ALPHA | GL.RGB | GL.RGBA | GL.LUMINANCE | GL.LUMINANCE_ALPHA
type GLInternalFormat =
| GL.R8
| GL.R8UI
| GL.R8I
| GL.R16UI
| GL.R16I
| GL.R32UI
| GL.R32I
| GL.RG8
| GL.RG8UI
| GL.RG8I
| GL.RG16UI
| GL.RG16I
| GL.RG32UI
| GL.RG32I
| GL.RGB8
| GL.RGBA8
| GL.SRGB8_ALPHA8
| GL.RGBA4
| GL.RGB565
| GL.RGB5_A1
| GL.RGB10_A2
| GL.RGBA8UI
| GL.RGBA8I
| GL.RGB10_A2UI
| GL.RGBA16UI
| GL.RGBA16I
| GL.RGBA32I
| GL.RGBA32UI
| GL.DEPTH_COMPONENT16
| GL.DEPTH_COMPONENT24
| GL.DEPTH_COMPONENT32F
| GL.DEPTH_STENCIL
| GL.DEPTH24_STENCIL8
| GL.DEPTH32F_STENCIL8
| GL.STENCIL_INDEX8
type GLType =
| GL.UNSIGNED_BYTE
| GL.UNSIGNED_SHORT_5_6_5
| GL.UNSIGNED_SHORT_4_4_4_4
| GL.UNSIGNED_SHORT_5_5_5_1
| GL.FLOAT
| GL.BYTE
| GL.UNSIGNED_INT_2_10_10_10_REV
| GL.HALF_FLOAT
| GL.SHORT
| GL.UNSIGNED_SHORT
| GL.INT
| GL.UNSIGNED_INT
| GL.UNSIGNED_INT_10F_11F_11F_REV
| GL.UNSIGNED_INT_5_9_9_9_REV
type GLMatrixType =
| GL.FLOAT_MAT2
| GL.FLOAT_MAT2x3
| GL.FLOAT_MAT2x4
| GL.FLOAT_MAT3
| GL.FLOAT_MAT3x2
| GL.FLOAT_MAT3x4
| GL.FLOAT_MAT4
| GL.FLOAT_MAT4x2
| GL.FLOAT_MAT4x3
type GLMagFilter = GL.NEAREST | GL.LINEAR
type GLMinFilter = GLMagFilter | GL.NEAREST_MIPMAP_NEAREST | GL.LINEAR_MIPMAP_NEAREST | GL.NEAREST_MIPMAP_LINEAR | GL.LINEAR_MIPMAP_LINEAR
type GLWrap = GL.CLAMP_TO_EDGE | GL.MIRRORED_REPEAT | GL.REPEAT
type GLCompareMode = GL.NONE | GL.COMPARE_REF_TO_TEXTURE
type GLCompareFunc = GL.LEQUAL | GL.GEQUAL | GL.LESS | GL.GREATER | GL.EQUAL | GL.NOTEQUAL | GL.ALWAYS | GL.NEVER
type GLBlend =
| GL.ZERO
| GL.ONE
| GL.SRC_COLOR
| GL.ONE_MINUS_SRC_COLOR
| GL.DST_COLOR
| GL.ONE_MINUS_DST_COLOR
| GL.SRC_ALPHA
| GL.ONE_MINUS_SRC_ALPHA
| GL.DST_ALPHA
| GL.ONE_MINUS_DST_ALPHA
| GL.CONSTANT_COLOR
| GL.ONE_MINUS_CONSTANT_COLOR
| GL.CONSTANT_ALPHA
| GL.ONE_MINUS_CONSTANT_ALPHA
| GL.SRC_ALPHA_SATURATE
type GLFace = GL.FRONT | GL.BACK | GL.FRONT_AND_BACK
type GLStencilOP = GL.KEEP | GL.ZERO | GL.REPLACE | GL.INCR | GL.INCR_WRAP | GL.DECR | GL.DECR_WRAP | GL.INVERT
type GLShaderType = GL.VERTEX_SHADER | GL.FRAGMENT_SHADER
type GLUsage =
| GL.STREAM_DRAW
| GL.STREAM_READ
| GL.STREAM_COPY
| GL.STATIC_DRAW
| GL.STATIC_READ
| GL.STATIC_COPY
| GL.DYNAMIC_DRAW
| GL.DYNAMIC_READ
| GL.DYNAMIC_COPY
type GLQueryType = GL.ANY_SAMPLES_PASSED | GL.ANY_SAMPLES_PASSED_CONSERVATIVE | GL.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
type GLTextTarget =
| GL.TEXTURE_2D
| GL.TEXTURE_CUBE_MAP_POSITIVE_X
| GL.TEXTURE_CUBE_MAP_NEGATIVE_X
| GL.TEXTURE_CUBE_MAP_POSITIVE_Y
| GL.TEXTURE_CUBE_MAP_NEGATIVE_Y
| GL.TEXTURE_CUBE_MAP_POSITIVE_Z
| GL.TEXTURE_CUBE_MAP_NEGATIVE_Z
type GLFrameBufferStatus =
| GL.FRAMEBUFFER_COMPLETE
| GL.FRAMEBUFFER_INCOMPLETE_ATTACHMENT
| GL.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
| GL.FRAMEBUFFER_INCOMPLETE_DIMENSIONS
| GL.FRAMEBUFFER_UNSUPPORTED
| GL.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE
| GL.RENDERBUFFER_SAMPLES
type GLBinding = GL.ARRAY_BUFFER | GL.ELEMENT_ARRAY_BUFFER
type GLPrimitive = GL.POINTS | GL.LINE_STRIP | GL.LINE_LOOP | GL.LINES | GL.TRIANGLE_STRIP | GL.TRIANGLE_FAN | GL.TRIANGLES
/** Blit options. */
interface BlitFramebufferOptions {
/** Source start x coordinate. */
srcStartX?: number
/** Source start y coordinate. */
srcStartY?: number
/** Source end x coordinate. */
srcEndX?: number
/** Source end y coordinate. */
srcEndY?: number
/** Destination start x coordinate. */
dstStartX?: number
/** Destination start y coordinate. */
dstStartY?: number
/** Destination end x coordinate. */
dstEndX?: number
/** Destination end y coordinate. */
dstEndY?: number
/** Sampling filter. */
filter?: GLMagFilter
}
interface ReadPixelOptions {
/** Type of data stored in the read framebuffer. */
type?: GLType
/** Read framebuffer data format. */
format?: GLReadPixelFormat
}
/** Texture2D options. */
interface Texture2DOptions {
/** Texture data internal format. Must be a sized format.
* @default PicoGL.RGBA8
*/
internalFormat?: GLInternalFormat
/** Type of data stored in the texture. Default based on **internalFormat**. */
type?: GLType
/** Whether the y-axis should be flipped when unpacking the texture.
* @default false
*/
flipY?: boolean
/** Whether the alpha channel should be pre-multiplied when unpacking the texture.
* @default false
*/
premultiplyAlpha?: boolean
/** Minification filter. Defaults to LINEAR_MIPMAP_NEAREST if image data is provided, NEAREST otherwise. */
minFilter?: GLMinFilter
/** Magnification filter. Defaults to LINEAR if image data is provided, NEAREST otherwise. */
magFilter?: GLMagFilter
/** Horizontal wrap mode.
* @default PicoGL.REPEAT
*/
wrapS?: GLWrap
/** Vertical wrap mode.
* @default PicoGL.REPEAT
*/
wrapT?: GLWrap
/** Comparison mode.
* @default PicoGL.NONE
*/
compareMode?: GLCompareMode
/** Comparison function.
* @default PicoGL.LEQUAL
*/
compareFunc?: GLCompareFunc
/** Base mipmap level. */
baseLevel?: GLint
/** Maximum mipmap level. */
maxLevel?: GLint
/** Mimimum level of detail. */
minLOD?: GLfloat
/** Maximum level of detail. */
maxLOD?: GLfloat
/** Maximum anisotropy in filtering. */
maxAnisotropy?: GLfloat
}
interface Texture3DOptions extends Texture2DOptions {
/** Depth wrap mode.
* @default PicoGL.REPEAT
*/
wrapR?: GLWrap
}
interface CubemapOptions extends Texture2DOptions {
/** The image data for the negative X direction. Can be any format that would be accepted by texImage2D. */
negX: CanvasImageSource | ArrayBufferView
/** The image data for the positive X direction. Can be any format that would be accepted by texImage2D. */
posX: CanvasImageSource | ArrayBufferView
/** The image data for the negative Y direction. Can be any format that would be accepted by texImage2D. */
negY: CanvasImageSource | ArrayBufferView
/** The image data for the positive Y direction. Can be any format that would be accepted by texImage2D. */
posY: CanvasImageSource | ArrayBufferView
/** The image data for the negative Z direction. Can be any format that would be accepted by texImage2D. */
negZ: CanvasImageSource | ArrayBufferView
/** The image data for the positive Z direction. Can be any format that would be accepted by texImage2D. */
posZ: CanvasImageSource | ArrayBufferView
/** Cubemap side width. Defaults to the width of negX if negX is an image. */
width?: number
/** Cubemap side height. Defaults to the height of negX if negX is an image. */
height?: number
}
/**
Primary entry point to PicoGL. An app will store all parts of the WebGL state.
*/
export interface App {
/** The canvas on which this app drawing. */
canvas: OffscreenCanvas | HTMLCanvasElement
/** The WebGL context. */
gl: WebGL2RenderingContext
/** The width of the drawing surface. */
width: number
/** The height of the drawing surface. */
height: number
/** Tracked GL state. */
state: {
// todo
}
/** Current clear mask to use with clear(). */
clearBits: GLbitfield
/**
* Simulate context loss.
* @method
* @return {App} The App object.
*/
loseContext(): this
/**
* Simulate context restoration.
* @method
* @return {App} The App object.
*/
restoreContext(): this
/**
* Set function to handle context restoration after loss.
* @method
* @param {function} fn Context restored handler.
* @return {App} The App object.
*/
onContextRestored(fn: () => void): this
/**
* Set the color mask to selectively enable or disable particular color channels while rendering.
* @method
* @param {boolean} r Red channel.
* @param {boolean} g Green channel.
* @param {boolean} b Blue channel.
* @param {boolean} a Alpha channel.
* @return {App} The App object.
*/
colorMask(r: number, g: number, b: number, a: number): this
/**
* Set the clear color.
* @method
* @param {number} r Red channel.
* @param {number} g Green channel.
* @param {number} b Blue channel.
* @param {number} a Alpha channel.
* @return {App} The App object.
*/
clearColor(r: number, g: number, b: number, a: number): this
/**
* Set the clear mask bits to use when calling clear().
* E.g. app.clearMask(PicoGL.COLOR_BUFFER_BIT).
* @method
* @param {GLbitfield} mask Bit mask of buffers to clear.
* @return {App} The App object.
*/
clearMask(mask: GLbitfield): this
/**
* Clear the canvas
* @method
* @return {App} The App object.
*/
clear(): this
/**
* Bind a draw framebuffer to the WebGL context.
* @method
* @param {Framebuffer} framebuffer The Framebuffer object to bind.
* @see Framebuffer
* @return {App} The App object.
*/
drawFramebuffer(framebuffer: Framebuffer): this
/**
* Bind a read framebuffer to the WebGL context.
* @method
* @param {Framebuffer} framebuffer The Framebuffer object to bind.
* @see Framebuffer
* @return {App} The App object.
*/
readFramebuffer(framebuffer: Framebuffer): this
/**
* Switch back to the default framebuffer for drawing (i.e. draw to the screen).
* Note that this method resets the viewport to match the default framebuffer.
* @method
* @return {App} The App object.
*/
defaultDrawFramebuffer(): this
/**
* Switch back to the default framebuffer for reading (i.e. read from the screen).
* @method
* @return {App} The App object.
*/
defaultReadFramebuffer(): this
/**
* Copy data from framebuffer attached to READ_FRAMEBUFFER to framebuffer attached to DRAW_FRAMEBUFFER.
* @method
* @param {GLbitfield} mask Write mask (e.g. PicoGL.COLOR_BUFFER_BIT).
* @param {Object} [options] Blit options.
* @return {App} The App object.
*/
blitFramebuffer(mask: GLbitfield, options?: BlitFramebufferOptions): this
/**
* Set the depth range.
* @method
* @param {number} near Minimum depth value.
* @param {number} far Maximum depth value.
* @return {App} The App object.
*/
depthRange(near: number, far: number): this
/**
* Enable depth testing.
* @method
* @return {App} The App object.
*/
depthTest(): this
/**
* Disable depth testing.
* @method
* @return {App} The App object.
*/
noDepthTest(): this
/**
* Enable or disable writing to the depth buffer.
* @method
* @param {boolean} mask The depth mask.
* @return {App} The App object.
*/
depthMask(mask: boolean): this
/**
* Set the depth test function. E.g. app.depthFunc(PicoGL.LEQUAL).
* @method
* @param {GLCompareFunc} func The depth testing function to use.
* @return {App} The App object.
*/
depthFunc(func: GLCompareFunc): this
/**
* Enable blending.
* @method
* @return {App} The App object.
*/
blend(): this
/**
* Disable blending
* @method
* @return {App} The App object.
*/
noBlend(): this
/**
* Set the blend function. E.g. app.blendFunc(PicoGL.ONE, PicoGL.ONE_MINUS_SRC_ALPHA).
* @method
* @param {GLBlend} src The source blending weight.
* @param {GLBlend} dest The destination blending weight.
* @return {App} The App object.
*/
blendFunc(src: GLBlend, dest: GLBlend): this
/**
* Set the blend function, with separate weighting for color and alpha channels.
* E.g. app.blendFuncSeparate(PicoGL.ONE, PicoGL.ONE_MINUS_SRC_ALPHA, PicoGL.ONE, PicoGL.ONE).
* @method
* @param {GLBlend} csrc The source blending weight for the RGB channels.
* @param {GLBlend} cdest The destination blending weight for the RGB channels.
* @param {GLBlend} asrc The source blending weight for the alpha channel.
* @param {GLBlend} adest The destination blending weight for the alpha channel.
* @return {App} The App object.
*/
blendFuncSeparate(csrc: GLBlend, cdest: GLBlend, asrc: GLBlend, adest: GLBlend): this
/**
* Enable stencil testing.
* NOTE: Only works if { stencil: true } passed as a context attribute when creating the App!
* @method
* @return {App} The App object.
*/
stencilTest(): this
/**
* Disable stencil testing.
* @method
* @return {App} The App object.
*/
noStencilTest(): this
/**
* Enable scissor testing.
* @method
* @return {App} The App object.
*/
scissorTest(): this
/**
* Disable scissor testing.
* @method
* @return {App} The App object.
*/
noScissorTest(): this
/**
* Define the scissor box.
* @method
* @return {App} The App object.
*/
scissor(x: number, y: number, width: number, height: number): this
/**
* Set the bitmask to use for tested stencil values.
* E.g. app.stencilMask(0xFF).
* NOTE: Only works if { stencil: true } passed as a context attribute when creating the App!
* @method
* @param {GLuint} mask The mask value.
* @return {App} The App object.
*/
stencilMask(mask: GLuint): this
/**
* Set the bitmask to use for tested stencil values for a particular face orientation.
* E.g. app.stencilMaskSeparate(PicoGL.FRONT, 0xFF).
* NOTE: Only works if { stencil: true } passed as a context attribute when creating the App!
* @method
* @param {GLFace} face The face orientation to apply the mask to.
* @param {GLuint} mask The mask value.
* @return {App} The App object.
*/
stencilMaskSeparate(face: GLFace, mask: GLuint): this
/**
* Set the stencil function and reference value.
* E.g. app.stencilFunc(PicoGL.EQUAL, 1, 0xFF).
* NOTE: Only works if { stencil: true } passed as a context attribute when creating the App!
* @method
* @param {GLCompareFunc} func The testing function.
* @param {number} ref The reference value.
* @param {GLuint} mask The bitmask to use against tested values before applying
* the stencil function.
* @return {App} The App object.
*/
stencilFunc(func: GLCompareFunc, ref: number, mask: GLuint): this
/**
* Set the stencil function and reference value for a particular face orientation.
* E.g. app.stencilFuncSeparate(PicoGL.FRONT, PicoGL.EQUAL, 1, 0xFF).
* NOTE: Only works if { stencil: true } passed as a context attribute when creating the App!
* @method
* @param {GLFace} face The face orientation to apply the function to.
* @param {GLCompareFunc} func The testing function.
* @param {number} ref The reference value.
* @param {GLuint} mask The bitmask to use against tested values before applying
* the stencil function.
* @return {App} The App object.
*/
stencilFuncSeparate(face: GLFace, func: GLCompareFunc, ref: number, mask: GLuint): this
/**
* Set the operations for updating stencil buffer values.
* E.g. app.stencilOp(PicoGL.KEEP, PicoGL.KEEP, PicoGL.REPLACE).
* NOTE: Only works if { stencil: true } passed as a context attribute when creating the App!
* @method
* @param {GLStencilOP} stencilFail Operation to apply if the stencil test fails.
* @param {GLStencilOP} depthFail Operation to apply if the depth test fails.
* @param {GLStencilOP} pass Operation to apply if the both the depth and stencil tests pass.
* @return {App} The App object.
*/
stencilOp(stencilFail: GLStencilOP, depthFail: GLStencilOP, pass: GLStencilOP): this
/**
* Set the operations for updating stencil buffer values for a particular face orientation.
* E.g. app.stencilOpSeparate(PicoGL.FRONT, PicoGL.KEEP, PicoGL.KEEP, PicoGL.REPLACE).
* NOTE: Only works if { stencil: true } passed as a context attribute when creating the App!
* @method
* @param {GLFace} face The face orientation to apply the operations to.
* @param {GLStencilOP} stencilFail Operation to apply if the stencil test fails.
* @param {GLStencilOP} depthFail Operation to apply if the depth test fails.
* @param {GLStencilOP} pass Operation to apply if the both the depth and stencil tests pass.
* @return {App} The App object.
*/
stencilOpSeparate(face: GLFace, stencilFail: GLStencilOP, depthFail: GLStencilOP, pass: GLStencilOP): this
/**
* Enable rasterization step.
* @method
* @return {App} The App object.
*/
rasterize(): this
/**
* Disable rasterization step.
* @method
* @return {App} The App object.
*/
noRasterize(): this
/**
* Enable backface culling.
* @method
* @return {App} The App object.
*/
cullBackfaces(): this
/**
* Disable backface culling.
* @method
* @return {App} The App object.
*/
drawBackfaces(): this
/**
* Read a pixel's color value from the currently-bound framebuffer.
* @method
* @param {number} x The x coordinate of the pixel.
* @param {number} y The y coordinate of the pixel.
* @param {ArrayBufferView} outColor Typed array to store the pixel's color.
* @param {object} [options] Options.
* @return {App} The App object.
*/
readPixel(x: number, y: number, outColor: ArrayBufferView, options?: ReadPixelOptions): this
/**
* Set the viewport.
* @method
* @param {number} x Left bound of the viewport rectangle.
* @param {number} y Lower bound of the viewport rectangle.
* @param {number} width Width of the viewport rectangle.
* @param {number} height Height of the viewport rectangle.
* @return {App} The App object.
*/
viewport(x: number, y: number, width: number, height: number): this
/**
* Set the viewport to the full canvas.
* @method
* @return {App} The App object.
*/
defaultViewport(): this
/**
* Resize the drawing surface.
* @method
* @param {number} width The new canvas width.
* @param {number} height The new canvas height.
* @return {App} The App object.
*/
resize(width: number, height: number): this
/**
* Create a program synchronously. It is highly recommended to use <b>createPrograms</b> instead as that method will compile shaders in parallel where possible.
* @method
* @param {Shader|string} vertexShader Vertex shader object or source code.
* @param {Shader|string} fragmentShader Fragment shader object or source code.
* @param {Array} [xformFeedbackVars] Transform feedback varyings.
* @return {Program} New Program object.
*/
createProgram(vsSource: Shader | string, fsSource: Shader | string, xformFeedbackVars?: string[]): Program
/**
* Create several programs. Preferred method for program creation as it will compile shaders
* in parallel where possible.
* @method
* @param {...Array} sources Variable number of 2 or 3 element arrays, each containing:
* <ul>
* <li> (Shader|string) Vertex shader object or source code.
* <li> (Shader|string) Fragment shader object or source code.
* <li> (Array - optional) Array of names of transform feedback varyings.
* </ul>
* @return {Promise} Promise that will resolve to an array of Programs when compilation and
* linking are complete for all programs.
*/
createPrograms(...sources: Array<[Shader | string, Shader | string] | [Shader | string, Shader | string, string[]]>): Promise<Program[]>
/**
* Restore several programs after a context loss. Will do so in parallel where available.
* @method
* @param {...Program} sources Variable number of programs to restore.
* @return {Promise} Promise that will resolve once all programs have been restored.
*/
restorePrograms(...programs: Program[]): Promise<void>
/**
* Create a shader. Creating a shader separately from a program allows for
* shader reuse.
* @method
* @param {GLShaderType} type Shader type.
* @param {string} source Shader source.
* @return {Shader} New Shader object.
*/
createShader(type: GLShaderType, source: string): Shader
/**
* Create a vertex array.
* @method
* @return {VertexArray} New VertexArray object.
*/
createVertexArray(): VertexArray
/**
* Create a transform feedback object.
* @method
* @return {TransformFeedback} New TransformFeedback object.
*/
createTransformFeedback(): TransformFeedback
/**
* Create a vertex buffer.
* @method
* @param {GLType} type The data type stored in the vertex buffer.
* @param {number} itemSize Number of elements per vertex.
* @param {ArrayBufferView|number} data Buffer data itself or the total number of elements to be allocated.
* @param {GLUsage} [usage=STATIC_DRAW] Buffer usage.
* @return {VertexBuffer} New VertexBuffer object.
*/
createVertexBuffer(type: GLType, itemSize: number, data: ArrayBufferView | number, usage?: GLUsage): VertexBuffer
/**
* Create a per-vertex matrix buffer. Matrix buffers ensure that columns
* are correctly split across attribute locations.
* @method
* @param {GLMatrixType} type The data type stored in the matrix buffer. Valid types
* are FLOAT_MAT4, FLOAT_MAT4x2, FLOAT_MAT4x3, FLOAT_MAT3, FLOAT_MAT3x2,
* FLOAT_MAT3x4, FLOAT_MAT2, FLOAT_MAT2x3, FLOAT_MAT2x4.
* @param {ArrayBufferView} data Matrix buffer data.
* @param {GLUsage} [usage=STATIC_DRAW] Buffer usage.
* @return {VertexBuffer} New VertexBuffer object.
*/
createMatrixBuffer(type: GLMatrixType, data: ArrayBufferView, usage?: GLUsage): VertexBuffer
/**
* Create an buffer without any structure information. Structure
* must be fully specified when binding to a VertexArray.
* @method
* @param {number} bytesPerVertex Number of bytes per vertex.
* @param {ArrayBufferView|number} data Buffer data itself or the total
* number of bytes to be allocated.
* @param {GLUsage} [usage=STATIC_DRAW] Buffer usage.
* @return {VertexBuffer} New VertexBuffer object.
*/
createInterleavedBuffer(bytesPerVertex: number, data: ArrayBufferView | number, usage?: GLUsage): VertexBuffer
/**
* Create an index buffer.
* @method
* @param {GLType} type The data type stored in the index buffer.
* @param {number} itemSize Number of elements per primitive.
* @param {ArrayBufferView} data Index buffer data.
* @param {GLUsage} [usage=STATIC_DRAW] Buffer usage.
* @return {VertexBuffer} New VertexBuffer object.
*/
createIndexBuffer(type: GLType, itemSize: number, data: ArrayBufferView, usage?: GLUsage): VertexBuffer
/**
* Create a uniform buffer in std140 layout. NOTE: FLOAT_MAT2, FLOAT_MAT3x2, FLOAT_MAT4x2,
* FLOAT_MAT3, FLOAT_MAT2x3, FLOAT_MAT4x3 are supported, but must be manually padded to
* 4-float column alignment by the application!
* @method
* @param {Array} layout Array indicating the order and types of items to
* * be stored in the buffer.
* @param {GLUsage} [usage=DYNAMIC_DRAW] Buffer usage.
* @return {UniformBuffer} New UniformBuffer object.
*/
createUniformBuffer(layout: Array<GLType | GLMatrixType>, usage?: GLUsage): UniformBuffer
/**
* Create a 2D texture. Can be used in several ways depending on the type of texture data:
* @method
* @param {DOMElement} image Image data. An array can be passed to manually set all levels
* of the mipmap chain. If a single level is passed and mipmap filtering is being used,
* generateMipmap() will be called to produce the remaining levels.
* @param {Texture2DOptions} [options] Texture options.
* @return {Texture} New Texture object.
*/
createTexture2D(image: CanvasImageSource, options?: Texture2DOptions): Texture
/**
* Create a 2D texture. Can be used in several ways depending on the type of texture data:
* @method
* @param {ArrayBufferView|Array} image Image data. An array can be passed to manually set all levels
* of the mipmap chain. If a single level is passed and mipmap filtering is being used,
* generateMipmap() will be called to produce the remaining levels.
* @param {number} width Texture width. Required for array or empty data.
* @param {number} height Texture height. Required for array or empty data.
* @param {Texture2DOptions} [options] Texture options.
* @return {Texture} New Texture object.
*/
createTexture2D(image: ArrayBufferView | Array<number>, width: number, height: number, options?: Texture2DOptions): Texture
/**
* Create a 2D texture. Can be used in several ways depending on the type of texture data:
* @method
* @param {number} width Texture width. Required for array or empty data.
* @param {number} height Texture height. Required for array or empty data.
* @param {Texture2DOptions} [options] Texture options.
* @return {Texture} New Texture object.
*/
createTexture2D(width: number, height: number, options?: Texture2DOptions): Texture
/**
* Create a 3D texture.
* @method
* @param {ArrayBufferView|Array} image Pixel data. An array can be passed to manually set all levels of the mipmap chain. If a single level is passed and mipmap filtering is being used, generateMipmap() will be called to produce the remaining levels.
* @param {number} width Texture width. Required for array or empty data.
* @param {number} height Texture height. Required for array or empty data.
* @param {number} depth Texture depth.
* @param {Texture3DOptions} [options] Texture options.
* @return {Texture} New Texture object.
*/
createTexture3D(image: ArrayBufferView | Array<number>, width: number, height: number, options?: Texture3DOptions): Texture
/**
* Create a cubemap.
* @method
* @param {CubemapOptions} options Texture options.
* @return {Cubemap} New Cubemap object.
*/
createCubemap(options: CubemapOptions): Cubemap
/**
* Create a renderbuffer.
* @method
* @param {number} width Renderbuffer width.
* @param {number} height Renderbuffer height.
* @param {GLInternalFormat} internalFormat Internal arrangement of the renderbuffer data.
* @param {number} [samples=0] Number of MSAA samples.
* @return {Renderbuffer} New Renderbuffer object.
*/
createRenderbuffer(width: number, height: number, internalFormat: GLInternalFormat, samples: number): Renderbuffer
/**
* Create a framebuffer.
* @method
* @return {Framebuffer} New Framebuffer object.
*/
createFramebuffer(): Framebuffer
/**
* Create a query.
* @method
* @param {GLQueryType} target Information to query.
* @return {Query} New Query object.
*/
createQuery(target: GLQueryType): Query
/**
* Create a timer.
* @method
* @return {Timer} New Timer object.
*/
createTimer(): Timer
/**
* Create a DrawCall. A DrawCall manages the state associated with
* a WebGL draw call including a program and associated vertex data, textures,
* uniforms and uniform blocks.
* @method
* @param {Program} program The program to use for this DrawCall.
* @param {VertexArray} [vertexArray=null] Vertex data to use for drawing.
* @return {DrawCall} New DrawCall object.
*/
createDrawCall(program: Program, vertexArray: VertexArray): DrawCall
// Clear the canvas
clear(): this
}
/** Offscreen drawing surface. */
export interface Framebuffer {
/** The WebGL context. */
gl: WebGL2RenderingContext
/** Handle to the framebuffer. */
framebuffer: WebGLFramebuffer
/** Framebuffer width. */
width: number
/** Framebuffer height. */
height: number
/** Array of color attachments. */
colorAttachments: Array<Texture | Cubemap | Renderbuffer>
/** Depth attachment. */
depthAttachment: Texture | Cubemap | Renderbuffer
appState: {
// TODO
}
/**
* Restore framebuffer after context loss.
* @method
* @return {Framebuffer} The Framebuffer object.
*/
restore(): this
/**
* Attach a color target to this framebuffer.
* @method
* @param {number} index Color attachment index.
* @param {Texture|Cubemap|Renderbuffer} attachment The texture, cubemap or renderbuffer to attach.
* @param {GLTextTarget} [target] The texture target or layer to attach. If the texture is 3D or a texture array,
* defaults to 0, otherwise to TEXTURE_2D. Ignored for renderbuffers.
* @return {Framebuffer} The Framebuffer object.
*/
colorTarget(index: number, attachment: Texture | Cubemap | Renderbuffer, target?: GLTextTarget): this
/**
* Attach a depth target to this framebuffer.
* @method
* @param {Texture|Cubemap|Renderbuffer} texture The texture, cubemap or renderbuffer to attach.
* @param {GLTextTarget} [target] The texture target or layer to attach. If the texture is 3D or a texture array or renderbuffer,
* defaults to 0, otherwise to TEXTURE_2D. Ignored for renderbuffers.
* @return {Framebuffer} The Framebuffer object.
*/
depthTarget(attachment: Texture | Cubemap | Renderbuffer, target?: GLTextTarget): this
/**
* Resize all attachments.
* @method
* @param {number} [width=app.width] New width of the framebuffer.
* @param {number} [height=app.height] New height of the framebuffer.
* @return {Framebuffer} The Framebuffer object.
*/
resize(width: number, height: number): this
/**
* Delete this framebuffer.
* @method
* @return {Framebuffer} The Framebuffer object.
*/
delete(): this
/**
* Get the current status of this framebuffer.
* @method
* @return {GLFrameBufferStatus} The current status of this framebuffer.
*/
getStatus(): GLFrameBufferStatus
}
/** WebGL shader. */
export interface Shader {
gl: WebGL2RenderingContext
shader: WebGLShader
/**
* Restore shader after context loss.
* @method
* @return {Shader} The Shader object.
*/
restore(): this
/**
* Get the shader source translated for the platform's API.
* @method
* @return {String} The translated shader source.
*/
translatedSource(): string
/**
* Delete this shader.
* @method
* @return {Shader} The Shader object.
*/
delete(): this
}
/** WebGL program consisting of compiled and linked vertex and fragment shaders. */
export interface Program {
gl: WebGL2RenderingContext
program: WebGLProgram
transformFeedback: boolean
uniforms: object
/**
* Restore program after context loss. Note that this
* will stall for completion. <b>App.restorePrograms</b>
* is the preferred method for program restoration as
* it will parallelize compilation where available.
* @method
* @return {Program} The Program object.
*/
restore(): this
/**
* Get the vertex shader source translated for the platform's API.
* @method
* @return {String} The translated vertex shader source.
*/
translatedVertexSource(): string
/**
* Get the fragment shader source translated for the platform's API.
* @method
* @return {String} The translated fragment shader source.
*/
translatedFragmentSource(): string
/**
* Delete this program.
* @method
* @return {Program} The Program object.
*/
delete(): Program
}
interface VertexArrayBufferOptions {
/** Type of data stored in the buffer. */
type?: GLType
/** Number of components per vertex. */
size?: 1 | 2 | 3 | 4
/** Number of bytes between the start of data for each vertex. */
stride?: GLuint
/** Number of bytes before the start of data for the first vertex. */
offset?: GLuint
/** Data is integer data that should be normalized to a float. */
normalized?: boolean
/** Pass data as integers. */
integer?: boolean
}
/** Organizes vertex buffer and attribute state. */
export interface VertexArray {
/** The WebGL context. */
gl: WebGL2RenderingContext
/** Vertex array object. */
vertexArray: WebGLVertexArrayObject
/** Number of elements in the vertex array. */
numElements: number
/** Whether this vertex array is set up for indexed drawing. */
indexed: boolean
/** Data type of the indices. */
indexType: GLType
/** Number of instances to draw with this vertex array. */
numInstances: number
/**
* Restore vertex array after context loss.
* @method
* @return {VertexArray} The VertexArray object.
*/
restore(): this
/**
* Bind an per-vertex attribute buffer to this vertex array.
* @method
* @param {number} attributeIndex The attribute location to bind to.
* @param {VertexBuffer} vertexBuffer The VertexBuffer to bind.
* @param {VertexArrayBufferOptions} [options] Attribute pointer options. These will override those provided in the VertexBuffer.
* @return {VertexArray} The VertexArray object.
*/
vertexAttributeBuffer(attributeIndex: number, vertexBuffer: VertexBuffer, options?: VertexArrayBufferOptions): this
/**
* Bind an per-instance attribute buffer to this vertex array.
* @method
* @param {number} attributeIndex The attribute location to bind to.
* @param {VertexBuffer} vertexBuffer The VertexBuffer to bind.
* @param {VertexArrayBufferOptions} [options] Attribute pointer options. These will override those provided in the VertexBuffer.
* @return {VertexArray} The VertexArray object.
*/
instanceAttributeBuffer(attributeIndex: number, vertexBuffer: VertexBuffer, options?: VertexArrayBufferOptions): this
/**
* Bind an index buffer to this vertex array.
* @method
* @param {VertexBuffer} vertexBuffer The VertexBuffer to bind.
* @return {VertexArray} The VertexArray object.
*/
indexBuffer(vertexBuffer: VertexBuffer): this
/**
* Delete this vertex array.
* @method
* @return {VertexArray} The VertexArray object.
*/
delete(): this
}
/** Tranform feedback object. */
export interface TransformFeedback {
/** The WebGL context. */
gl: WebGL2RenderingContext
/** Transform feedback object. */
transformFeedback: WebGLTransformFeedback
/**
* Restore transform feedback after context loss.
* @method
* @return {TransformFeedback} The TransformFeedback object.
*/
restore(): this
/**
* Bind a feedback buffer to capture transform output.
* @method
* @param {number} index Index of transform feedback varying to capture.
* @param {VertexBuffer} buffer Buffer to record output into.
* @return {TransformFeedback} The TransformFeedback object.
*/
feedbackBuffer(index: number, buffer: VertexBuffer): this
/**
* Delete this transform feedback.
* @method
* @return {TransformFeedback} The TransformFeedback object.
*/
delete(): this
}
/** Storage for vertex data. */
export interface VertexBuffer {
/** The WebGL context. */
gl: WebGL2RenderingContext
/** Allocated buffer storage. */
buffer: WebGLBuffer
/** The type of data stored in the buffer. */
type: GLType
/** Number of array elements per vertex. */
itemSize: number
/** Number of vertices represented. */
numItems: number
/** The usage pattern of the buffer. */
usage: GLUsage
/** Whether this is an index array. */
indexArray: boolean
/** GL binding point (ARRAY_BUFFER or ELEMENT_ARRAY_BUFFER). */
binding: GLBinding
/**
* Restore vertex buffer after context loss.
* @method
* @param {ArrayBufferView|number} data Buffer data itself or the total number of elements to be allocated.
* @return {VertexBuffer} The VertexBuffer object.
*/
restore(data: ArrayBufferView | number): this
/**
* Update data in this buffer. NOTE: the data must fit the originally-allocated buffer!
* @method
* @param {ArrayBufferView} data Data to store in the buffer.
* @return {VertexBuffer} The VertexBuffer object.
*/
data(data: ArrayBufferView): this
/**
* Delete this array buffer.
* @method
* @return {VertexBuffer} The VertexBuffer object.
*/
delete(): this
}
/** General-purpose texture. */
export interface Texture {
/** The WebGL context. */
gl: WebGL2RenderingContext
/** Handle to the texture. */
texture: WebGLTexture
/** Texture width. */
width: number
/** Texture height. */
height: number
/** Texture depth. */
depth: number
/** Binding point for the texture. */
binding: GLBinding
/** Type of data stored in the texture. */
type: GLType
/** Layout of texture data. */
format: GLInternalFormat
/** Internal arrangement of the texture data. */
internalFormat: GLInternalFormat
/** The current texture unit this texture is bound to. */
currentUnit: number
/** Whether this texture contains 3D data. */
is3D: boolean
/** Whether the y-axis is flipped for this texture. */
flipY: boolean
/** Whether alpha should be pre-multiplied when loading this texture. */
premultiplyAlpha: boolean
/** Whether this texture is using mipmap filtering (and thus should have a complete mipmap chain). */
mipmaps: boolean
/**
* Restore texture after context loss.
* @method
* @param {DOMElement|ArrayBufferView|Array} [image] Image data. An array can be passed to manually set all levels of the mipmap chain. If a single level is passed and mipmap filtering is being used, generateMipmap() will be called to produce the remaining levels.
* @return {Texture} The Texture object.
*/
restore(image: CanvasImageSource | ArrayBufferView): this
/**
* Re-allocate texture storage.
* @method
* @param {number} width Image width.
* @param {number} height Image height.
* @param {number} [depth] Image depth or number of images. Required when passing 3D or texture array data.
* @return {Texture} The Texture object.
*/
resize(width: number, height: number, depth?: number): this
/**
* Set the image data for the texture. An array can be passed to manually set all levels of the mipmap chain. If a single level is passed and mipmap filtering is being used, generateMipmap() will be called to produce the remaining levels.
* NOTE: the data must fit the currently-allocated storage!
* @method
* @param {ImageElement|ArrayBufferView|Array} data Image data. If an array is passed, it will be
* used to set mip map levels.
* @return {Texture} The Texture object.
*/
data(image: CanvasImageSource | ArrayBufferView): this
/**
* Delete this texture.
* @method
* @return {Texture} The Texture object.
*/
delete(): this
}
/** Cubemap for environment mapping. */
export interface Cubemap {
/** The WebGL context. */
gl: WebGL2RenderingContext
/** Handle to the texture. */
texture: WebGLTexture
/** Type of data stored in the texture. */
type: GLType
/** Layout of texture data. */
format: GLInternalFormat
/** Internal arrangement of the texture data. */
internalFormat: GLInternalFormat
/** The current texture unit this texture is bound to. */
currentUnit: number
/** Whether the y-axis is flipped for this texture. */
flipY: boolean
/** Whether alpha should be pre-multiplied when loading this texture. */
premultiplyAlpha: boolean
/**
* Restore cubemap after context loss.
* @method
* @param {CubemapOptions} [options] Texture options.
* @return {Cubemap} The Cubemap object.
*/
restore(options?: CubemapOptions): this
/**
* Delete this cubemap.
* @method
* @return {Cubemap} The Cubemap object.
*/
delete(): this
}
/** Offscreen drawing attachment. */
export interface Renderbuffer {
/** The WebGL context. */
gl: WebGL2RenderingContext
/** Handle to the renderbuffer. */
renderbuffer: WebGLRenderbuffer
/** Texture width. */
width: number
/** Texture height. */
height: number
/** Internal arrangement of the texture data. */
internalFormat: GLInternalFormat
/** Number of MSAA samples. */
samples: number
/**
* Restore renderbuffer after context loss.
* @method
* @return {Renderbuffer} The Renderbuffer object.
*/
restore(): this
/**
* Resize the renderbuffer.
* @method
* @param {number} width New width of the renderbuffer.
* @param {number} height New height of the renderbuffer.
* @return {Renderbuffer} The Renderbuffer object.
*/
resize(width: number, height: number): this
/**
* Delete this renderbuffer.
* @method
* @return {Renderbuffer} The Renderbuffer object.
*/
delete(): this
}
/** Generic query object. */
export interface Query {
/** The WebGL context. */
gl: WebGL2RenderingContext
/** Query object. */
query: WebGLQuery
/** The type of information being queried. */
target: GLQueryType
/** Whether or not a query is currently in progress. */
active: boolean
/** The result of the query (only available after a call to ready() returns true). */
result: any
/**
* Restore query after context loss.
* @method
* @return {Query} The Query object.
*/
restore(): this
/**
* Begin a query.
* @method
* @return {Query} The Query object.
*/
begin(): this
/**
* End a query.
* @method
* @return {Query} The Query object.
*/
end(): this
/**
* Check if query result is available.
* @method
* @return {boolean} If results are available.
*/
ready(): boolean
/**
* Delete this query.
* @method
* @return {Query} The Query object.
*/
delete(): this
}
export interface Timer {
/** The WebGL context. */
gl: WebGL2RenderingContext
/** Timer for CPU. Will be window.performance, if available, or window.Date. */
cpuTimer: Object
/** Timer query object for GPU (if gpu timing is supported). */
gpuTimerQuery: WebGLQuery
/** Whether a gpu timer query is currently in progress. */
gpuTimerQueryInProgress: boolean
/** When the last CPU timing started. */
cpuStartTime: number
/** Time spent on CPU during last timing. Only valid if ready() returns true. */
cpuTime: number
/** Time spent on GPU during last timing. Only valid if ready() returns true. Will remain 0 if extension EXT_disjoint_timer_query_webgl2 is unavailable. */
gpuTime: number
/**
* Restore timer after context loss.
* @method
* @return {Timer} The Timer object.
*/
restore(): this
/**
* Start timing.
* @method
* @return {Timer} The Timer object.
*/
start(): this
/**
* Stop timing.
* @method
* @return {Timer} The Timer object.
*/
end(): this
/**
* Check if timing results are available. If
* this method returns true, the cpuTime and
* gpuTime properties will be set to valid
* values.
* @method
* @return {boolean} If results are available.
*/
ready(): boolean
/**
* Delete this timer.
* @method
* @return {Timer} The Timer object.
*/
delete(): this
}
/** A DrawCall represents the program and values of associated attributes, uniforms and textures for a single draw call. */
export interface DrawCall {
/** The WebGL context. */
gl: WebGL2RenderingContext
/** The program to use for this draw call. */
currentProgram: Program
/** Vertex array to use for this draw call. */
currentVertexArray: VertexArray
/** Transform feedback to use for this draw call. */
currentTransformFeedback: TransformFeedback
/** Ordered list of active uniform buffers. */
uniformBuffers: UniformBuffer[]
/** Ordered list of uniform block names. */
uniformBlockNames: string[]
/** Number of active uniform blocks for this draw call. */
uniformBlockCount: number
/** Map of uniform names to indices in the uniform arrays. */
uniformIndices: { [key: string]: number }
/** Ordered list of uniform names. */
uniformNames: string[]
/** Ordered list of uniform values. */
uniformValue: any[]
/** The number of active uniforms for this draw call. */
uniformCount: number
/** Array of active textures. */
textures: Array<Texture | Cubemap | Renderbuffer>
/** The number of active textures for this draw call. */
textureCount: number
/** The number of element to draw. */
numElements: number
/** The number of instances to draw. */
numInstances: number
/**
* Set the current draw primitive for this draw call.
* @method
* @param {GLPrimitive} primitive Primitive to draw.
* @return {DrawCall} The DrawCall object.
*/
primitive(primitive: GLPrimitive): this
/**
* Set the current TransformFeedback object for draw.
* @method
* @param {TransformFeedback} transformFeedback Transform Feedback to set.
* @return {DrawCall} The DrawCall object.
*/
transformFeedback(transformFeedback: TransformFeedback): this
/**
* Set the value for a uniform. Array uniforms are supported by
* using appending "[0]" to the array name and passing a flat array
* with all required values.
* @method
* @param {string} name Uniform name.
* @param {any} value Uniform value.
* @return {DrawCall} The DrawCall object.
*/
uniform(name: string, value: any): this
/**
* Set texture to bind to a sampler uniform.
* @method
* @param {string} name Sampler uniform name.
* @param {Texture|Cubemap|Renderbuffer} texture Texture or Cubemap to bind.
* @return {DrawCall} The DrawCall object.
*/
texture(name: string, texture: Texture | Cubemap | Renderbuffer): this
/**
* Set uniform buffer to bind to a uniform block.
* @method
* @param {string} name Uniform block name.
* @param {UniformBuffer} buffer Uniform buffer to bind.
* @return {DrawCall} The DrawCall object.
*/
uniformBlock(name: string, buffer: UniformBuffer): this
/**
* Ranges in the vertex array to draw. Multiple arguments can be provided to set up
* a multi-draw.
* @method
* @param {...Array} counts Variable number of 2 or 3 element arrays, each containing:
* <ul>
* <li> (Number) Number of elements to skip at the start of the array.
* <li> (Number) Number of elements to draw.
* <li> (Number - optional) Number of instances to draw of the given range.
* </ul>
* @return {DrawCall} The DrawCall object.
*/
drawRanges(...counts: Array<[number, number] | [number, number, number]>): this
/**
* Draw based on current state.
* @method
* @return {DrawCall} The DrawCall object.
*/
draw(): this
}
/** Storage for uniform data. Data is stored in std140 layout. */
export interface UniformBuffer {
/** The WebGL context. */
gl: WebGL2RenderingContext
/** Allocated buffer storage. */
buffer: WebGLBuffer
/** Buffer data. */
data: Float32Array
/** Map of base data types to matching ArrayBufferViews of the buffer data. */
dataViews: object
/** Offsets into the array for each item in the buffer. */
offsets: number[]
/** Size of the item at the given offset. */
sizes: number[]
/** The base type of the item at the given offset (FLOAT, INT or UNSIGNED_INT). */
types: GLType[]
/** The size of the buffer (in 4-byte items). */
size: number
/** Usage pattern of the buffer. */
usage: GLUsage
/**
* Restore uniform buffer after context loss.
* @method
* @return {UniformBuffer} The UniformBuffer object.
*/
restore(): this
/**
* Update data for a given item in the buffer. NOTE: Data is not
* sent the the GPU until the update() method is called!
* @method
* @param {number} index Index in the layout of item to set.
* @param {ArrayBufferView} value Value to store at the layout location.
* @return {UniformBuffer} The UniformBuffer object.
*/
set(index: number, value: ArrayBufferView): this
/**
* Send stored buffer data to the GPU.
* @method
* @return {UniformBuffer} The UniformBuffer object.
*/
update(): this
/**
* Delete this uniform buffer.
* @method
* @return {UniformBuffer} The UniformBuffer object.
*/
delete(): this
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment