declare namespace pc {

    /**
     * @static
     * @readonly
     * @type Number
     * @name pc.ADDRESS_REPEAT
     * @description Ignores the integer part of texture coordinates; using only the fractional part.
     */
    const ADDRESS_REPEAT = 0;
    /**
     * @static
     * @readonly
     * @type Number
     * @name pc.ADDRESS_CLAMP_TO_EDGE
     * @description Clamps texture coordinate to the range 0 to 1.
     */
    const ADDRESS_CLAMP_TO_EDGE = 1;
    /**
     * @static
     * @readonly
     * @type Number
     * @name pc.ADDRESS_MIRRORED_REPEAT
     * @description Texture coordinate to be set to the fractional part if the integer part is even; if the integer part is odd;
     * then the texture coordinate is set to 1 minus the fractional part.
     */
    const ADDRESS_MIRRORED_REPEAT = 2;

    /**
     * @enum pc.BLENDMODE
     * @name pc.BLENDMODE_ZERO
     * @description Multiply all fragment components by zero.
     */
    const BLENDMODE_ZERO = 0;
    /**
     * @enum pc.BLENDMODE
     * @name pc.BLENDMODE_ONE
     * @description Multiply all fragment components by one.
     */
    const BLENDMODE_ONE = 1;
    /**
     * @enum pc.BLENDMODE
     * @name pc.BLENDMODE_SRC_COLOR
     * @description Multiply all fragment components by the components of the source fragment.
     */
    const BLENDMODE_SRC_COLOR = 2;
    /**
     * @enum pc.BLENDMODE
     * @name pc.BLENDMODE_ONE_MINUS_SRC_COLOR
     * @description Multiply all fragment components by one minus the components of the source fragment.
     */
    const BLENDMODE_ONE_MINUS_SRC_COLOR = 3;
    /**
     * @enum pc.BLENDMODE
     * @name pc.BLENDMODE_DST_COLOR
     * @description Multiply all fragment components by the components of the destination fragment.
     */
    const BLENDMODE_DST_COLOR = 4;
    /**
     * @enum pc.BLENDMODE
     * @name pc.BLENDMODE_ONE_MINUS_DST_COLOR
     * @description Multiply all fragment components by one minus the components of the destination fragment.
     */
    const BLENDMODE_ONE_MINUS_DST_COLOR = 5;
    /**
     * @enum pc.BLENDMODE
     * @name pc.BLENDMODE_SRC_ALPHA
     * @description Multiply all fragment components by the alpha value of the source fragment.
     */
    const BLENDMODE_SRC_ALPHA = 6;
    /**
     * @enum pc.BLENDMODE
     * @name pc.BLENDMODE_SRC_ALPHA_SATURATE
     * @description Multiply all fragment components by the alpha value of the source fragment.
     */
    const BLENDMODE_SRC_ALPHA_SATURATE = 7;
    /**
     * @enum pc.BLENDMODE
     * @name pc.BLENDMODE_ONE_MINUS_SRC_ALPHA
     * @description Multiply all fragment components by one minus the alpha value of the source fragment.
     */
    const BLENDMODE_ONE_MINUS_SRC_ALPHA = 8;
    /**
     * @enum pc.BLENDMODE
     * @name pc.BLENDMODE_DST_ALPHA
     * @description Multiply all fragment components by the alpha value of the destination fragment.
     */
    const BLENDMODE_DST_ALPHA = 9;
    /**
     * @enum pc.BLENDMODE
     * @name pc.BLENDMODE_ONE_MINUS_DST_ALPHA
     * @description Multiply all fragment components by one minus the alpha value of the destination fragment.
     */
    const BLENDMODE_ONE_MINUS_DST_ALPHA = 10;

    /**
     * @enum pc.BLENDEQUATION
     * @name pc.BLENDEQUATION_ADD
     * @description Add the results of the source and destination fragment multiplies.
     */
    const BLENDEQUATION_ADD = 0;
    /**
     * @enum pc.BLENDEQUATION
     * @name pc.BLENDEQUATION_SUBTRACT
     * @description Subtract the results of the source and destination fragment multiplies.
     */
    const BLENDEQUATION_SUBTRACT = 1;
    /**
     * @enum pc.BLENDEQUATION
     * @name pc.BLENDEQUATION_REVERSE_SUBTRACT
     * @description Reverse and subtract the results of the source and destination fragment multiplies.
     */
    const BLENDEQUATION_REVERSE_SUBTRACT = 2;

