mirror of
https://github.com/smallmain/cocos-enhance-kit.git
synced 2024-12-26 11:48:29 +00:00
542 lines
20 KiB
JavaScript
542 lines
20 KiB
JavaScript
/****************************************************************************
|
|
Copyright (c) 2018 Xiamen Yaji Software Co., Ltd.
|
|
|
|
http://www.cocos.com
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
THE SOFTWARE.
|
|
****************************************************************************/
|
|
|
|
const gl = window.__gl;
|
|
|
|
const GL_NEAREST = 9728; // gl.NEAREST
|
|
const GL_LINEAR = 9729; // gl.LINEAR
|
|
const GL_NEAREST_MIPMAP_NEAREST = 9984; // gl.NEAREST_MIPMAP_NEAREST
|
|
const GL_LINEAR_MIPMAP_NEAREST = 9985; // gl.LINEAR_MIPMAP_NEAREST
|
|
const GL_NEAREST_MIPMAP_LINEAR = 9986; // gl.NEAREST_MIPMAP_LINEAR
|
|
const GL_LINEAR_MIPMAP_LINEAR = 9987; // gl.LINEAR_MIPMAP_LINEAR
|
|
|
|
// const GL_BYTE = 5120; // gl.BYTE
|
|
const GL_UNSIGNED_BYTE = 5121; // gl.UNSIGNED_BYTE
|
|
// const GL_SHORT = 5122; // gl.SHORT
|
|
const GL_UNSIGNED_SHORT = 5123; // gl.UNSIGNED_SHORT
|
|
const GL_UNSIGNED_INT = 5125; // gl.UNSIGNED_INT
|
|
const GL_FLOAT = 5126; // gl.FLOAT
|
|
const GL_UNSIGNED_SHORT_5_6_5 = 33635; // gl.UNSIGNED_SHORT_5_6_5
|
|
const GL_UNSIGNED_SHORT_4_4_4_4 = 32819; // gl.UNSIGNED_SHORT_4_4_4_4
|
|
const GL_UNSIGNED_SHORT_5_5_5_1 = 32820; // gl.UNSIGNED_SHORT_5_5_5_1
|
|
const GL_HALF_FLOAT_OES = 36193; // gl.HALF_FLOAT_OES
|
|
|
|
const GL_DEPTH_COMPONENT = 6402; // gl.DEPTH_COMPONENT
|
|
|
|
const GL_ALPHA = 6406; // gl.ALPHA
|
|
const GL_RGB = 6407; // gl.RGB
|
|
const GL_RGBA = 6408; // gl.RGBA
|
|
const GL_LUMINANCE = 6409; // gl.LUMINANCE
|
|
const GL_LUMINANCE_ALPHA = 6410; // gl.LUMINANCE_ALPHA
|
|
|
|
// https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_texture_float.txt
|
|
// for native GL_ARB_texture_float extension
|
|
const GL_RGBA32F = 0x8814;
|
|
const GL_RGB32F = 0x8815;
|
|
const GL_RGBA16F = 0x881A;
|
|
const GL_RGB16F = 0x881B;
|
|
|
|
const GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0; // ext.COMPRESSED_RGB_S3TC_DXT1_EXT
|
|
const GL_COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1; // ext.COMPRESSED_RGBA_S3TC_DXT1_EXT
|
|
const GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2; // ext.COMPRESSED_RGBA_S3TC_DXT3_EXT
|
|
const GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3; // ext.COMPRESSED_RGBA_S3TC_DXT5_EXT
|
|
|
|
const GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8C00; // ext.COMPRESSED_RGB_PVRTC_4BPPV1_IMG
|
|
const GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 0x8C01; // ext.COMPRESSED_RGB_PVRTC_2BPPV1_IMG
|
|
const GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8C02; // ext.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG
|
|
const GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 0x8C03; // ext.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG
|
|
|
|
const GL_COMPRESSED_RGB_ETC1_WEBGL = 0x8D64; // ext.COMPRESSED_RGB_ETC1_WEBGL
|
|
|
|
const GL_COMPRESSED_RGB8_ETC2 = 0x9274; // ext.COMPRESSED_RGB8_ETC2
|
|
const GL_COMPRESSED_RGBA8_ETC2_EAC = 0x9278; // ext.COMPRESSED_RGBA8_ETC2_EAC
|
|
|
|
const GL_COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93B0;
|
|
const GL_COMPRESSED_RGBA_ASTC_5x4_KHR = 0x93B1;
|
|
const GL_COMPRESSED_RGBA_ASTC_5x5_KHR = 0x93B2;
|
|
const GL_COMPRESSED_RGBA_ASTC_6x5_KHR = 0x93B3;
|
|
const GL_COMPRESSED_RGBA_ASTC_6x6_KHR = 0x93B4;
|
|
const GL_COMPRESSED_RGBA_ASTC_8x5_KHR = 0x93B5;
|
|
const GL_COMPRESSED_RGBA_ASTC_8x6_KHR = 0x93B6;
|
|
const GL_COMPRESSED_RGBA_ASTC_8x8_KHR = 0x93B7;
|
|
const GL_COMPRESSED_RGBA_ASTC_10x5_KHR = 0x93B8;
|
|
const GL_COMPRESSED_RGBA_ASTC_10x6_KHR = 0x93B9;
|
|
const GL_COMPRESSED_RGBA_ASTC_10x8_KHR = 0x93BA;
|
|
const GL_COMPRESSED_RGBA_ASTC_10x10_KHR = 0x93BB;
|
|
const GL_COMPRESSED_RGBA_ASTC_12x10_KHR = 0x93BC;
|
|
const GL_COMPRESSED_RGBA_ASTC_12x12_KHR = 0x93BD;
|
|
|
|
const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR = 0x93D0;
|
|
const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR = 0x93D1;
|
|
const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR = 0x93D2;
|
|
const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR = 0x93D3;
|
|
const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR = 0x93D4;
|
|
const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR = 0x93D5;
|
|
const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR = 0x93D6;
|
|
const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR = 0x93D7;
|
|
const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR = 0x93D8;
|
|
const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR = 0x93D9;
|
|
const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR = 0x93DA;
|
|
const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR = 0x93DB;
|
|
const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR = 0x93DC;
|
|
const GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR = 0x93DD;
|
|
|
|
const _filterGL = [
|
|
[ GL_NEAREST, GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR ],
|
|
[ GL_LINEAR, GL_LINEAR_MIPMAP_NEAREST, GL_LINEAR_MIPMAP_LINEAR ],
|
|
];
|
|
|
|
const _textureFmtGL = [
|
|
// TEXTURE_FMT_RGB_DXT1: 0
|
|
{ format: GL_RGB, internalFormat: GL_COMPRESSED_RGB_S3TC_DXT1_EXT, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_DXT1: 1
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_DXT3: 2
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_DXT5: 3
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGB_ETC1: 4
|
|
{ format: GL_RGB, internalFormat: GL_COMPRESSED_RGB_ETC1_WEBGL, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGB_PVRTC_2BPPV1: 5
|
|
{ format: GL_RGB, internalFormat: GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_PVRTC_2BPPV1: 6
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGB_PVRTC_4BPPV1: 7
|
|
{ format: GL_RGB, internalFormat: GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_PVRTC_4BPPV1: 8
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, pixelType: null },
|
|
|
|
// TEXTURE_FMT_A8: 9
|
|
{ format: GL_ALPHA, internalFormat: GL_ALPHA, pixelType: GL_UNSIGNED_BYTE },
|
|
|
|
// TEXTURE_FMT_L8: 10
|
|
{ format: GL_LUMINANCE, internalFormat: GL_LUMINANCE, pixelType: GL_UNSIGNED_BYTE },
|
|
|
|
// TEXTURE_FMT_L8_A8: 11
|
|
{ format: GL_LUMINANCE_ALPHA, internalFormat: GL_LUMINANCE_ALPHA, pixelType: GL_UNSIGNED_BYTE },
|
|
|
|
// TEXTURE_FMT_R5_G6_B5: 12
|
|
{ format: GL_RGB, internalFormat: GL_RGB, pixelType: GL_UNSIGNED_SHORT_5_6_5 },
|
|
|
|
// TEXTURE_FMT_R5_G5_B5_A1: 13
|
|
{ format: GL_RGBA, internalFormat: GL_RGBA, pixelType: GL_UNSIGNED_SHORT_5_5_5_1 },
|
|
|
|
// TEXTURE_FMT_R4_G4_B4_A4: 14
|
|
{ format: GL_RGBA, internalFormat: GL_RGBA, pixelType: GL_UNSIGNED_SHORT_4_4_4_4 },
|
|
|
|
// TEXTURE_FMT_RGB8: 15
|
|
{ format: GL_RGB, internalFormat: GL_RGB, pixelType: GL_UNSIGNED_BYTE },
|
|
|
|
// TEXTURE_FMT_RGBA8: 16
|
|
{ format: GL_RGBA, internalFormat: GL_RGBA, pixelType: GL_UNSIGNED_BYTE },
|
|
|
|
// TEXTURE_FMT_RGB16F: 17
|
|
{ format: GL_RGB, internalFormat: GL_RGB16F, pixelType: GL_HALF_FLOAT_OES },
|
|
|
|
// TEXTURE_FMT_RGBA16F: 18
|
|
{ format: GL_RGBA, internalFormat: GL_RGBA16F, pixelType: GL_HALF_FLOAT_OES },
|
|
|
|
// TEXTURE_FMT_RGB32F: 19
|
|
{ format: GL_RGB, internalFormat: GL_RGB32F, pixelType: GL_FLOAT },
|
|
|
|
// TEXTURE_FMT_RGBA32F: 20
|
|
{ format: GL_RGBA, internalFormat: GL_RGBA32F, pixelType: GL_FLOAT },
|
|
|
|
// TEXTURE_FMT_R32F: 21
|
|
{ format: null, internalFormat: null, pixelType: null },
|
|
|
|
// TEXTURE_FMT_111110F: 22
|
|
{ format: null, internalFormat: null, pixelType: null },
|
|
|
|
// TEXTURE_FMT_SRGB: 23
|
|
{ format: null, internalFormat: null, pixelType: null },
|
|
|
|
// TEXTURE_FMT_SRGBA: 24
|
|
{ format: null, internalFormat: null, pixelType: null },
|
|
|
|
// TEXTURE_FMT_D16: 25
|
|
{ format: GL_DEPTH_COMPONENT, internalFormat: GL_DEPTH_COMPONENT, pixelType: GL_UNSIGNED_SHORT },
|
|
|
|
// TEXTURE_FMT_D32: 26
|
|
{ format: GL_DEPTH_COMPONENT, internalFormat: GL_DEPTH_COMPONENT, pixelType: GL_UNSIGNED_INT },
|
|
|
|
// TEXTURE_FMT_D24S8: 27
|
|
{ format: GL_DEPTH_COMPONENT, internalFormat: GL_DEPTH_COMPONENT, pixelType: GL_UNSIGNED_INT },
|
|
|
|
// TEXTURE_FMT_RGB_ETC2: 28
|
|
{ format: GL_RGB, internalFormat: GL_COMPRESSED_RGB8_ETC2, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_ETC2: 29
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA8_ETC2_EAC, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_ASTC_4X4: 30
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_ASTC_4x4_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_ASTC_5X4: 31
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_ASTC_5x4_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_ASTC_5X5: 32
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_ASTC_5x5_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_ASTC_6X5: 33
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_ASTC_6x5_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_ASTC_6X6: 34
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_ASTC_6x6_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_ASTC_8X5: 35
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_ASTC_8x5_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_ASTC_8X6: 36
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_ASTC_8x6_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_ASTC_8X8: 37
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_ASTC_8x8_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_ASTC_10X5: 38
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_ASTC_10x5_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_ASTC_10X6: 39
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_ASTC_10x6_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_ASTC_10X8: 40
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_ASTC_10x8_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_ASTC_10X10: 41
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_ASTC_10x10_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_ASTC_12X10: 42
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_ASTC_12x10_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_RGBA_ASTC_12X12: 43
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_RGBA_ASTC_12x12_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_SRGBA_ASTC_4X4: 44
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_SRGBA_ASTC_5X4: 45
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_SRGBA_ASTC_5X5: 46
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_SRGBA_ASTC_6X5: 47
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_SRGBA_ASTC_6X6: 48
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_SRGBA_ASTC_8X5: 49
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_SRGBA_ASTC_8X6: 50
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_SRGBA_ASTC_8X8: 51
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_SRGBA_ASTC_10X5: 52
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_SRGBA_ASTC_10X6: 53
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_SRGBA_ASTC_10X8: 54
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_SRGBA_ASTC_10X10: 55
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_SRGBA_ASTC_12X10: 56
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, pixelType: null },
|
|
|
|
// TEXTURE_FMT_SRGBA_ASTC_12X12: 57
|
|
{ format: GL_RGBA, internalFormat: GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, pixelType: null },
|
|
];
|
|
|
|
/**
|
|
* enums
|
|
*/
|
|
export const enums = {
|
|
// buffer usage
|
|
USAGE_STATIC: 35044, // gl.STATIC_DRAW
|
|
USAGE_DYNAMIC: 35048, // gl.DYNAMIC_DRAW
|
|
USAGE_STREAM: 35040, // gl.STREAM_DRAW
|
|
|
|
// index buffer format
|
|
INDEX_FMT_UINT8: 5121, // gl.UNSIGNED_BYTE
|
|
INDEX_FMT_UINT16: 5123, // gl.UNSIGNED_SHORT
|
|
INDEX_FMT_UINT32: 5125, // gl.UNSIGNED_INT (OES_element_index_uint)
|
|
|
|
// vertex attribute semantic
|
|
ATTR_POSITION: 'a_position',
|
|
ATTR_NORMAL: 'a_normal',
|
|
ATTR_TANGENT: 'a_tangent',
|
|
ATTR_BITANGENT: 'a_bitangent',
|
|
ATTR_WEIGHTS: 'a_weights',
|
|
ATTR_JOINTS: 'a_joints',
|
|
ATTR_COLOR: 'a_color',
|
|
ATTR_COLOR0: 'a_color0',
|
|
ATTR_COLOR1: 'a_color1',
|
|
ATTR_UV: 'a_uv',
|
|
ATTR_UV0: 'a_uv0',
|
|
ATTR_UV1: 'a_uv1',
|
|
ATTR_UV2: 'a_uv2',
|
|
ATTR_UV3: 'a_uv3',
|
|
ATTR_UV4: 'a_uv4',
|
|
ATTR_UV5: 'a_uv5',
|
|
ATTR_UV6: 'a_uv6',
|
|
ATTR_UV7: 'a_uv7',
|
|
ATTR_TEX_COORD: 'a_texCoord',
|
|
ATTR_TEX_COORD1: 'a_texCoord1',
|
|
ATTR_TEX_COORD2: 'a_texCoord2',
|
|
ATTR_TEX_COORD3: 'a_texCoord3',
|
|
ATTR_TEX_COORD4: 'a_texCoord4',
|
|
ATTR_TEX_COORD5: 'a_texCoord5',
|
|
ATTR_TEX_COORD6: 'a_texCoord6',
|
|
ATTR_TEX_COORD7: 'a_texCoord7',
|
|
ATTR_TEX_COORD8: 'a_texCoord8',
|
|
ATTR_TEX_ID: 'a_texId',
|
|
|
|
// vertex attribute type
|
|
ATTR_TYPE_INT8: 5120, // gl.BYTE
|
|
ATTR_TYPE_UINT8: 5121, // gl.UNSIGNED_BYTE
|
|
ATTR_TYPE_INT16: 5122, // gl.SHORT
|
|
ATTR_TYPE_UINT16: 5123, // gl.UNSIGNED_SHORT
|
|
ATTR_TYPE_INT32: 5124, // gl.INT
|
|
ATTR_TYPE_UINT32: 5125, // gl.UNSIGNED_INT
|
|
ATTR_TYPE_FLOAT32: 5126, // gl.FLOAT
|
|
|
|
// texture filter
|
|
FILTER_NEAREST: 0,
|
|
FILTER_LINEAR: 1,
|
|
|
|
// texture wrap mode
|
|
WRAP_REPEAT: 10497, // gl.REPEAT
|
|
WRAP_CLAMP: 33071, // gl.CLAMP_TO_EDGE
|
|
WRAP_MIRROR: 33648, // gl.MIRRORED_REPEAT
|
|
|
|
// texture format
|
|
// compress formats
|
|
TEXTURE_FMT_RGB_DXT1: 0,
|
|
TEXTURE_FMT_RGBA_DXT1: 1,
|
|
TEXTURE_FMT_RGBA_DXT3: 2,
|
|
TEXTURE_FMT_RGBA_DXT5: 3,
|
|
TEXTURE_FMT_RGB_ETC1: 4,
|
|
TEXTURE_FMT_RGB_PVRTC_2BPPV1: 5,
|
|
TEXTURE_FMT_RGBA_PVRTC_2BPPV1: 6,
|
|
TEXTURE_FMT_RGB_PVRTC_4BPPV1: 7,
|
|
TEXTURE_FMT_RGBA_PVRTC_4BPPV1: 8,
|
|
|
|
// normal formats
|
|
TEXTURE_FMT_A8: 9,
|
|
TEXTURE_FMT_L8: 10,
|
|
TEXTURE_FMT_L8_A8: 11,
|
|
TEXTURE_FMT_R5_G6_B5: 12,
|
|
TEXTURE_FMT_R5_G5_B5_A1: 13,
|
|
TEXTURE_FMT_R4_G4_B4_A4: 14,
|
|
TEXTURE_FMT_RGB8: 15,
|
|
TEXTURE_FMT_RGBA8: 16,
|
|
TEXTURE_FMT_RGB16F: 17,
|
|
TEXTURE_FMT_RGBA16F: 18,
|
|
TEXTURE_FMT_RGB32F: 19,
|
|
TEXTURE_FMT_RGBA32F: 20,
|
|
TEXTURE_FMT_R32F: 21,
|
|
TEXTURE_FMT_111110F: 22,
|
|
TEXTURE_FMT_SRGB: 23,
|
|
TEXTURE_FMT_SRGBA: 24,
|
|
|
|
// depth formats
|
|
TEXTURE_FMT_D16: 25,
|
|
TEXTURE_FMT_D32: 26,
|
|
TEXTURE_FMT_D24S8: 27,
|
|
|
|
// etc2 format
|
|
TEXTURE_FMT_RGB_ETC2: 28,
|
|
TEXTURE_FMT_RGBA_ETC2: 29,
|
|
|
|
// astc format (Adaptive Scalable Texture Compression)
|
|
TEXTURE_FMT_RGBA_ASTC_4X4: 30,
|
|
TEXTURE_FMT_RGBA_ASTC_5X4: 31,
|
|
TEXTURE_FMT_RGBA_ASTC_5X5: 32,
|
|
TEXTURE_FMT_RGBA_ASTC_6X5: 33,
|
|
TEXTURE_FMT_RGBA_ASTC_6X6: 34,
|
|
TEXTURE_FMT_RGBA_ASTC_8X5: 35,
|
|
TEXTURE_FMT_RGBA_ASTC_8X6: 36,
|
|
TEXTURE_FMT_RGBA_ASTC_8X8: 37,
|
|
TEXTURE_FMT_RGBA_ASTC_10X5: 38,
|
|
TEXTURE_FMT_RGBA_ASTC_10X6: 39,
|
|
TEXTURE_FMT_RGBA_ASTC_10X8: 40,
|
|
TEXTURE_FMT_RGBA_ASTC_10X10: 41,
|
|
TEXTURE_FMT_RGBA_ASTC_12X10: 42,
|
|
TEXTURE_FMT_RGBA_ASTC_12X12: 43,
|
|
|
|
// astc format (Adaptive Scalable Texture Compression) SRGB
|
|
TEXTURE_FMT_SRGBA_ASTC_4X4: 44,
|
|
TEXTURE_FMT_SRGBA_ASTC_5X4: 45,
|
|
TEXTURE_FMT_SRGBA_ASTC_5X5: 46,
|
|
TEXTURE_FMT_SRGBA_ASTC_6X5: 47,
|
|
TEXTURE_FMT_SRGBA_ASTC_6X6: 48,
|
|
TEXTURE_FMT_SRGBA_ASTC_8X5: 49,
|
|
TEXTURE_FMT_SRGBA_ASTC_8X6: 50,
|
|
TEXTURE_FMT_SRGBA_ASTC_8X8: 51,
|
|
TEXTURE_FMT_SRGBA_ASTC_10X5: 52,
|
|
TEXTURE_FMT_SRGBA_ASTC_10X6: 53,
|
|
TEXTURE_FMT_SRGBA_ASTC_10X8: 54,
|
|
TEXTURE_FMT_SRGBA_ASTC_10X10: 55,
|
|
TEXTURE_FMT_SRGBA_ASTC_12X10: 56,
|
|
TEXTURE_FMT_SRGBA_ASTC_12X12: 57,
|
|
|
|
// depth and stencil function
|
|
DS_FUNC_NEVER: 512, // gl.NEVER
|
|
DS_FUNC_LESS: 513, // gl.LESS
|
|
DS_FUNC_EQUAL: 514, // gl.EQUAL
|
|
DS_FUNC_LEQUAL: 515, // gl.LEQUAL
|
|
DS_FUNC_GREATER: 516, // gl.GREATER
|
|
DS_FUNC_NOTEQUAL: 517, // gl.NOTEQUAL
|
|
DS_FUNC_GEQUAL: 518, // gl.GEQUAL
|
|
DS_FUNC_ALWAYS: 519, // gl.ALWAYS
|
|
|
|
// render-buffer format
|
|
RB_FMT_RGBA4: 32854, // gl.RGBA4
|
|
RB_FMT_RGB5_A1: 32855, // gl.RGB5_A1
|
|
RB_FMT_RGB565: 36194, // gl.RGB565
|
|
RB_FMT_D16: 33189, // gl.DEPTH_COMPONENT16
|
|
RB_FMT_S8: 36168, // gl.STENCIL_INDEX8
|
|
RB_FMT_D24S8: 34041, // gl.DEPTH_STENCIL
|
|
|
|
// blend-equation
|
|
BLEND_FUNC_ADD: 32774, // gl.FUNC_ADD
|
|
BLEND_FUNC_SUBTRACT: 32778, // gl.FUNC_SUBTRACT
|
|
BLEND_FUNC_REVERSE_SUBTRACT: 32779, // gl.FUNC_REVERSE_SUBTRACT
|
|
|
|
// blend
|
|
BLEND_ZERO: 0, // gl.ZERO
|
|
BLEND_ONE: 1, // gl.ONE
|
|
BLEND_SRC_COLOR: 768, // gl.SRC_COLOR
|
|
BLEND_ONE_MINUS_SRC_COLOR: 769, // gl.ONE_MINUS_SRC_COLOR
|
|
BLEND_DST_COLOR: 774, // gl.DST_COLOR
|
|
BLEND_ONE_MINUS_DST_COLOR: 775, // gl.ONE_MINUS_DST_COLOR
|
|
BLEND_SRC_ALPHA: 770, // gl.SRC_ALPHA
|
|
BLEND_ONE_MINUS_SRC_ALPHA: 771, // gl.ONE_MINUS_SRC_ALPHA
|
|
BLEND_DST_ALPHA: 772, // gl.DST_ALPHA
|
|
BLEND_ONE_MINUS_DST_ALPHA: 773, // gl.ONE_MINUS_DST_ALPHA
|
|
BLEND_CONSTANT_COLOR: 32769, // gl.CONSTANT_COLOR
|
|
BLEND_ONE_MINUS_CONSTANT_COLOR: 32770, // gl.ONE_MINUS_CONSTANT_COLOR
|
|
BLEND_CONSTANT_ALPHA: 32771, // gl.CONSTANT_ALPHA
|
|
BLEND_ONE_MINUS_CONSTANT_ALPHA: 32772, // gl.ONE_MINUS_CONSTANT_ALPHA
|
|
BLEND_SRC_ALPHA_SATURATE: 776, // gl.SRC_ALPHA_SATURATE
|
|
|
|
// stencil operation
|
|
STENCIL_DISABLE: 0, // disable stencil
|
|
STENCIL_ENABLE: 1, // enable stencil
|
|
STENCIL_INHERIT: 2, // inherit stencil states
|
|
|
|
STENCIL_OP_KEEP: 7680, // gl.KEEP
|
|
STENCIL_OP_ZERO: 0, // gl.ZERO
|
|
STENCIL_OP_REPLACE: 7681, // gl.REPLACE
|
|
STENCIL_OP_INCR: 7682, // gl.INCR
|
|
STENCIL_OP_INCR_WRAP: 34055, // gl.INCR_WRAP
|
|
STENCIL_OP_DECR: 7683, // gl.DECR
|
|
STENCIL_OP_DECR_WRAP: 34056, // gl.DECR_WRAP
|
|
STENCIL_OP_INVERT: 5386, // gl.INVERT
|
|
|
|
// cull
|
|
CULL_NONE: 0,
|
|
CULL_FRONT: 1028,
|
|
CULL_BACK: 1029,
|
|
CULL_FRONT_AND_BACK: 1032,
|
|
|
|
// primitive type
|
|
PT_POINTS: 0, // gl.POINTS
|
|
PT_LINES: 1, // gl.LINES
|
|
PT_LINE_LOOP: 2, // gl.LINE_LOOP
|
|
PT_LINE_STRIP: 3, // gl.LINE_STRIP
|
|
PT_TRIANGLES: 4, // gl.TRIANGLES
|
|
PT_TRIANGLE_STRIP: 5, // gl.TRIANGLE_STRIP
|
|
PT_TRIANGLE_FAN: 6, // gl.TRIANGLE_FAN
|
|
};
|
|
|
|
/**
|
|
* @method attrTypeBytes
|
|
* @param {ATTR_TYPE_*} attrType
|
|
*/
|
|
export function attrTypeBytes(attrType) {
|
|
if (attrType === enums.ATTR_TYPE_INT8) {
|
|
return 1;
|
|
} else if (attrType === enums.ATTR_TYPE_UINT8) {
|
|
return 1;
|
|
} else if (attrType === enums.ATTR_TYPE_INT16) {
|
|
return 2;
|
|
} else if (attrType === enums.ATTR_TYPE_UINT16) {
|
|
return 2;
|
|
} else if (attrType === enums.ATTR_TYPE_INT32) {
|
|
return 4;
|
|
} else if (attrType === enums.ATTR_TYPE_UINT32) {
|
|
return 4;
|
|
} else if (attrType === enums.ATTR_TYPE_FLOAT32) {
|
|
return 4;
|
|
}
|
|
|
|
console.warn(`Unknown ATTR_TYPE: ${attrType}`);
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* @method glFilter
|
|
* @param {WebGLContext} gl
|
|
* @param {FILTER_*} filter
|
|
* @param {FILTER_*} mipFilter
|
|
*/
|
|
export function glFilter(gl, filter, mipFilter = -1) {
|
|
let result = _filterGL[filter][mipFilter+1];
|
|
if (result === undefined) {
|
|
console.warn(`Unknown FILTER: ${filter}`);
|
|
return mipFilter === -1 ? gl.LINEAR : gl.LINEAR_MIPMAP_LINEAR;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* @method glTextureFmt
|
|
* @param {TEXTURE_FMT_*} fmt
|
|
*/
|
|
export function glTextureFmt(fmt) {
|
|
let result = _textureFmtGL[fmt];
|
|
if (result === undefined) {
|
|
console.warn(`Unknown TEXTURE_FMT: ${fmt}`);
|
|
return _textureFmtGL[enums.TEXTURE_FMT_RGBA8];
|
|
}
|
|
|
|
return result;
|
|
} |