diff --git a/webgl-ext/webgl-ext-tests.ts b/webgl-ext/webgl-ext-tests.ts
new file mode 100644
index 000000000..9ddcd22f9
--- /dev/null
+++ b/webgl-ext/webgl-ext-tests.ts
@@ -0,0 +1,102 @@
+///
+
+var canvas = document.createElement("canvas");
+var gl = canvas.getContext("webgl");
+var ext: any;
+var t: any;
+
+if (ext = gl.getExtension("ANGLE_instanced_arrays")) {
+ t = ext.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE;
+}
+
+if (ext = gl.getExtension("EXT_blend_minmax")) {
+ t = ext.MIN_EXT;
+}
+
+if (ext = gl.getExtension("EXT_color_buffer_half_float")) {
+ t = ext.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT;
+}
+
+if (ext = gl.getExtension("EXT_frag_depth")) {
+ // no fields
+}
+
+if (ext = gl.getExtension("EXT_sRGB")) {
+ t = ext.SRGB8_ALPHA8_EXT;
+}
+
+if (ext = gl.getExtension("EXT_shader_texture_lod")) {
+ // no fields
+}
+
+if (ext = gl.getExtension("EXT_texture_filter_anisotropic")) {
+ t = ext.MAX_TEXTURE_MAX_ANISOTROPY_EXT;
+}
+
+if (ext = gl.getExtension("OES_element_index_uint")) {
+ // no fields
+}
+
+if (ext = gl.getExtension("OES_standard_derivatives")) {
+ t = ext.FRAGMENT_SHADER_DERIVATIVE_HINT_OES;
+}
+
+if (ext = gl.getExtension("OES_texture_float")) {
+ // no fields
+}
+
+if (ext = gl.getExtension("OES_texture_float_linear")) {
+ // no fields
+}
+
+if (ext = gl.getExtension("OES_texture_half_float")) {
+ t = ext.HALF_FLOAT_OES;
+}
+
+if (ext = gl.getExtension("OES_texture_half_float_linear")) {
+ // no fields
+}
+
+if (ext = gl.getExtension("OES_vertex_array_object")) {
+ t = ext.createVertexArrayOES; // just get fn ref, don't call
+}
+
+if (ext = gl.getExtension("WEBGL_color_buffer_float")) {
+ t = ext.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT;
+}
+
+if (ext = gl.getExtension("WEBGL_compressed_texture_atc")) {
+ t = ext.COMPRESSED_RGB_ATC_WEBGL;
+}
+
+if (ext = gl.getExtension("WEBGL_compressed_texture_etc1")) {
+ t = ext.COMPRESSED_RGB_ETC1_WEBGL;
+}
+
+if (ext = gl.getExtension("WEBGL_compressed_texture_pvrtc")) {
+ t = ext.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;
+}
+
+if (ext = gl.getExtension("WEBGL_compressed_texture_s3tc")) {
+ t = ext.COMPRESSED_RGBA_S3TC_DXT5_EXT;
+}
+
+if (ext = gl.getExtension("WEBGL_debug_renderer_info")) {
+ t = ext.UNMASKED_VENDOR_WEBGL;
+}
+
+if (ext = gl.getExtension("WEBGL_debug_shaders")) {
+ t = ext.getTranslatedShaderSource; // just get fn ref, don't call
+}
+
+if (ext = gl.getExtension("WEBGL_depth_texture")) {
+ t = ext.UNSIGNED_INT_24_8_WEBGL;
+}
+
+if (ext = gl.getExtension("WEBGL_draw_buffers")) {
+ t = ext.MAX_COLOR_ATTACHMENTS_WEBGL;
+}
+
+if (ext = gl.getExtension("WEBGL_lose_context")) {
+ t = ext.loseContext; // just get fn ref, don't call
+}
diff --git a/webgl-ext/webgl-ext.d.ts b/webgl-ext/webgl-ext.d.ts
new file mode 100644
index 000000000..c6a8cb34a
--- /dev/null
+++ b/webgl-ext/webgl-ext.d.ts
@@ -0,0 +1,214 @@
+// Type definitions for WebGL Extensions
+// Project: http://webgl.org/
+// Definitions by: Arthur Langereis
+// Definitions: https://github.com/borisyankov/DefinitelyTyped/webgl-ext
+
+// These definitions go beyond those already defined in TS 1.6.2 stdlib
+// All non-draft WebGL 1.0 extensions and prefixed extension names are
+// covered.
+
+interface HTMLCanvasElement {
+ getContext(contextId: "webgl"): WebGLRenderingContext;
+}
+
+interface WebGLRenderingContext {
+ getExtension(name: "ANGLE_instanced_arrays"): ANGLEInstancedArrays;
+
+ getExtension(name: "EXT_blend_minmax"): EXTBlendMinMax;
+ getExtension(name: "EXT_color_buffer_half_float"): EXTColorBufferHalfFloat;
+ getExtension(name: "EXT_frag_depth"): EXTFragDepth;
+ getExtension(name: "EXT_sRGB"): EXTsRGB;
+ getExtension(name: "EXT_shader_texture_lod"): EXTShaderTextureLOD;
+ getExtension(name: "EXT_texture_filter_anisotropic"): EXTTextureFilterAnisotropic;
+
+ getExtension(name: "OES_element_index_uint"): OESElementIndexUint;
+ getExtension(name: "OES_standard_derivatives"): OESStandardDerivatives;
+ getExtension(name: "OES_texture_float"): OESTextureFloat;
+ getExtension(name: "OES_texture_float_linear"): OESTextureFloatLinear;
+ getExtension(name: "OES_texture_half_float"): OESTextureHalfFloat;
+ getExtension(name: "OES_texture_half_float_linear"): OESTextureHalfFloatLinear;
+ getExtension(name: "OES_vertex_array_object"): OESVertexArrayObject;
+
+ getExtension(name: "WEBGL_color_buffer_float"): WebGLColorBufferFloat;
+ getExtension(name: "WEBGL_compressed_texture_atc"): WebGLCompressedTextureATC;
+ getExtension(name: "WEBGL_compressed_texture_etc1"): WebGLCompressedTextureETC1;
+ getExtension(name: "WEBGL_compressed_texture_pvrtc"): WebGLCompressedTexturePVRTC;
+ getExtension(name: "WEBGL_compressed_texture_s3tc"): WebGLCompressedTextureS3TC;
+ getExtension(name: "WEBGL_debug_renderer_info"): WebGLDebugRendererInfo;
+ getExtension(name: "WEBGL_debug_shaders"): WebGLDebugShaders;
+ getExtension(name: "WEBGL_depth_texture"): WebGLDepthTexture;
+ getExtension(name: "WEBGL_draw_buffers"): WebGLDrawBuffers;
+ getExtension(name: "WEBGL_lose_context"): WebGLLoseContext;
+
+ // Prefixed versions appearing in the wild as per September 2015
+
+ getExtension(name: "WEBKIT_EXT_texture_filter_anisotropic"): EXTTextureFilterAnisotropic;
+ getExtension(name: "WEBKIT_WEBGL_compressed_texture_atc"): WebGLCompressedTextureATC;
+ getExtension(name: "WEBKIT_WEBGL_compressed_texture_pvrtc"): WebGLCompressedTexturePVRTC;
+ getExtension(name: "WEBKIT_WEBGL_compressed_texture_s3tc"): WebGLCompressedTextureS3TC;
+ getExtension(name: "WEBKIT_WEBGL_depth_texture"): WebGLDepthTexture;
+ getExtension(name: "WEBKIT_WEBGL_lose_context"): WebGLLoseContext;
+
+ getExtension(name: "MOZ_WEBGL_compressed_texture_s3tc"): WebGLCompressedTextureS3TC;
+ getExtension(name: "MOZ_WEBGL_depth_texture"): WebGLDepthTexture;
+ getExtension(name: "MOZ_WEBGL_lose_context"): WebGLLoseContext;
+}
+
+interface ANGLEInstancedArrays {
+ VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: number;
+
+ drawArraysInstancedANGLE(mode: number, first: number, count: number, primcount: number): void;
+ drawElementsInstancedANGLE(mode: number, count: number, type: number, offset: number, primcount: number): void;
+ vertexAttribDivisorANGLE(index: number, divisor: number): void;
+}
+
+interface EXTBlendMinMax {
+ MIN_EXT: number;
+ MAX_EXT: number;
+}
+
+interface EXTColorBufferHalfFloat {
+ RGBA16F_EXT: number;
+ RGB16F_EXT: number;
+ FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT: number;
+ UNSIGNED_NORMALIZED_EXT: number;
+}
+
+interface EXTFragDepth {
+}
+
+interface EXTsRGB {
+ SRGB_EXT: number;
+ SRGB_ALPHA_EXT: number;
+ SRGB8_ALPHA8_EXT: number;
+ FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT: number;
+}
+
+interface EXTShaderTextureLOD {
+}
+
+interface EXTTextureFilterAnisotropic {
+ TEXTURE_MAX_ANISOTROPY_EXT: number;
+ MAX_TEXTURE_MAX_ANISOTROPY_EXT: number;
+}
+
+interface OESElementIndexUint {
+}
+
+interface OESStandardDerivatives {
+ FRAGMENT_SHADER_DERIVATIVE_HINT_OES: number;
+}
+
+interface OESTextureFloat {
+}
+
+interface OESTextureFloatLinear {
+}
+
+interface OESTextureHalfFloat {
+ HALF_FLOAT_OES: number;
+}
+
+interface OESTextureHalfFloatLinear {
+}
+
+interface WebGLVertexArrayObjectOES extends WebGLObject {
+}
+
+interface OESVertexArrayObject {
+ VERTEX_ARRAY_BINDING_OES: number;
+
+ createVertexArrayOES(): WebGLVertexArrayObjectOES;
+ deleteVertexArrayOES(arrayObject: WebGLVertexArrayObjectOES): void;
+ isVertexArrayOES(arrayObject: WebGLVertexArrayObjectOES): boolean;
+ bindVertexArrayOES(arrayObject: WebGLVertexArrayObjectOES): void;
+}
+
+interface WebGLColorBufferFloat {
+ RGBA32F_EXT: number;
+ FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT: number;
+ UNSIGNED_NORMALIZED_EXT: number;
+}
+
+interface WebGLCompressedTextureATC {
+ COMPRESSED_RGB_ATC_WEBGL: number;
+ COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL: number;
+ COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL: number;
+}
+
+interface WebGLCompressedTextureETC1 {
+ COMPRESSED_RGB_ETC1_WEBGL: number;
+}
+
+interface WebGLCompressedTexturePVRTC {
+ COMPRESSED_RGB_PVRTC_4BPPV1_IMG: number;
+ COMPRESSED_RGB_PVRTC_2BPPV1_IMG: number;
+ COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: number;
+ COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: number;
+}
+
+interface WebGLCompressedTextureS3TC {
+ COMPRESSED_RGB_S3TC_DXT1_EXT: number;
+ COMPRESSED_RGBA_S3TC_DXT1_EXT: number;
+ COMPRESSED_RGBA_S3TC_DXT3_EXT: number;
+ COMPRESSED_RGBA_S3TC_DXT5_EXT: number;
+}
+
+interface WebGLDebugRendererInfo {
+ UNMASKED_VENDOR_WEBGL: number;
+ UNMASKED_RENDERER_WEBGL: number;
+}
+
+interface WebGLDebugShaders {
+ getTranslatedShaderSource(shader: WebGLShader): string;
+}
+
+interface WebGLDepthTexture {
+ UNSIGNED_INT_24_8_WEBGL: number;
+}
+
+interface WebGLDrawBuffers {
+ COLOR_ATTACHMENT0_WEBGL: number;
+ COLOR_ATTACHMENT1_WEBGL: number;
+ COLOR_ATTACHMENT2_WEBGL: number;
+ COLOR_ATTACHMENT3_WEBGL: number;
+ COLOR_ATTACHMENT4_WEBGL: number;
+ COLOR_ATTACHMENT5_WEBGL: number;
+ COLOR_ATTACHMENT6_WEBGL: number;
+ COLOR_ATTACHMENT7_WEBGL: number;
+ COLOR_ATTACHMENT8_WEBGL: number;
+ COLOR_ATTACHMENT9_WEBGL: number;
+ COLOR_ATTACHMENT10_WEBGL: number;
+ COLOR_ATTACHMENT11_WEBGL: number;
+ COLOR_ATTACHMENT12_WEBGL: number;
+ COLOR_ATTACHMENT13_WEBGL: number;
+ COLOR_ATTACHMENT14_WEBGL: number;
+ COLOR_ATTACHMENT15_WEBGL: number;
+
+ DRAW_BUFFER0_WEBGL: number;
+ DRAW_BUFFER1_WEBGL: number;
+ DRAW_BUFFER2_WEBGL: number;
+ DRAW_BUFFER3_WEBGL: number;
+ DRAW_BUFFER4_WEBGL: number;
+ DRAW_BUFFER5_WEBGL: number;
+ DRAW_BUFFER6_WEBGL: number;
+ DRAW_BUFFER7_WEBGL: number;
+ DRAW_BUFFER8_WEBGL: number;
+ DRAW_BUFFER9_WEBGL: number;
+ DRAW_BUFFER10_WEBGL: number;
+ DRAW_BUFFER11_WEBGL: number;
+ DRAW_BUFFER12_WEBGL: number;
+ DRAW_BUFFER13_WEBGL: number;
+ DRAW_BUFFER14_WEBGL: number;
+ DRAW_BUFFER15_WEBGL: number;
+
+ MAX_COLOR_ATTACHMENTS_WEBGL: number;
+ MAX_DRAW_BUFFERS_WEBGL: number;
+
+ drawBuffersWEBGL(buffers: number[]): void;
+}
+
+interface WebGLLoseContext {
+ loseContext(): void;
+ restoreContext(): void;
+}