    /**
     * @enum pc.BLENDEQUATION
     * @name pc.BLENDEQUATION_MIN
     * @description Use the smallest value. Check app.graphicsDevice.extBlendMinmax for support.
     */
    const BLENDEQUATION_MIN = 3;
    /**
     * @enum pc.BLENDEQUATION
     * @name pc.BLENDEQUATION_MAX
     * @description Use the largest value. Check app.graphicsDevice.extBlendMinmax for support.
     */
    const BLENDEQUATION_MAX = 4;

    /**
     * @enum pc.BUFFER
     * @name pc.BUFFER_STATIC
     * @description The data store contents will be modified once and used many times.
     */
    const BUFFER_STATIC = 0;
    /**
     * @enum pc.BUFFER
     * @name pc.BUFFER_DYNAMIC
     * @description The data store contents will be modified repeatedly and used many times.
     */
    const BUFFER_DYNAMIC = 1;
    /**
     * @enum pc.BUFFER
     * @name pc.BUFFER_STREAM
     * @description The data store contents will be modified once and used at most a few times.
     */
    const BUFFER_STREAM = 2;
    /**
     * @enum pc.BUFFER
     * @name pc.BUFFER_GPUDYNAMIC
     * @description The data store contents will be modified repeatedly on the GPU and used many times. Optimal for transform feedback usage (WebGL2 only).
     */
    const BUFFER_GPUDYNAMIC = 3;

    /**
     * @enum pc.CLEARFLAG
     * @name pc.CLEARFLAG_COLOR
     * @description Clear the color buffer.
     */
    const CLEARFLAG_COLOR = 1;
    /**
     * @enum pc.CLEARFLAG
     * @name pc.CLEARFLAG_DEPTH
     * @description Clear the depth buffer.
     */
    const CLEARFLAG_DEPTH = 2;
    /**
     * @enum pc.CLEARFLAG
     * @name pc.CLEARFLAG_STENCIL
     * @description Clear the stencil buffer.
     */
    const CLEARFLAG_STENCIL = 4;

    /**
     * @enum pc.CUBEFACE
     * @name pc.CUBEFACE_POSX
     * @description The positive X face of a cubemap.
     */
    const CUBEFACE_POSX = 0;
    /**
     * @enum pc.CUBEFACE
     * @name pc.CUBEFACE_NEGX
     * @description The negative X face of a cubemap.
     */
    const CUBEFACE_NEGX = 1;
    /**
     * @enum pc.CUBEFACE
     * @name pc.CUBEFACE_POSY
     * @description The positive Y face of a cubemap.
     */
    const CUBEFACE_POSY = 2;
    /**
     * @enum pc.CUBEFACE
     * @name pc.CUBEFACE_NEGY
     * @description The negative Y face of a cubemap.
     */
    const CUBEFACE_NEGY = 3;
    /**
     * @enum pc.CUBEFACE
     * @name pc.CUBEFACE_POSZ
     * @description The positive Z face of a cubemap.
     */
    const CUBEFACE_POSZ = 4;
    /**
     * @enum pc.CUBEFACE
     * @name pc.CUBEFACE_NEGZ
     * @description The negative Z face of a cubemap.
     */
    const CUBEFACE_NEGZ = 5;

    /**
     * @enum pc.CULLFACE
     * @name pc.CULLFACE_NONE
     * @description No triangles are culled.
     */
    const CULLFACE_NONE = 0;
    /**
     * @enum pc.CULLFACE
     * @name pc.CULLFACE_BACK
     * @description Triangles facing away from the view direction are culled.
     */
    const CULLFACE_BACK = 1;
    /**
     * @enum pc.CULLFACE
     * @name pc.CULLFACE_FRONT
     * @description Triangles facing the view direction are culled.
     */
    const CULLFACE_FRONT = 2;
    /**
     * @enum pc.CULLFACE
     * @name pc.CULLFACE_FRONTANDBACK
     * @description Triangles are culled regardless of their orientation with respect to the view
     * direction. Note that point or line primitives are unaffected by this render state.
     */
    const CULLFACE_FRONTANDBACK = 3;

