UNPKG

openfl

Version:

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

273 lines (256 loc) 11.5 kB
// Class: openfl.display3D.textures.TextureBase 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_events_EventDispatcher() {return require("./../../../openfl/events/EventDispatcher");} function lime_utils_Log() {return require("./../../../lime/utils/Log");} function openfl_display3D_Context3D() {return require("./../../../openfl/display3D/Context3D");} function lime__$internal_graphics_ImageCanvasUtil() {return require("./../../../lime/_internal/graphics/ImageCanvasUtil");} function lime_graphics_ImageType() {return require("./../../../lime/graphics/ImageType");} function js__$Boot_HaxeError() {return require("./../../../js/_Boot/HaxeError");} function openfl_errors_Error() {return require("./../../../openfl/errors/Error");} function lime_graphics__$WebGLRenderContext_WebGLRenderContext_$Impl_$() {return require("./../../../lime/graphics/_WebGLRenderContext/WebGLRenderContext_Impl_");} function haxe_ds_IntMap() {return require("./../../../haxe/ds/IntMap");} // Constructor var TextureBase = function(context) { (openfl_events_EventDispatcher().default).call(this); this.__context = context; var gl = this.__context.gl; this.__textureID = gl.createTexture(); this.__textureContext = this.__context.__context; if(TextureBase.__supportsBGRA == null) { TextureBase.__textureInternalFormat = gl.RGBA; var bgraExtension = null; if(bgraExtension != null) { TextureBase.__supportsBGRA = true; TextureBase.__textureFormat = bgraExtension.BGRA_EXT; if(context.__context.type == "opengles") { TextureBase.__textureInternalFormat = bgraExtension.BGRA_EXT; } } else { TextureBase.__supportsBGRA = false; TextureBase.__textureFormat = gl.RGBA; } TextureBase.__compressedFormats = new (haxe_ds_IntMap().default)(); TextureBase.__compressedFormatsAlpha = new (haxe_ds_IntMap().default)(); var dxtExtension = gl.getExtension("WEBGL_compressed_texture_s3tc"); var etc1Extension = gl.getExtension("WEBGL_compressed_texture_etc1"); var pvrtcExtension = gl.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"); if(dxtExtension != null) { var v = dxtExtension.COMPRESSED_RGBA_S3TC_DXT1_EXT; TextureBase.__compressedFormats.set(0,v); var v1 = dxtExtension.COMPRESSED_RGBA_S3TC_DXT5_EXT; TextureBase.__compressedFormatsAlpha.set(0,v1); } if(etc1Extension != null) { var v2 = etc1Extension.COMPRESSED_RGB_ETC1_WEBGL; TextureBase.__compressedFormats.set(2,v2); var v3 = etc1Extension.COMPRESSED_RGB_ETC1_WEBGL; TextureBase.__compressedFormatsAlpha.set(2,v3); } if(pvrtcExtension != null) { var v4 = pvrtcExtension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; TextureBase.__compressedFormats.set(1,v4); var v5 = pvrtcExtension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; TextureBase.__compressedFormatsAlpha.set(1,v5); } } this.__internalFormat = TextureBase.__textureInternalFormat; this.__format = TextureBase.__textureFormat; } // Meta TextureBase.__name__ = "openfl.display3D.textures.TextureBase"; TextureBase.__isInterface__ = false; TextureBase.__super__ = (openfl_events_EventDispatcher().default); TextureBase.prototype = $extend((openfl_events_EventDispatcher().default).prototype, { dispose: function() { var gl = this.__context.gl; if(this.__alphaTexture != null) { this.__alphaTexture.dispose(); this.__alphaTexture = null; } if(this.__textureID != null) { gl.deleteTexture(this.__textureID); this.__textureID = null; } if(this.__glFramebuffer != null) { gl.deleteFramebuffer(this.__glFramebuffer); this.__glFramebuffer = null; } if(this.__glDepthRenderbuffer != null) { gl.deleteRenderbuffer(this.__glDepthRenderbuffer); this.__glDepthRenderbuffer = null; } if(this.__glStencilRenderbuffer != null) { gl.deleteRenderbuffer(this.__glStencilRenderbuffer); this.__glStencilRenderbuffer = null; } }, __getGLFramebuffer: function(enableDepthAndStencil,antiAlias,surfaceSelector) { var gl = this.__context.gl; if(this.__glFramebuffer == null) { this.__glFramebuffer = gl.createFramebuffer(); this.__context.__bindGLFramebuffer(this.__glFramebuffer); gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,this.__textureID,0); if(this.__context.__enableErrorChecking) { var code = gl.checkFramebufferStatus(gl.FRAMEBUFFER); if(code != gl.FRAMEBUFFER_COMPLETE) { (lime_utils_Log().default).warn("Error: Context3D.setRenderToTexture status:" + code + " width:" + this.__width + " height:" + this.__height,{ fileName : "../node_modules/openfl-haxelib/src/openfl/display3D/textures/TextureBase.hx", lineNumber : 201, className : "openfl.display3D.textures.TextureBase", methodName : "__getGLFramebuffer"}); } } } if(enableDepthAndStencil && this.__glDepthRenderbuffer == null) { this.__context.__bindGLFramebuffer(this.__glFramebuffer); if((openfl_display3D_Context3D().default).__glDepthStencil != 0) { this.__glDepthRenderbuffer = gl.createRenderbuffer(); this.__glStencilRenderbuffer = this.__glDepthRenderbuffer; gl.bindRenderbuffer(gl.RENDERBUFFER,this.__glDepthRenderbuffer); gl.renderbufferStorage(gl.RENDERBUFFER,(openfl_display3D_Context3D().default).__glDepthStencil,this.__width,this.__height); gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.DEPTH_STENCIL_ATTACHMENT,gl.RENDERBUFFER,this.__glDepthRenderbuffer); } else { this.__glDepthRenderbuffer = gl.createRenderbuffer(); this.__glStencilRenderbuffer = gl.createRenderbuffer(); gl.bindRenderbuffer(gl.RENDERBUFFER,this.__glDepthRenderbuffer); gl.renderbufferStorage(gl.RENDERBUFFER,gl.DEPTH_COMPONENT16,this.__width,this.__height); gl.bindRenderbuffer(gl.RENDERBUFFER,this.__glStencilRenderbuffer); gl.renderbufferStorage(gl.RENDERBUFFER,gl.STENCIL_INDEX8,this.__width,this.__height); gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.DEPTH_ATTACHMENT,gl.RENDERBUFFER,this.__glDepthRenderbuffer); gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.STENCIL_ATTACHMENT,gl.RENDERBUFFER,this.__glStencilRenderbuffer); } if(this.__context.__enableErrorChecking) { var code1 = gl.checkFramebufferStatus(gl.FRAMEBUFFER); if(code1 != gl.FRAMEBUFFER_COMPLETE) { (lime_utils_Log().default).warn("Error: Context3D.setRenderToTexture status:" + code1 + " width:" + this.__width + " height:" + this.__height,{ fileName : "../node_modules/openfl-haxelib/src/openfl/display3D/textures/TextureBase.hx", lineNumber : 239, className : "openfl.display3D.textures.TextureBase", methodName : "__getGLFramebuffer"}); } } gl.bindRenderbuffer(gl.RENDERBUFFER,null); } return this.__glFramebuffer; }, __getImage: function(bitmapData) { var image = bitmapData.image; if(!bitmapData.__isValid || image == null) { return null; } (lime__$internal_graphics_ImageCanvasUtil().default).sync(image,false); var gl = this.__context.gl; if(image.type != (lime_graphics_ImageType().default).DATA && !image.get_premultiplied()) { gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,1); } else if(!image.get_premultiplied() && image.get_transparent()) { gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,0); image = image.clone(); image.set_premultiplied(true); } if(image.get_format() != 0) { image = image.clone(); image.set_format(0); image.buffer.premultiplied = true; } return image; }, __getTexture: function() { return this.__textureID; }, __setSamplerState: function(state) { if(!state.equals(this.__samplerState)) { var gl = this.__context.gl; if(this.__textureTarget == this.__context.gl.TEXTURE_CUBE_MAP) { this.__context.__bindGLTextureCubeMap(this.__textureID); } else { this.__context.__bindGLTexture2D(this.__textureID); } var wrapModeS = 0; var wrapModeT = 0; switch(state.wrap) { case "clamp": wrapModeS = gl.CLAMP_TO_EDGE; wrapModeT = gl.CLAMP_TO_EDGE; break; case "clamp_u_repeat_v": wrapModeS = gl.CLAMP_TO_EDGE; wrapModeT = gl.REPEAT; break; case "repeat": wrapModeS = gl.REPEAT; wrapModeT = gl.REPEAT; break; case "repeat_u_clamp_v": wrapModeS = gl.REPEAT; wrapModeT = gl.CLAMP_TO_EDGE; break; default: throw new (js__$Boot_HaxeError().default)(new (openfl_errors_Error().default)("wrap bad enum")); } var magFilter = 0; var minFilter = 0; if(state.filter == "nearest") { magFilter = gl.NEAREST; } else { magFilter = gl.LINEAR; } switch(state.mipfilter) { case "miplinear": minFilter = state.filter == "nearest" ? gl.NEAREST_MIPMAP_LINEAR : gl.LINEAR_MIPMAP_LINEAR; break; case "mipnearest": minFilter = state.filter == "nearest" ? gl.NEAREST_MIPMAP_NEAREST : gl.LINEAR_MIPMAP_NEAREST; break; case "mipnone": minFilter = state.filter == "nearest" ? gl.NEAREST : gl.LINEAR; break; default: throw new (js__$Boot_HaxeError().default)(new (openfl_errors_Error().default)("mipfiter bad enum")); } gl.texParameteri(this.__textureTarget,gl.TEXTURE_MIN_FILTER,minFilter); gl.texParameteri(this.__textureTarget,gl.TEXTURE_MAG_FILTER,magFilter); gl.texParameteri(this.__textureTarget,gl.TEXTURE_WRAP_S,wrapModeS); gl.texParameteri(this.__textureTarget,gl.TEXTURE_WRAP_T,wrapModeT); var tmp = state.lodBias != 0.0; if(this.__samplerState == null) { this.__samplerState = state.clone(); } this.__samplerState.copyFrom(state); return true; } return false; }, __uploadFromImage: function(image) { var gl = this.__context.gl; var internalFormat; var format; if(this.__textureTarget != gl.TEXTURE_2D) { return; } if(image.buffer.bitsPerPixel == 1) { internalFormat = gl.ALPHA; format = gl.ALPHA; } else { internalFormat = TextureBase.__textureInternalFormat; format = TextureBase.__textureFormat; } this.__context.__bindGLTexture2D(this.__textureID); if(image.type != (lime_graphics_ImageType().default).DATA && !image.get_premultiplied()) { gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,1); } else if(!image.get_premultiplied() && image.get_transparent()) { gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,1); } if(image.type == (lime_graphics_ImageType().default).DATA) { (lime_graphics__$WebGLRenderContext_WebGLRenderContext_$Impl_$().default).texImage2D(gl,gl.TEXTURE_2D,0,internalFormat,image.buffer.width,image.buffer.height,0,format,gl.UNSIGNED_BYTE,image.get_data()); } else { (lime_graphics__$WebGLRenderContext_WebGLRenderContext_$Impl_$().default).texImage2D(gl,gl.TEXTURE_2D,0,internalFormat,format,gl.UNSIGNED_BYTE,image.get_src()); } this.__context.__bindGLTexture2D(null); } }); TextureBase.prototype.__class__ = TextureBase.prototype.constructor = $hxClasses["openfl.display3D.textures.TextureBase"] = TextureBase; // Init // Statics TextureBase.__meta__ = { fields : { __textureContext : { SuppressWarnings : ["checkstyle:Dynamic"]}, __getGLFramebuffer : { SuppressWarnings : ["checkstyle:Dynamic"]}}} TextureBase.__supportsBGRA = null // Export exports.default = TextureBase;