UNPKG

openfl

Version:

A fast, productive library for 2D cross-platform development.

482 lines (464 loc) 16.8 kB
// Class: openfl.display3D.textures.CubeTexture var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this $global.Object.defineProperty(exports, "__esModule", {value: true}); var __map_reserved = {}; // Imports var $hxClasses = require("./../../../hxClasses_stub").default; var $hxEnums = require("./../../../hxEnums_stub").default; var $import = require("./../../../import_stub").default; var $extend = require("./../../../extend_stub").default; function openfl_display3D_textures_TextureBase() {return require("./../../../openfl/display3D/textures/TextureBase");} function haxe_Timer() {return require("./../../../haxe/Timer");} function openfl_events_Event() {return require("./../../../openfl/events/Event");} function lime_graphics__$WebGLRenderContext_WebGLRenderContext_$Impl_$() {return require("./../../../lime/graphics/_WebGLRenderContext/WebGLRenderContext_Impl_");} function openfl_utils__$ByteArray_ByteArray_$Impl_$() {return require("./../../../openfl/utils/_ByteArray/ByteArray_Impl_");} function lime_utils_Log() {return require("./../../../lime/utils/Log");} function openfl_display3D_Context3D() {return require("./../../../openfl/display3D/Context3D");} function js__$Boot_HaxeError() {return require("./../../../js/_Boot/HaxeError");} function openfl_errors_IllegalOperationError() {return require("./../../../openfl/errors/IllegalOperationError");} function openfl_display3D__$internal_ATFReader() {return require("./../../../openfl/display3D/_internal/ATFReader");} function Std() {return require("./../../../Std");} // Constructor var CubeTexture = function(context,size,format,optimizeForRenderToTexture,streamingLevels) { (openfl_display3D_textures_TextureBase().default).call(this,context); this.__size = size; this.__width = this.__height = this.__size; this.__optimizeForRenderToTexture = optimizeForRenderToTexture; this.__streamingLevels = streamingLevels; this.__textureTarget = this.__context.gl.TEXTURE_CUBE_MAP; this.__uploadedSides = 0; } // Meta CubeTexture.__name__ = "openfl.display3D.textures.CubeTexture"; CubeTexture.__isInterface__ = false; CubeTexture.__super__ = (openfl_display3D_textures_TextureBase().default); CubeTexture.prototype = $extend((openfl_display3D_textures_TextureBase().default).prototype, { uploadCompressedTextureFromByteArray: function(data,byteArrayOffset,async) { if(async == null) { async = false; } var _gthis = this; if(!async) { this.__uploadCompressedTextureFromByteArray(data,byteArrayOffset); } else { (haxe_Timer().default).delay(function() { _gthis.__uploadCompressedTextureFromByteArray(data,byteArrayOffset); var event = null; event = new (openfl_events_Event().default)("textureReady"); _gthis.dispatchEvent(event); },1); } }, uploadFromBitmapData: function(source,side,miplevel,generateMipmap) { if(generateMipmap == null) { generateMipmap = false; } if(miplevel == null) { miplevel = 0; } if(source == null) { return; } var size = this.__size >> miplevel; if(size == 0) { return; } var image = this.__getImage(source); if(image == null) { return; } if(miplevel == 0 && image.buffer != null && image.buffer.data == null && image.buffer.get_src() != null) { var gl = this.__context.gl; var size1 = this.__size >> miplevel; if(size1 == 0) { return; } var target = this.__sideToTarget(side); this.__context.__bindGLTextureCubeMap(this.__textureID); (lime_graphics__$WebGLRenderContext_WebGLRenderContext_$Impl_$().default).texImage2D(gl,target,miplevel,this.__internalFormat,this.__format,gl.UNSIGNED_BYTE,image.buffer.get_src()); this.__context.__bindGLTextureCubeMap(null); this.__uploadedSides |= 1 << side; return; } this.uploadFromTypedArray(image.get_data(),side,miplevel); }, uploadFromByteArray: function(data,byteArrayOffset,side,miplevel) { if(miplevel == null) { miplevel = 0; } if(byteArrayOffset == 0) { this.uploadFromTypedArray(data.b,side,miplevel); return; } var elements = null; var array = null; var view = null; var buffer = (openfl_utils__$ByteArray_ByteArray_$Impl_$().default).toArrayBuffer(data); var byteoffset = byteArrayOffset; var len = null; if(byteoffset == null) { byteoffset = 0; } var this1; if(elements != null) { this1 = new Uint8Array(elements); } else if(array != null) { this1 = new Uint8Array(array); } else if(view != null) { this1 = new Uint8Array(view); } else if(buffer != null) { if(len == null) { this1 = new Uint8Array(buffer,byteoffset); } else { this1 = new Uint8Array(buffer,byteoffset,len); } } else { this1 = null; } this.uploadFromTypedArray(this1,side,miplevel); }, uploadFromTypedArray: function(data,side,miplevel) { if(miplevel == null) { miplevel = 0; } if(data == null) { return; } var gl = this.__context.gl; var size = this.__size >> miplevel; if(size == 0) { return; } var target = this.__sideToTarget(side); this.__context.__bindGLTextureCubeMap(this.__textureID); (lime_graphics__$WebGLRenderContext_WebGLRenderContext_$Impl_$().default).texImage2D(gl,target,miplevel,this.__internalFormat,size,size,0,this.__format,gl.UNSIGNED_BYTE,data); this.__context.__bindGLTextureCubeMap(null); this.__uploadedSides |= 1 << side; }, __getGLFramebuffer: function(enableDepthAndStencil,antiAlias,surfaceSelector) { var gl = this.__context.gl; if(this.__glFramebuffer == null) { this.__glFramebuffer = gl.createFramebuffer(); this.__framebufferSurface = -1; } if(this.__framebufferSurface != surfaceSelector) { this.__framebufferSurface = surfaceSelector; this.__context.__bindGLFramebuffer(this.__glFramebuffer); gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_CUBE_MAP_POSITIVE_X + surfaceSelector,this.__textureID,0); if(this.__context.__enableErrorChecking) { var code = gl.checkFramebufferStatus(gl.FRAMEBUFFER); if(code != gl.FRAMEBUFFER_COMPLETE) { (lime_utils_Log().default).error("Error: Context3D.setRenderToTexture status:" + code + " width:" + this.__width + " height:" + this.__height,{ fileName : "../node_modules/openfl-haxelib/src/openfl/display3D/textures/CubeTexture.hx", lineNumber : 279, className : "openfl.display3D.textures.CubeTexture", methodName : "__getGLFramebuffer"}); } } } return (openfl_display3D_textures_TextureBase().default).prototype.__getGLFramebuffer.call(this,enableDepthAndStencil,antiAlias,surfaceSelector); }, __setSamplerState: function(state) { if((openfl_display3D_textures_TextureBase().default).prototype.__setSamplerState.call(this,state)) { var gl = this.__context.gl; if(state.mipfilter != "mipnone" && !this.__samplerState.mipmapGenerated) { gl.generateMipmap(gl.TEXTURE_CUBE_MAP); this.__samplerState.mipmapGenerated = true; } if((openfl_display3D_Context3D().default).__glMaxTextureMaxAnisotropy != 0) { var aniso; switch(state.filter) { case "anisotropic16x": aniso = 16; break; case "anisotropic2x": aniso = 2; break; case "anisotropic4x": aniso = 4; break; case "anisotropic8x": aniso = 8; break; default: aniso = 1; } if(aniso > (openfl_display3D_Context3D().default).__glMaxTextureMaxAnisotropy) { aniso = (openfl_display3D_Context3D().default).__glMaxTextureMaxAnisotropy; } gl.texParameterf(gl.TEXTURE_CUBE_MAP,(openfl_display3D_Context3D().default).__glTextureMaxAnisotropy,aniso); } return true; } return false; }, __sideToTarget: function(side) { var gl = this.__context.gl; switch(side) { case 0: return gl.TEXTURE_CUBE_MAP_POSITIVE_X; case 1: return gl.TEXTURE_CUBE_MAP_NEGATIVE_X; case 2: return gl.TEXTURE_CUBE_MAP_POSITIVE_Y; case 3: return gl.TEXTURE_CUBE_MAP_NEGATIVE_Y; case 4: return gl.TEXTURE_CUBE_MAP_POSITIVE_Z; case 5: return gl.TEXTURE_CUBE_MAP_NEGATIVE_Z; default: throw new (js__$Boot_HaxeError().default)(new (openfl_errors_IllegalOperationError().default)()); } }, __uploadCompressedTextureFromByteArray: function(data,byteArrayOffset) { var _gthis = this; var reader = new (openfl_display3D__$internal_ATFReader().default)(data,byteArrayOffset); var alpha = reader.readHeader(this.__size,this.__size,true); var gl = this.__context.gl; this.__context.__bindGLTextureCubeMap(this.__textureID); var hasTexture = false; reader.readTextures(function(side,level,gpuFormat,width,height,blockLength,bytes) { var format = alpha ? (openfl_display3D_textures_TextureBase().default).__compressedFormatsAlpha.get(gpuFormat) : (openfl_display3D_textures_TextureBase().default).__compressedFormats.get(gpuFormat); if(format == 0) { return; } hasTexture = true; var target = _gthis.__sideToTarget(side); _gthis.__format = format; _gthis.__internalFormat = format; if(alpha && gpuFormat == 2) { var size = (Std().default).int(blockLength / 2); var elements = null; var array = null; var view = null; var buffer = bytes.b.buffer; var byteoffset = 0; if(byteoffset == null) { byteoffset = 0; } var this1; if(elements != null) { this1 = new Uint8Array(elements); } else if(array != null) { this1 = new Uint8Array(array); } else if(view != null) { this1 = new Uint8Array(view); } else if(buffer != null) { if(size == null) { this1 = new Uint8Array(buffer,byteoffset); } else { this1 = new Uint8Array(buffer,byteoffset,size); } } else { this1 = null; } (lime_graphics__$WebGLRenderContext_WebGLRenderContext_$Impl_$().default).compressedTexImage2D(gl,target,level,_gthis.__internalFormat,width,height,0,this1); var alphaTexture = new CubeTexture(_gthis.__context,_gthis.__size,"compressed",_gthis.__optimizeForRenderToTexture,_gthis.__streamingLevels); alphaTexture.__format = format; alphaTexture.__internalFormat = format; _gthis.__context.__bindGLTextureCubeMap(alphaTexture.__textureID); var elements1 = null; var array1 = null; var view1 = null; var buffer1 = bytes.b.buffer; var byteoffset1 = size; if(byteoffset1 == null) { byteoffset1 = 0; } var this2; if(elements1 != null) { this2 = new Uint8Array(elements1); } else if(array1 != null) { this2 = new Uint8Array(array1); } else if(view1 != null) { this2 = new Uint8Array(view1); } else if(buffer1 != null) { if(size == null) { this2 = new Uint8Array(buffer1,byteoffset1); } else { this2 = new Uint8Array(buffer1,byteoffset1,size); } } else { this2 = null; } (lime_graphics__$WebGLRenderContext_WebGLRenderContext_$Impl_$().default).compressedTexImage2D(gl,target,level,alphaTexture.__internalFormat,width,height,0,this2); _gthis.__alphaTexture = alphaTexture; } else { var elements2 = null; var array2 = null; var view2 = null; var buffer2 = bytes.b.buffer; var byteoffset2 = 0; if(byteoffset2 == null) { byteoffset2 = 0; } var this3; if(elements2 != null) { this3 = new Uint8Array(elements2); } else if(array2 != null) { this3 = new Uint8Array(array2); } else if(view2 != null) { this3 = new Uint8Array(view2); } else if(buffer2 != null) { if(blockLength == null) { this3 = new Uint8Array(buffer2,byteoffset2); } else { this3 = new Uint8Array(buffer2,byteoffset2,blockLength); } } else { this3 = null; } (lime_graphics__$WebGLRenderContext_WebGLRenderContext_$Impl_$().default).compressedTexImage2D(gl,target,level,_gthis.__internalFormat,width,height,0,this3); } }); if(!hasTexture) { var elements3 = this.__size * this.__size * 4; var array3 = null; var view3 = null; var buffer3 = null; var len = null; var this4; if(elements3 != null) { this4 = new Uint8Array(elements3); } else if(array3 != null) { this4 = new Uint8Array(array3); } else if(view3 != null) { this4 = new Uint8Array(view3); } else if(buffer3 != null) { if(len == null) { this4 = new Uint8Array(buffer3,0); } else { this4 = new Uint8Array(buffer3,0,len); } } else { this4 = null; } var data1 = this4; var tmp = this.__sideToTarget(0); (lime_graphics__$WebGLRenderContext_WebGLRenderContext_$Impl_$().default).texImage2D(gl,tmp,0,this.__internalFormat,this.__size,this.__size,0,this.__format,gl.UNSIGNED_BYTE,data1); var elements4 = this.__size * this.__size * 4; var array4 = null; var view4 = null; var buffer4 = null; var len1 = null; var this5; if(elements4 != null) { this5 = new Uint8Array(elements4); } else if(array4 != null) { this5 = new Uint8Array(array4); } else if(view4 != null) { this5 = new Uint8Array(view4); } else if(buffer4 != null) { if(len1 == null) { this5 = new Uint8Array(buffer4,0); } else { this5 = new Uint8Array(buffer4,0,len1); } } else { this5 = null; } var data2 = this5; var tmp1 = this.__sideToTarget(1); (lime_graphics__$WebGLRenderContext_WebGLRenderContext_$Impl_$().default).texImage2D(gl,tmp1,0,this.__internalFormat,this.__size,this.__size,0,this.__format,gl.UNSIGNED_BYTE,data2); var elements5 = this.__size * this.__size * 4; var array5 = null; var view5 = null; var buffer5 = null; var len2 = null; var this6; if(elements5 != null) { this6 = new Uint8Array(elements5); } else if(array5 != null) { this6 = new Uint8Array(array5); } else if(view5 != null) { this6 = new Uint8Array(view5); } else if(buffer5 != null) { if(len2 == null) { this6 = new Uint8Array(buffer5,0); } else { this6 = new Uint8Array(buffer5,0,len2); } } else { this6 = null; } var data3 = this6; var tmp2 = this.__sideToTarget(2); (lime_graphics__$WebGLRenderContext_WebGLRenderContext_$Impl_$().default).texImage2D(gl,tmp2,0,this.__internalFormat,this.__size,this.__size,0,this.__format,gl.UNSIGNED_BYTE,data3); var elements6 = this.__size * this.__size * 4; var array6 = null; var view6 = null; var buffer6 = null; var len3 = null; var this7; if(elements6 != null) { this7 = new Uint8Array(elements6); } else if(array6 != null) { this7 = new Uint8Array(array6); } else if(view6 != null) { this7 = new Uint8Array(view6); } else if(buffer6 != null) { if(len3 == null) { this7 = new Uint8Array(buffer6,0); } else { this7 = new Uint8Array(buffer6,0,len3); } } else { this7 = null; } var data4 = this7; var tmp3 = this.__sideToTarget(3); (lime_graphics__$WebGLRenderContext_WebGLRenderContext_$Impl_$().default).texImage2D(gl,tmp3,0,this.__internalFormat,this.__size,this.__size,0,this.__format,gl.UNSIGNED_BYTE,data4); var elements7 = this.__size * this.__size * 4; var array7 = null; var view7 = null; var buffer7 = null; var len4 = null; var this8; if(elements7 != null) { this8 = new Uint8Array(elements7); } else if(array7 != null) { this8 = new Uint8Array(array7); } else if(view7 != null) { this8 = new Uint8Array(view7); } else if(buffer7 != null) { if(len4 == null) { this8 = new Uint8Array(buffer7,0); } else { this8 = new Uint8Array(buffer7,0,len4); } } else { this8 = null; } var data5 = this8; var tmp4 = this.__sideToTarget(4); (lime_graphics__$WebGLRenderContext_WebGLRenderContext_$Impl_$().default).texImage2D(gl,tmp4,0,this.__internalFormat,this.__size,this.__size,0,this.__format,gl.UNSIGNED_BYTE,data5); var elements8 = this.__size * this.__size * 4; var array8 = null; var view8 = null; var buffer8 = null; var len5 = null; var this9; if(elements8 != null) { this9 = new Uint8Array(elements8); } else if(array8 != null) { this9 = new Uint8Array(array8); } else if(view8 != null) { this9 = new Uint8Array(view8); } else if(buffer8 != null) { if(len5 == null) { this9 = new Uint8Array(buffer8,0); } else { this9 = new Uint8Array(buffer8,0,len5); } } else { this9 = null; } var data6 = this9; var tmp5 = this.__sideToTarget(5); (lime_graphics__$WebGLRenderContext_WebGLRenderContext_$Impl_$().default).texImage2D(gl,tmp5,0,this.__internalFormat,this.__size,this.__size,0,this.__format,gl.UNSIGNED_BYTE,data6); } this.__context.__bindGLTextureCubeMap(null); } }); CubeTexture.prototype.__class__ = CubeTexture.prototype.constructor = $hxClasses["openfl.display3D.textures.CubeTexture"] = CubeTexture; // Init // Statics // Export exports.default = CubeTexture;