diff options
author | Wonseop Kim <wonseop.kim@samsung.com> | 2013-04-22 18:19:47 +0900 |
---|---|---|
committer | Youmin Ha <youmin.ha@samsung.com> | 2013-04-26 14:43:30 +0900 |
commit | 4c77334c69b5e642323769adbc703fedc42257a9 (patch) | |
tree | 1893a0eb535592aa8f3294b74195f8151e4863ac | |
parent | d0d6ac44c78f602abdc73a4bf886b42e669783f7 (diff) | |
download | web-ui-fw-4c77334c69b5e642323769adbc703fedc42257a9.tar.gz web-ui-fw-4c77334c69b5e642323769adbc703fedc42257a9.tar.bz2 web-ui-fw-4c77334c69b5e642323769adbc703fedc42257a9.zip |
Gallery3d: Change timing of 'gl-matrix' library's execution
Change-Id: Iaa886c2ab3f93bbd3ab8540e960f07ff7d2754ee
-rw-r--r-- | libs/js/gl-matrix.js | 6 | ||||
-rw-r--r-- | src/js/widgets/jquery.mobile.tizen.gallery3d.js | 207 |
2 files changed, 116 insertions, 97 deletions
diff --git a/libs/js/gl-matrix.js b/libs/js/gl-matrix.js index 57180556..c7f1006f 100644 --- a/libs/js/gl-matrix.js +++ b/libs/js/gl-matrix.js @@ -42,8 +42,10 @@ return factory(root); }); } else { - // Browser globals - factory(root); + // Specific initialization for TIZEN Web UI Framework + root.initGlMatrix = function ( targetRoot ) { + factory( targetRoot || root ); + }; } }(this, function (root) { "use strict"; diff --git a/src/js/widgets/jquery.mobile.tizen.gallery3d.js b/src/js/widgets/jquery.mobile.tizen.gallery3d.js index b4676857..832c69ee 100644 --- a/src/js/widgets/jquery.mobile.tizen.gallery3d.js +++ b/src/js/widgets/jquery.mobile.tizen.gallery3d.js @@ -242,7 +242,7 @@ define( [ "components/imageloader", "components/motionpath", "components/webgl" * select ( [number] ) * : When the "select" method is called with an argument, the method selects the image of given index. * If the method is called with no argument, it will return the Javascript object having "src" - * attribute having the selected image’s URL. + * attribute having the selected image's URL. * add ( object or string [, number] ) * This method adds an image to Gallery3D widget. * If the second argument isn't inputted, the image is added at the 0th position. @@ -340,7 +340,7 @@ define( [ "components/imageloader", "components/motionpath", "components/webgl" /** @method select When the "select" method is called with an argument, the method selects the image of given index. - If the method is called with no argument, it will return the Javascript object having "src" attribute having the selected image’s URL. + If the method is called with no argument, it will return the Javascript object having "src" attribute having the selected image's URL. <script> $( "#gallery3d" ).on( "gallery3dcreate", function () { @@ -449,90 +449,6 @@ define( [ "components/imageloader", "components/motionpath", "components/webgl" */ ( function ( $, document, window, undefined ) { - window.requestAnimationFrame = ( function () { - return function ( callback ) { - var id = window.setTimeout( callback, 1000 / 60 ); - return id; - }; - } () ); - - window.cancelAnimationFrame = ( function () { - return function ( id ) { - window.clearTimeout( id ); - }; - } () ); - - var vec3 = window.vec3, - mat3 = window.mat3, - mat4 = window.mat4, - GlArray32 = ( typeof window.Float32Array !== "undefined" ? window.Float32Array : ( typeof window.WebGLFloatArray !== "undefined" ? window.WebGLFloatArray : Array ) ), - GlArray16 = ( typeof window.Uint16Array !== "undefined" ? window.Uint16Array : Array ), - getContext3D = function ( canvas ) { - var gl, i, - contextNames = [ "experimental-webgl", "webkit-3d", "webgl", "moz-webgl" ]; - - for ( i = 0; i < contextNames.length; i += 1 ) { - try { - gl = canvas.getContext( contextNames[i] ); - if ( gl ) { - break; - } - } catch ( e ) { - window.alert( "Unfortunately, there's a WebGL compatibility problem. </br> You may want to check your system settings." ); - return; - } - } - return gl; - }, - VERTEX_SHADER = [ - "attribute vec3 aVertexPosition;", - "attribute vec2 aTextureCoord;", - "attribute vec3 aVertexNormal;", - "uniform mat4 uMoveMatrix;", - "uniform mat4 uPerspectiveMatrix;", - "uniform mat3 nNormalMatrix;", - "uniform vec3 uAmbientColor;", - "uniform vec3 uLightDirection;", - "uniform vec3 uDirectionColor;", - "uniform vec3 uLightDirection_first;", - "uniform vec3 uLightDirection_second;", - "varying vec2 vTextureCoord;", - "varying vec3 vLightWeight;", - "varying vec4 vFogWeight;", - - "void main(void) {", - " vec4 v_Position = uMoveMatrix * vec4(aVertexPosition, 1.0);", - " gl_Position = uPerspectiveMatrix * v_Position;", - " vTextureCoord = aTextureCoord;", - " float fog = 1.0 - ((gl_Position.z + 1.5) / 60.0);", - " vFogWeight = clamp( vec4( fog, fog, fog, 1.0), 0.6, 1.0);", - " vec3 transNormalVector = nNormalMatrix * aVertexNormal;", - - " float vLightWeightFirst = 0.0;", - " float vLightWeightSecond = max( dot(transNormalVector, uLightDirection_second), 0.0 );", - - " vLightWeight = uAmbientColor + uDirectionColor * vLightWeightSecond;", - "}" - ].join( "\n" ), - FRAGMENT_SHADER = [ - "precision mediump float;", - "varying vec2 vTextureCoord;", - "varying vec3 vLightWeight;", - "uniform sampler2D uSampler;", - "varying vec4 vFogWeight;", - - "void main(void) {", - " vec4 TextureColor;", - " if ( vTextureCoord.s <= 0.01 || vTextureCoord.s >= 0.99 || vTextureCoord.t <= 0.01 || vTextureCoord.t >= 0.99 ) {", - " TextureColor = vec4(1.0, 1.0, 1.0, 0.5);", - " } else {", - " TextureColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));", - " }", - " TextureColor *= vFogWeight;", - " gl_FragColor = vec4(TextureColor.rgb * vLightWeight, TextureColor.a);", - "}" - ].join( "\n" ); - function Node() { this.vertices = [ -1.0, -1.0, 0.0, @@ -564,6 +480,105 @@ define( [ "components/imageloader", "components/motionpath", "components/webgl" this.imageID = 0; } + var isPreInitailization = false, + glMatrix = {}, + VERTEX_SHADER, + FRAGMENT_SHADER, + GlArray32, + GlArray16, + preInitialize = function () { + if ( isPreInitailization ) { + return; + } + + window.initGlMatrix( glMatrix ); + + VERTEX_SHADER = [ + "attribute vec3 aVertexPosition;", + "attribute vec2 aTextureCoord;", + "attribute vec3 aVertexNormal;", + "uniform mat4 uMoveMatrix;", + "uniform mat4 uPerspectiveMatrix;", + "uniform mat3 nNormalMatrix;", + "uniform vec3 uAmbientColor;", + "uniform vec3 uLightDirection;", + "uniform vec3 uDirectionColor;", + "uniform vec3 uLightDirection_first;", + "uniform vec3 uLightDirection_second;", + "varying vec2 vTextureCoord;", + "varying vec3 vLightWeight;", + "varying vec4 vFogWeight;", + + "void main(void) {", + " vec4 v_Position = uMoveMatrix * vec4(aVertexPosition, 1.0);", + " gl_Position = uPerspectiveMatrix * v_Position;", + " vTextureCoord = aTextureCoord;", + " float fog = 1.0 - ((gl_Position.z + 1.5) / 60.0);", + " vFogWeight = clamp( vec4( fog, fog, fog, 1.0), 0.6, 1.0);", + " vec3 transNormalVector = nNormalMatrix * aVertexNormal;", + + " float vLightWeightFirst = 0.0;", + " float vLightWeightSecond = max( dot(transNormalVector, uLightDirection_second), 0.0 );", + + " vLightWeight = uAmbientColor + uDirectionColor * vLightWeightSecond;", + "}" + ].join( "\n" ); + + FRAGMENT_SHADER = [ + "precision mediump float;", + "varying vec2 vTextureCoord;", + "varying vec3 vLightWeight;", + "uniform sampler2D uSampler;", + "varying vec4 vFogWeight;", + + "void main(void) {", + " vec4 TextureColor;", + " if ( vTextureCoord.s <= 0.01 || vTextureCoord.s >= 0.99 || vTextureCoord.t <= 0.01 || vTextureCoord.t >= 0.99 ) {", + " TextureColor = vec4(1.0, 1.0, 1.0, 0.5);", + " } else {", + " TextureColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));", + " }", + " TextureColor *= vFogWeight;", + " gl_FragColor = vec4(TextureColor.rgb * vLightWeight, TextureColor.a);", + "}" + ].join( "\n" ); + + GlArray32 = ( typeof window.Float32Array !== "undefined" ? + window.Float32Array : + ( typeof window.WebGLFloatArray !== "undefined" ? window.WebGLFloatArray : Array ) ); + + GlArray16 = ( typeof window.Uint16Array !== "undefined" ? window.Uint16Array : Array ); + + isPreInitailization = true; + }, + degreeToRadian = function ( degree ) { + return degree * Math.PI / 180; + }, + getContext3D = function ( canvas ) { + var gl, i, + contextNames = [ "experimental-webgl", "webkit-3d", "webgl", "moz-webgl" ]; + + for ( i = 0; i < contextNames.length; i += 1 ) { + try { + gl = canvas.getContext( contextNames[i] ); + if ( gl ) { + break; + } + } catch ( e ) { + $( canvas ).html( "Unfortunately, there's a WebGL compatibility problem. </br> You may want to check your system settings." ); + return; + } + } + return gl; + }, + requestAnimationFrame = function ( callback ) { + var id = window.setTimeout( callback, 1000 / 60 ); + return id; + }, + cancelAnimationFrame = function ( id ) { + window.clearTimeout( id ); + }; + $.widget( "tizen.gallery3d", $.mobile.widget, { options: { thumbnailCache: false @@ -607,6 +622,8 @@ define( [ "components/imageloader", "components/motionpath", "components/webgl" view = self.element, option = self.options; + preInitialize(); + self._canvas = $( "<canvas class='ui-gallery3d-canvas'></canvas>" ); view.addClass( "ui-gallery3d" ).append( self._canvas ); @@ -870,11 +887,11 @@ define( [ "components/imageloader", "components/motionpath", "components/webgl" // ---------------------------------------------------------- _initGL: function ( canvas ) { var self = this, + mat4 = glMatrix.mat4, gl; gl = getContext3D( canvas ); if ( !gl ) { - window.alert( "There's no WebGL context available!!!" ); return null; } @@ -1071,6 +1088,7 @@ define( [ "components/imageloader", "components/motionpath", "components/webgl" // ---------------------------------------------------------- _setPosition: function ( progress, direction ) { var self = this, + mat4 = glMatrix.mat4, nodes = self._nodes, imageList = self._imageList, imageListLength = imageList.length, @@ -1118,7 +1136,7 @@ define( [ "components/imageloader", "components/motionpath", "components/webgl" mat4.identity( nodes[i].mvMatrix ); mat4.translate( nodes[i].mvMatrix, [-2.0, -2.0, 1.0] ); - mat4.rotate( nodes[i].mvMatrix, self._degreeToRadian( 19 ), [1, 0, 0] ); + mat4.rotate( nodes[i].mvMatrix, degreeToRadian( 19 ), [1, 0, 0] ); t = ( current + ( next - current ) * ( ( progress > 1 ) ? 1 : progress ) ); @@ -1192,6 +1210,9 @@ define( [ "components/imageloader", "components/motionpath", "components/webgl" _drawElement: function ( perspectiveMatrix, targetNode ) { var self = this, gl = self._gl, + vec3 = glMatrix.vec3, + mat3 = glMatrix.mat3, + mat4 = glMatrix.mat4, shaderProgram = self._shaderProgram, moveMatrix = targetNode.mvMatrix, texture = targetNode.texture, @@ -1280,7 +1301,7 @@ define( [ "components/imageloader", "components/motionpath", "components/webgl" self._setPosition( progress - _removeCount, direction ); } - self._animationID = window.requestAnimationFrame( function () { + self._animationID = requestAnimationFrame( function () { self._animate( easingType, duration, direction, repeatCount, startValue, _removeCount ); }); }, @@ -1317,7 +1338,7 @@ define( [ "components/imageloader", "components/motionpath", "components/webgl" _stop: function () { if ( this._animationID ) { - window.cancelAnimationFrame( this._animationID ); + cancelAnimationFrame( this._animationID ); } this._animationID = 0; @@ -1325,10 +1346,6 @@ define( [ "components/imageloader", "components/motionpath", "components/webgl" this._sumTime = 0; }, - _degreeToRadian: function ( degree ) { - return degree * Math.PI / 180; - }, - next: function () { this._run( this._DIRECTION_LEFT , 0 ); }, @@ -1457,4 +1474,4 @@ define( [ "components/imageloader", "components/motionpath", "components/webgl" //>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude); } ); -//>>excludeEnd("jqmBuildExclude");
\ No newline at end of file +//>>excludeEnd("jqmBuildExclude"); |