    /**
     * @enum pc.TYPE
     * @name pc.TYPE_INT8
     * @description Signed byte vertex element type.
     */
    const TYPE_INT8 = 0;
    /**
     * @enum pc.TYPE
     * @name pc.TYPE_UINT8
     * @description Unsigned byte vertex element type.
     */
    const TYPE_UINT8 = 1;
    /**
     * @enum pc.TYPE
     * @name pc.TYPE_INT16
     * @description Signed short vertex element type.
     */
    const TYPE_INT16 = 2;
    /**
     * @enum pc.TYPE
     * @name pc.TYPE_UINT16
     * @description Unsigned short vertex element type.
     */
    const TYPE_UINT16 = 3;
    /**
     * @enum pc.TYPE
     * @name pc.TYPE_INT32
     * @description Signed integer vertex element type.
     */
    const TYPE_INT32 = 4;
    /**
     * @enum pc.TYPE
     * @name pc.TYPE_UINT32
     * @description Unsigned integer vertex element type.
     */
    const TYPE_UINT32 = 5;
    /**
     * @enum pc.TYPE
     * @name pc.TYPE_FLOAT32
     * @description Floating point vertex element type.
     */
    const TYPE_FLOAT32 = 6;

    /**
     * @enum pc.FILTER
     * @name pc.FILTER_NEAREST
     * @description Point sample filtering.
     */
    const FILTER_NEAREST = 0;
    /**
     * @enum pc.FILTER
     * @name pc.FILTER_LINEAR
     * @description Bilinear filtering.
     */
    const FILTER_LINEAR = 1;
    /**
     * @enum pc.FILTER
     * @name pc.FILTER_NEAREST_MIPMAP_NEAREST
     * @description Use the nearest neighbor in the nearest mipmap level.
     */
    const FILTER_NEAREST_MIPMAP_NEAREST = 2;
    /**
     * @enum pc.FILTER
     * @name pc.FILTER_NEAREST_MIPMAP_LINEAR
     * @description Linearly interpolate in the nearest mipmap level.
     */
    const FILTER_NEAREST_MIPMAP_LINEAR = 3;
    /**
     * @enum pc.FILTER
     * @name pc.FILTER_LINEAR_MIPMAP_NEAREST
     * @description Use the nearest neighbor after linearly interpolating between mipmap levels.
     */
    const FILTER_LINEAR_MIPMAP_NEAREST = 4;
    /**
     * @enum pc.FILTER
     * @name pc.FILTER_LINEAR_MIPMAP_LINEAR
     * @description Linearly interpolate both the mipmap levels and between texels.
     */
    const FILTER_LINEAR_MIPMAP_LINEAR = 5;

    const FUNC_NEVER = 0;
    const FUNC_LESS = 1;
    const FUNC_EQUAL = 2;
    const FUNC_LESSEQUAL = 3;
    const FUNC_GREATER = 4;
    const FUNC_NOTEQUAL = 5;
    const FUNC_GREATEREQUAL = 6;
    const FUNC_ALWAYS = 7;

