aboutsummaryrefslogtreecommitdiff
path: root/src/library_gl.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-06-13 18:23:47 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-06-13 18:23:47 -0700
commiteb93218eb68901cd76af900d7710b033f4faa7ed (patch)
tree441500dbac3a0b9242a5da6cba3e53dbb5e8257c /src/library_gl.js
parentcdd280fef41d1af57ead47819a48f13765cad510 (diff)
s3tc compression support
Diffstat (limited to 'src/library_gl.js')
-rw-r--r--src/library_gl.js14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/library_gl.js b/src/library_gl.js
index 1b6ec5c0..9928ab5d 100644
--- a/src/library_gl.js
+++ b/src/library_gl.js
@@ -100,6 +100,16 @@ var LibraryGL = {
var alignedRowSize = roundedToNextMultipleOf(plainRowSize, alignment);
return (height <= 0) ? 0 :
((height - 1) * alignedRowSize + plainRowSize);
+ },
+
+ ensureCompression: function() {
+ if (GL.ensureCompression.done) return;
+ GL.ensureCompression.done = true;
+
+ var ext = Module.ctx.getExtension('WEBGL_compressed_texture_s3tc') ||
+ Module.ctx.getExtension('MOZ_WEBGL_compressed_texture_s3tc') ||
+ Module.ctx.getExtension('WEBKIT_WEBGL_compressed_texture_s3tc');
+ assert(ext, 'Failed to get texture compression WebGL extension');
}
},
@@ -274,6 +284,7 @@ var LibraryGL = {
},
glCompressedTexImage2D: function(target, level, internalformat, width, height, border, imageSize, data) {
+ GL.ensureCompression();
if (data) {
data = {{{ makeHEAPView('U8', 'data', 'data+imageSize') }}};
} else {
@@ -283,6 +294,7 @@ var LibraryGL = {
},
glCompressedTexSubImage2D: function(target, level, xoffset, yoffset, width, height, format, imageSize, data) {
+ GL.ensureCompression();
if (data) {
data = {{{ makeHEAPView('U8', 'data', 'data+imageSize') }}};
} else {
@@ -947,7 +959,7 @@ var LibraryGL = {
_glGetString = function(name_) {
switch(name_) {
case 0x1F03 /* GL_EXTENSIONS */: // Add various extensions that we can support
- return allocate(intArrayFromString(Module.ctx.getSupportedExtensions().join(' ') + ' GL_EXT_texture_env_combine GL_ARB_texture_env_crossbar GL_ATI_texture_env_combine3 GL_NV_texture_env_combine4 GL_EXT_texture_env_dot3 GL_ARB_multitexture GL_ARB_vertex_buffer_object GL_EXT_framebuffer_object GL_ARB_vertex_program GL_ARB_fragment_program GL_ARB_shading_language_100 GL_ARB_shader_objects GL_ARB_vertex_shader GL_ARB_fragment_shader GL_ARB_texture_cube_map GL_EXT_draw_range_elements'), 'i8', ALLOC_NORMAL);
+ return allocate(intArrayFromString(Module.ctx.getSupportedExtensions().join(' ') + ' GL_EXT_texture_env_combine GL_ARB_texture_env_crossbar GL_ATI_texture_env_combine3 GL_NV_texture_env_combine4 GL_EXT_texture_env_dot3 GL_ARB_multitexture GL_ARB_vertex_buffer_object GL_EXT_framebuffer_object GL_ARB_vertex_program GL_ARB_fragment_program GL_ARB_shading_language_100 GL_ARB_shader_objects GL_ARB_vertex_shader GL_ARB_fragment_shader GL_ARB_texture_cube_map GL_EXT_draw_range_elements GL_ARB_texture_compression GL_EXT_texture_compression_s3tc'), 'i8', ALLOC_NORMAL);
}
return glGetString(name_);
};