    /**
     * @enum pc.INDEXFORMAT
     * @name pc.INDEXFORMAT_UINT8
     * @description 8-bit unsigned vertex indices.
     */
    const INDEXFORMAT_UINT8 = 0;
    /**
     * @enum pc.INDEXFORMAT
     * @name pc.INDEXFORMAT_UINT16
     * @description 16-bit unsigned vertex indices.
     */
    const INDEXFORMAT_UINT16 = 1;
    /**
     * @enum pc.INDEXFORMAT
     * @name pc.INDEXFORMAT_UINT32
     * @description 32-bit unsigned vertex indices.
     */
    const INDEXFORMAT_UINT32 = 2;

    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_A8
     * @description 8-bit alpha.
     */
    const PIXELFORMAT_A8 = 0;
    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_L8
     * @description 8-bit luminance.
     */
    const PIXELFORMAT_L8 = 1;
    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_L8_A8
     * @description 8-bit luminance with 8-bit alpha.
     */
    const PIXELFORMAT_L8_A8 = 2;
    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_R5_G6_B5
     * @description 16-bit RGB (5-bits for red channel; 6 for green and 5 for blue).
     */
    const PIXELFORMAT_R5_G6_B5 = 3;
    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_R5_G5_B5_A1
     * @description 16-bit RGBA (5-bits for red channel; 5 for green; 5 for blue with 1-bit alpha).
     */
    const PIXELFORMAT_R5_G5_B5_A1 = 4;
    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_R4_G4_B4_A4
     * @description 16-bit RGBA (4-bits for red channel; 4 for green; 4 for blue with 4-bit alpha).
     */
    const PIXELFORMAT_R4_G4_B4_A4 = 5;
    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_R8_G8_B8
     * @description 24-bit RGB (8-bits for red channel; 8 for green and 8 for blue).
     */
    const PIXELFORMAT_R8_G8_B8 = 6;
    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_R8_G8_B8_A8
     * @description 32-bit RGBA (8-bits for red channel; 8 for green; 8 for blue with 8-bit alpha).
     */
    const PIXELFORMAT_R8_G8_B8_A8 = 7;
    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_DXT1
     * @description Block compressed format; storing 16 input pixels in 64 bits of output; consisting of two 16-bit RGB 5 =6 =5 color values and a 4x4 two bit lookup table.
     */
    const PIXELFORMAT_DXT1 = 8;
    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_DXT3
     * @description Block compressed format; storing 16 input pixels (corresponding to a 4x4 pixel block) into 128 bits of output; consisting of 64 bits of alpha channel data (4 bits for each pixel) followed by 64 bits of color data; encoded the same way as DXT1.
     */
    const PIXELFORMAT_DXT3 = 9;
    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_DXT5
     * @description Block compressed format; storing 16 input pixels into 128 bits of output; consisting of 64 bits of alpha channel data (two 8 bit alpha values and a 4x4 3 bit lookup table) followed by 64 bits of color data (encoded the same way as DXT1).
     */
    const PIXELFORMAT_DXT5 = 10;
    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_RGB16F
     * @description 16-bit floating point RGB (16-bit float for each red; green and blue channels).
     */
    const PIXELFORMAT_RGB16F = 11;
    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_RGBA16F
     * @description 16-bit floating point RGBA (16-bit float for each red; green; blue and alpha channels).
     */
    const PIXELFORMAT_RGBA16F = 12;
    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_RGB32F
     * @description 32-bit floating point RGB (32-bit float for each red; green and blue channels).
     */
    const PIXELFORMAT_RGB32F = 13;
    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_RGBA32F
     * @description 32-bit floating point RGBA (32-bit float for each red; green; blue and alpha channels).
     */
    const PIXELFORMAT_RGBA32F = 14;

    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_R32F
     * @description 32-bit floating point single channel format (WebGL2 only).
     */
    const PIXELFORMAT_R32F = 15;

    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_DEPTH
     * @description A readable depth buffer format
     */
    const PIXELFORMAT_DEPTH = 16;

    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_DEPTHSTENCIL
     * @description A readable depth/stencil buffer format (WebGL2 only).
     */
    const PIXELFORMAT_DEPTHSTENCIL = 17;

    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_111110F
     * @description A floating-point color-only format with 11 bits for red and green channels; and 10 bits for the blue channel (WebGL2 only).
     */
    const PIXELFORMAT_111110F = 18;

    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_SRGB
     * @description Color-only sRGB format (WebGL2 only).
     */
    const PIXELFORMAT_SRGB = 19;

    /**
     * @enum pc.PIXELFORMAT
     * @name pc.PIXELFORMAT_SRGBA
     * @description Color sRGB format with additional alpha channel (WebGL2 only).
     */
    const PIXELFORMAT_SRGBA = 20;

    const PIXELFORMAT_ETC1 = 21;
    const PIXELFORMAT_PVRTC_2BPP_RGB_1 = 22;
    const PIXELFORMAT_PVRTC_2BPP_RGBA_1 = 23;
    const PIXELFORMAT_PVRTC_4BPP_RGB_1 = 24;
    const PIXELFORMAT_PVRTC_4BPP_RGBA_1 = 25;
    // only add compressed formats next

    /**
     * @enum pc.PRIMITIVE
     * @name pc.PRIMITIVE_POINTS
     * @description List of distinct points.
     */
    const PRIMITIVE_POINTS = 0;
    /**
     * @enum pc.PRIMITIVE
     * @name pc.PRIMITIVE_LINES
     * @description Discrete list of line segments.
     */
    const PRIMITIVE_LINES = 1;
    /**
     * @enum pc.PRIMITIVE
     * @name pc.PRIMITIVE_LINELOOP
     * @description List of points that are linked sequentially by line segments; with a closing line segment between the last and first points.
     */
    const PRIMITIVE_LINELOOP = 2;
    /**
     * @enum pc.PRIMITIVE
     * @name pc.PRIMITIVE_LINESTRIP
     * @description List of points that are linked sequentially by line segments.
     */
    const PRIMITIVE_LINESTRIP = 3;
    /**
     * @enum pc.PRIMITIVE
     * @name pc.PRIMITIVE_TRIANGLES
     * @description Discrete list of triangles.
     */
    const PRIMITIVE_TRIANGLES = 4;
    /**
     * @enum pc.PRIMITIVE
     * @name pc.PRIMITIVE_TRISTRIP
     * @description Connected strip of triangles where a specified vertex forms a triangle using the previous two.
     */
    const PRIMITIVE_TRISTRIP = 5;
    /**
     * @enum pc.PRIMITIVE
     * @name pc.PRIMITIVE_TRIFAN
     * @description Connected fan of triangles where the first vertex forms triangles with the following pairs of vertices.
     */
    const PRIMITIVE_TRIFAN = 6;

    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_POSITION
     * @description Vertex attribute to be treated as a position.
     */
    const SEMANTIC_POSITION = "POSITION";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_NORMAL
     * @description Vertex attribute to be treated as a normal.
     */
    const SEMANTIC_NORMAL = "NORMAL";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_TANGENT
     * @description Vertex attribute to be treated as a tangent.
     */
    const SEMANTIC_TANGENT = "TANGENT";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_BLENDWEIGHT
     * @description Vertex attribute to be treated as skin blend weights.
     */
    const SEMANTIC_BLENDWEIGHT = "BLENDWEIGHT";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_BLENDINDICES
     * @description Vertex attribute to be treated as skin blend indices.
     */
    const SEMANTIC_BLENDINDICES = "BLENDINDICES";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_COLOR
     * @description Vertex attribute to be treated as a color.
     */
    const SEMANTIC_COLOR = "COLOR";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_TEXCOORD0
     * @description Vertex attribute to be treated as a texture coordinate (set 0).
     */
    const SEMANTIC_TEXCOORD0 = "TEXCOORD0";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_TEXCOORD1
     * @description Vertex attribute to be treated as a texture coordinate (set 1).
     */
    const SEMANTIC_TEXCOORD1 = "TEXCOORD1";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_TEXCOORD2
     * @description Vertex attribute to be treated as a texture coordinate (set 2).
     */
    const SEMANTIC_TEXCOORD2 = "TEXCOORD2";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_TEXCOORD3
     * @description Vertex attribute to be treated as a texture coordinate (set 3).
     */
    const SEMANTIC_TEXCOORD3 = "TEXCOORD3";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_TEXCOORD4
     * @description Vertex attribute to be treated as a texture coordinate (set 4).
     */
    const SEMANTIC_TEXCOORD4 = "TEXCOORD4";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_TEXCOORD5
     * @description Vertex attribute to be treated as a texture coordinate (set 5).
     */
    const SEMANTIC_TEXCOORD5 = "TEXCOORD5";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_TEXCOORD6
     * @description Vertex attribute to be treated as a texture coordinate (set 6).
     */
    const SEMANTIC_TEXCOORD6 = "TEXCOORD6";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_TEXCOORD7
     * @description Vertex attribute to be treated as a texture coordinate (set 7).
     */
    const SEMANTIC_TEXCOORD7 = "TEXCOORD7";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_ATTR0
     * @description Vertex attribute with a user defined semantic.
     */
    const SEMANTIC_ATTR0 = "ATTR0";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_ATTR1
     * @description Vertex attribute with a user defined semantic.
     */
    const SEMANTIC_ATTR1 = "ATTR1";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_ATTR2
     * @description Vertex attribute with a user defined semantic.
     */
    const SEMANTIC_ATTR2 = "ATTR2";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_ATTR3
     * @description Vertex attribute with a user defined semantic.
     */
    const SEMANTIC_ATTR3 = "ATTR3";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_ATTR4
     * @description Vertex attribute with a user defined semantic.
     */
    const SEMANTIC_ATTR4 = "ATTR4";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_ATTR5
     * @description Vertex attribute with a user defined semantic.
     */
    const SEMANTIC_ATTR5 = "ATTR5";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_ATTR6
     * @description Vertex attribute with a user defined semantic.
     */
    const SEMANTIC_ATTR6 = "ATTR6";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_ATTR7
     * @description Vertex attribute with a user defined semantic.
     */
    const SEMANTIC_ATTR7 = "ATTR7";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_ATTR8
     * @description Vertex attribute with a user defined semantic.
     */
    const SEMANTIC_ATTR8 = "ATTR8";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_ATTR9
     * @description Vertex attribute with a user defined semantic.
     */
    const SEMANTIC_ATTR9 = "ATTR9";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_ATTR10
     * @description Vertex attribute with a user defined semantic.
     */
    const SEMANTIC_ATTR10 = "ATTR10";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_ATTR11
     * @description Vertex attribute with a user defined semantic.
     */
    const SEMANTIC_ATTR11 = "ATTR11";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_ATTR12
     * @description Vertex attribute with a user defined semantic.
     */
    const SEMANTIC_ATTR12 = "ATTR12";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_ATTR13
     * @description Vertex attribute with a user defined semantic.
     */
    const SEMANTIC_ATTR13 = "ATTR13";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_ATTR14
     * @description Vertex attribute with a user defined semantic.
     */
    const SEMANTIC_ATTR14 = "ATTR14";
    /**
     * @enum pc.SEMANTIC
     * @name pc.SEMANTIC_ATTR15
     * @description Vertex attribute with a user defined semantic.
     */
    const SEMANTIC_ATTR15 = "ATTR15";

    const SHADERTAG_MATERIAL = 1;

    const STENCILOP_KEEP = 0;
    const STENCILOP_ZERO = 1;
    const STENCILOP_REPLACE = 2;
    const STENCILOP_INCREMENT = 3;
    const STENCILOP_INCREMENTWRAP = 4;
    const STENCILOP_DECREMENT = 5;
    const STENCILOP_DECREMENTWRAP = 6;
    const STENCILOP_INVERT = 7;

    /**
     * @enum pc.TEXTURELOCK
     * @name pc.TEXTURELOCK_READ
     * @description Read only. Any changes to the locked mip level's pixels will not update the texture.
     */
    const TEXTURELOCK_READ = 1;
    /**
     * @enum pc.TEXTURELOCK
     * @name pc.TEXTURELOCK_WRITE
     * @description Write only. The contents of the specified mip level will be entirely replaced.
     */
    const TEXTURELOCK_WRITE = 2;

    const TEXHINT_NONE = 0;
    const TEXHINT_SHADOWMAP = 1;
    const TEXHINT_ASSET = 2;
    const TEXHINT_LIGHTMAP = 3;

    const UNIFORMTYPE_BOOL = 0;
    const UNIFORMTYPE_INT = 1;
    const UNIFORMTYPE_FLOAT = 2;
    const UNIFORMTYPE_VEC2 = 3;
    const UNIFORMTYPE_VEC3 = 4;
    const UNIFORMTYPE_VEC4 = 5;
    const UNIFORMTYPE_IVEC2 = 6;
    const UNIFORMTYPE_IVEC3 = 7;
    const UNIFORMTYPE_IVEC4 = 8;
    const UNIFORMTYPE_BVEC2 = 9;
    const UNIFORMTYPE_BVEC3 = 10;
    const UNIFORMTYPE_BVEC4 = 11;
    const UNIFORMTYPE_MAT2 = 12;
    const UNIFORMTYPE_MAT3 = 13;
    const UNIFORMTYPE_MAT4 = 14;
    const UNIFORMTYPE_TEXTURE2D = 15;
    const UNIFORMTYPE_TEXTURECUBE = 16;
    const UNIFORMTYPE_FLOATARRAY = 17;
    const UNIFORMTYPE_TEXTURE2D_SHADOW = 18;
    const UNIFORMTYPE_TEXTURECUBE_SHADOW = 19;
    const UNIFORMTYPE_TEXTURE3D = 20;
}
