From 1aa4c4b3300c877db61527e9a3d77966f1d4f266 Mon Sep 17 00:00:00 2001 From: Pasi Keranen <pasi.keranen@digia.com> Date: Mon, 9 Feb 2015 09:51:55 +0200 Subject: [PATCH] Updates for Technology Preview 2 Release. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updated README file with latest fixes and changes. Updated plugintypes.qmltypes file. Updated three.js to latest version. Change-Id: I533bf7e195ec2316b407dce625bd4d11b605a7bc Reviewed-by: Pasi Keränen <pasi.keranen@digia.com> --- README | 39 ++-- creatortemplates/qtcanvas3dthreejs/three.js | 213 ++++++++++---------- src/plugins.qmltypes | 132 +++++------- 3 files changed, 183 insertions(+), 201 deletions(-) diff --git a/README b/README index 4f83faa..47c68bc 100644 --- a/README +++ b/README @@ -77,23 +77,9 @@ Known Issues - Texturing does not work perfectly in all of the examples. - Resizing window works incorrectly if viewport is updated during rendering to match the window size (try Framebuffer Example for reference). -- These methods are named for Tech Preview with “a†postfix to denote “array†versions taking a JavaScript array instead of TypedArray. - This is to resolve method overloading problems with the current QObject based TypedArray implementation and will be rectified before final release: - void uniform1fva(CanvasUniformLocation *location, QVariantList array) - void uniform2fva(CanvasUniformLocation *location, QVariantList array) - void uniform3fva(CanvasUniformLocation *location, QVariantList array) - void uniform4fva(CanvasUniformLocation *location, QVariantList array) - void uniform1iva(CanvasUniformLocation *location, QVariantList array) - void uniform2iva(CanvasUniformLocation *location, QVariantList array) - void uniform3iva(CanvasUniformLocation *location, QVariantList array) - void uniform4iva(CanvasUniformLocation *location, QVariantList array) - void vertexAttrib1fva(uint indx, QVariantList values) - void vertexAttrib2fva(uint indx, QVariantList values) - void vertexAttrib3fva(uint indx, QVariantList values) - void vertexAttrib4fva(uint indx, QVariantList values) - -Fixed from Technology Preview 1 -=============================== + +Fixed/Changed from Technology Preview 1 +======================================= - All Canvas3D C++ classes have now been put to namespace to avoid clashes. - Qt Creator wizard templates have been implemented and added. - Crash when giving null pointer to texImage2D fixed. @@ -104,3 +90,22 @@ Fixed from Technology Preview 1 - checkAllErrors flag now means doing glGetError after each OpenGL API call, this causes negative performance impact, but now all issues related to invalid API use are printed to log. +- Support for OES_standard_derivatives extension has been added. +- Support for all the pixelstore related WebGL specific configurations added. +- FPS counter value added. +- Input and output objects are now wrapped as QJSValues. This has improved the + performance a bit and also allows adding of custom attributes on the JavaScript + side to the objects. Making porting of WebGL code easier to Canvas3D environment. +- These methods are now named according to the WebGL specification: + uniform1fv + uniform2fv + uniform3fv + uniform4fv + uniform1iv + uniform2iv + uniform3iv + uniform4iv + vertexAttrib1fv + vertexAttrib2fv + vertexAttrib3fv + vertexAttrib4fv diff --git a/creatortemplates/qtcanvas3dthreejs/three.js b/creatortemplates/qtcanvas3dthreejs/three.js index de4230d..fc1c9ba 100644 --- a/creatortemplates/qtcanvas3dthreejs/three.js +++ b/creatortemplates/qtcanvas3dthreejs/three.js @@ -639,8 +639,9 @@ function Image () { this.__defineSetter__("src", function(url){ if (url && url !== '' && url !== _this._src) { _this._texImage.src = ""+url; + _this._texImage.name = ""+url; } - this._src = url; + _this._src = url; }); this.__defineGetter__("width", function(){ @@ -674,8 +675,6 @@ Image.prototype = { }, notifySuccess: function(image) { - console.log("NotifySuccess"+image+" source "+image.src); - console.log("Teximage"+this._texImage); if (this._onSuccessCallback !== undefined) { this._onSuccessCallback(new Event()); } @@ -688,7 +687,6 @@ Image.prototype = { }, notifyError: function(image) { - console.log("NotifyError"+image+" source "+image.src); if (this._onErrorCallback !== undefined) { this._onErrorCallback(new Event()); } @@ -782,7 +780,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { console.log( 'THREE.Canvas3DRenderer', THREE.REVISION ); - if (parameters === undefined) parameters = {}; + parameters = parameters || {}; if (parameters.canvas === undefined) { console.error("parameter.canvas must be set when using THREE.Canvas3DRenderer"); @@ -803,7 +801,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { _logarithmicDepthBuffer = parameters.logarithmicDepthBuffer !== undefined ? parameters.logarithmicDepthBuffer : false, _clearColor = new THREE.Color( 0x000000 ), - _clearAlpha = 0; + _clearAlpha = parameters.clearAlpha !== undefined ? parameters.clearAlpha : 0; var lights = []; @@ -970,7 +968,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { preserveDrawingBuffer: _preserveDrawingBuffer }; - _gl = _context || _canvas.getContext( 'webgl', attributes ); + _gl = _context || _canvas.getContext( 'webgl', attributes ) || _canvas.getContext( 'experimental-webgl', attributes ); if ( _gl === null ) { @@ -992,19 +990,19 @@ THREE.Canvas3DRenderer = function ( parameters ) { } - if ( _gl.getShaderPrecisionFormat === undefined ) { +// if ( _gl.getShaderPrecisionFormat === undefined ) { - _gl.getShaderPrecisionFormat = function () { +// _gl.getShaderPrecisionFormat = function () { - return { - 'rangeMin': 1, - 'rangeMax': 1, - 'precision': 1 - }; +// return { +// 'rangeMin': 1, +// 'rangeMax': 1, +// 'precision': 1 +// }; - } +// } - } +// } var extensions = new THREE.WebGLExtensions( _gl ); @@ -1211,14 +1209,14 @@ THREE.Canvas3DRenderer = function ( parameters ) { //_canvas.width = width * this.devicePixelRatio; //_canvas.height = height * this.devicePixelRatio; + //if ( updateStyle !== false ) { + // _canvas.style.width = width + 'px'; + // _canvas.style.height = height + 'px'; + //} - - - - - this.setViewport( 0, 0, width, height ); + this.setViewport( 0, 0, width, height ); }; @@ -1247,10 +1245,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { this.enableScissorTest = function ( enable ) { - if (enable) - _gl.enable( _gl.SCISSOR_TEST ) - else - _gl.disable( _gl.SCISSOR_TEST ); + enable ? _gl.enable( _gl.SCISSOR_TEST ) : _gl.disable( _gl.SCISSOR_TEST ); }; @@ -3312,7 +3307,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { if ( object.hasPositions ) { _gl.bindBuffer( _gl.ARRAY_BUFFER, object.__webglVertexBuffer ); - _gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW ); + _gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray.typedArray(), _gl.DYNAMIC_DRAW ); enableAttribute( program.attributes.position ); _gl.vertexAttribPointer( program.attributes.position, 3, _gl.FLOAT, false, 0, 0 ); @@ -4834,7 +4829,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { geometry.colorsNeedUpdate = false; geometry.tangentsNeedUpdate = false; - if ( material.attributes ) clearCustomAttributes( material ); + material.attributes && clearCustomAttributes( material ); } else if ( object instanceof THREE.Line ) { @@ -4852,7 +4847,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { geometry.colorsNeedUpdate = false; geometry.lineDistancesNeedUpdate = false; - if( material.attributes ) clearCustomAttributes( material ); + material.attributes && clearCustomAttributes( material ); } else if ( object instanceof THREE.PointCloud ) { @@ -4870,7 +4865,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { geometry.verticesNeedUpdate = false; geometry.colorsNeedUpdate = false; - if( material.attributes ) clearCustomAttributes( material ); + material.attributes && clearCustomAttributes( material ); } @@ -4985,6 +4980,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { var shader = THREE.ShaderLib[ shaderID ]; material.__webglShader = { + id: shaderID, uniforms: THREE.UniformsUtils.clone( shader.uniforms ), vertexShader: shader.vertexShader, fragmentShader: shader.fragmentShader @@ -4993,6 +4989,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { } else { material.__webglShader = { + id: "material", uniforms: material.uniforms, vertexShader: material.vertexShader, fragmentShader: material.fragmentShader @@ -5231,7 +5228,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { if ( refreshProgram || camera !== _currentCamera ) { - _gl.uniformMatrix4fv( p_uniforms.projectionMatrix, false, camera.projectionMatrix.elements.typedArray() ); + _gl.uniformMatrix4fv( p_uniforms.projectionMatrix, false, camera.projectionMatrix.elements.typedArray() ); if ( _logarithmicDepthBuffer ) { @@ -5265,7 +5262,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { if ( p_uniforms.viewMatrix !== null ) { - _gl.uniformMatrix4fv( p_uniforms.viewMatrix, false, camera.matrixWorldInverse.elements.typedArray() ); + _gl.uniformMatrix4fv( p_uniforms.viewMatrix, false, camera.matrixWorldInverse.elements.typedArray() ); } @@ -5281,13 +5278,13 @@ THREE.Canvas3DRenderer = function ( parameters ) { if ( object.bindMatrix && p_uniforms.bindMatrix !== null ) { - _gl.uniformMatrix4fv( p_uniforms.bindMatrix, false, object.bindMatrix.elements.typedArray() ); + _gl.uniformMatrix4fv( p_uniforms.bindMatrix, false, object.bindMatrix.elements.typedArray() ); } if ( object.bindMatrixInverse && p_uniforms.bindMatrixInverse !== null ) { - _gl.uniformMatrix4fv( p_uniforms.bindMatrixInverse, false, object.bindMatrixInverse.elements.typedArray() ); + _gl.uniformMatrix4fv( p_uniforms.bindMatrixInverse, false, object.bindMatrixInverse.elements.typedArray() ); } @@ -5318,7 +5315,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { if ( p_uniforms.boneGlobalMatrices !== null ) { - _gl.uniformMatrix4fv( p_uniforms.boneGlobalMatrices, false, object.skeleton.boneMatrices.typedArray() ); + _gl.uniformMatrix4fv( p_uniforms.boneGlobalMatrices, false, object.skeleton.boneMatrices.typedArray() ); } @@ -5415,7 +5412,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { if ( p_uniforms.modelMatrix !== null ) { - _gl.uniformMatrix4fv( p_uniforms.modelMatrix, false, object.matrixWorld.elements.typedArray() ); + _gl.uniformMatrix4fv( p_uniforms.modelMatrix, false, object.matrixWorld.elements.typedArray() ); } @@ -5635,27 +5632,27 @@ THREE.Canvas3DRenderer = function ( parameters ) { // If uniforms are marked as clean, they don't need to be loaded to the GPU. - function markUniformsLightsNeedsUpdate ( uniforms, bvalue ) { + function markUniformsLightsNeedsUpdate ( uniforms, bValue ) { - uniforms.ambientLightColor.needsUpdate = bvalue; + uniforms.ambientLightColor.needsUpdate = bValue; - uniforms.directionalLightColor.needsUpdate = bvalue; - uniforms.directionalLightDirection.needsUpdate = bvalue; + uniforms.directionalLightColor.needsUpdate = bValue; + uniforms.directionalLightDirection.needsUpdate = bValue; - uniforms.pointLightColor.needsUpdate = bvalue; - uniforms.pointLightPosition.needsUpdate = bvalue; - uniforms.pointLightDistance.needsUpdate = bvalue; + uniforms.pointLightColor.needsUpdate = bValue; + uniforms.pointLightPosition.needsUpdate = bValue; + uniforms.pointLightDistance.needsUpdate = bValue; - uniforms.spotLightColor.needsUpdate = bvalue; - uniforms.spotLightPosition.needsUpdate = bvalue; - uniforms.spotLightDistance.needsUpdate = bvalue; - uniforms.spotLightDirection.needsUpdate = bvalue; - uniforms.spotLightAngleCos.needsUpdate = bvalue; - uniforms.spotLightExponent.needsUpdate = bvalue; + uniforms.spotLightColor.needsUpdate = bValue; + uniforms.spotLightPosition.needsUpdate = bValue; + uniforms.spotLightDistance.needsUpdate = bValue; + uniforms.spotLightDirection.needsUpdate = bValue; + uniforms.spotLightAngleCos.needsUpdate = bValue; + uniforms.spotLightExponent.needsUpdate = bValue; - uniforms.hemisphereLightSkyColor.needsUpdate = bvalue; - uniforms.hemisphereLightGroundColor.needsUpdate = bvalue; - uniforms.hemisphereLightDirection.needsUpdate = bvalue; + uniforms.hemisphereLightSkyColor.needsUpdate = bValue; + uniforms.hemisphereLightGroundColor.needsUpdate = bValue; + uniforms.hemisphereLightDirection.needsUpdate = bValue; } @@ -5695,11 +5692,11 @@ THREE.Canvas3DRenderer = function ( parameters ) { function loadUniformsMatrices ( uniforms, object ) { - _gl.uniformMatrix4fv( uniforms.modelViewMatrix, false, object._modelViewMatrix.elements.typedArray() ); + _gl.uniformMatrix4fv( uniforms.modelViewMatrix, false, object._modelViewMatrix.elements.typedArray() ); if ( uniforms.normalMatrix ) { - _gl.uniformMatrix3fv( uniforms.normalMatrix, false, object._normalMatrix.elements.typedArray() ); + _gl.uniformMatrix3fv( uniforms.normalMatrix, false, object._normalMatrix.elements.typedArray() ); } @@ -5760,56 +5757,56 @@ THREE.Canvas3DRenderer = function ( parameters ) { case '1iv': if (value instanceof Array) - _gl.uniform1iva( location, value ); + _gl.uniform1iv( location, value ); else _gl.uniform1iv( location, value.typedArray() ); break; case '3iv': if (value instanceof Array) - _gl.uniform3iva( location, value ); + _gl.uniform3iv( location, value ); else _gl.uniform3iv( location, value.typedArray() ); break; case '1fv': if (value instanceof Array) - _gl.uniform1fva( location, value ); + _gl.uniform1fv( location, value ); else _gl.uniform1fv( location, value.typedArray() ); break; case '2fv': if (value instanceof Array) - _gl.uniform2fva( location, value ); + _gl.uniform2fv( location, value ); else _gl.uniform2fv( location, value.typedArray() ); break; case '3fv': if (value instanceof Array) - _gl.uniform3fva( location, value ); + _gl.uniform3fv( location, value ); else _gl.uniform3fv( location, value.typedArray() ); break; case '4fv': if (value instanceof Array) - _gl.uniform4fva( location, value ); + _gl.uniform4fv( location, value ); else _gl.uniform4fv( location, value.typedArray() ); break; case 'Matrix3fv': if (value instanceof Array) - _gl.uniformMatrix3fva( location, false, value ); + _gl.uniformMatrix4fv( location, false, value ); else _gl.uniformMatrix3fv( location, false, value.typedArray() ); break; case 'Matrix4fv': if (value instanceof Array) - _gl.uniformMatrix4fva( location, false, value ); + _gl.uniformMatrix4fv( location, false, value ); else _gl.uniformMatrix4fv( location, false, value.typedArray() ); break; @@ -5862,7 +5859,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { // flat array of integers (JS or typed array) if (value instanceof Array) - _gl.uniform1iva( location, value ); + _gl.uniform1iv( location, value ); else _gl.uniform1iv( location, value.typedArray() ); @@ -5872,7 +5869,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { // flat array of integers with 3 x N size (JS or typed array) if (value instanceof Array) - _gl.uniform3iva( location, value ); + _gl.uniform3iv( location, value ); else _gl.uniform3iv( location, value.typedArray() ); @@ -5882,7 +5879,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { // flat array of floats (JS or typed array) if (value instanceof Array) - _gl.uniform1fva( location, value ); + _gl.uniform1fv( location, value ); else _gl.uniform1fv( location, value.typedArray() ); @@ -5892,7 +5889,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { // flat array of floats with 3 x N size (JS or typed array) if (value instanceof Array) - _gl.uniform3fva( location, value ); + _gl.uniform3fv( location, value ); else _gl.uniform3fv( location, value.typedArray() ); @@ -5973,7 +5970,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { case 'm3': // single THREE.Matrix3 - _gl.uniformMatrix3fv( location, false, value.elements.typedArray() ); + _gl.uniformMatrix3fv( location, false, value.elements.typedArray() ); break; @@ -6000,7 +5997,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { case 'm4': // single THREE.Matrix4 - _gl.uniformMatrix4fv( location, false, value.elements.typedArray() ); + _gl.uniformMatrix4fv( location, false, value.elements.typedArray() ); break; @@ -6068,7 +6065,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { } - _gl.uniform1iv( location, uniform._array ); + _gl.uniform1iv( location, uniform._array ); for ( var i = 0, il = uniform.value.length; i < il; i ++ ) { @@ -6649,7 +6646,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { for ( var i = 0, il = mipmaps.length; i < il; i ++ ) { mipmap = mipmaps[ i ]; - _gl.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + _gl.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data.typedArray() ); } @@ -6657,7 +6654,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { } else { - _gl.texImage2D( _gl.TEXTURE_2D, 0, glFormat, image.width, image.height, 0, glFormat, glType, image.data ); + _gl.texImage2D( _gl.TEXTURE_2D, 0, glFormat, image.width, image.height, 0, glFormat, glType, image.data.typedArray() ); } @@ -6671,7 +6668,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { if ( getCompressedTextureFormats().indexOf( glFormat ) > -1 ) { - _gl.compressedTexImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, mipmap.data ); + _gl.compressedTexImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, mipmap.data.typedArray() ); } else { @@ -6681,7 +6678,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { } else { - _gl.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + _gl.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data.typedArray() ); } @@ -6698,7 +6695,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { for ( var i = 0, il = mipmaps.length; i < il; i ++ ) { mipmap = mipmaps[ i ]; - _gl.texImage2D( _gl.TEXTURE_2D, i, glFormat, glFormat, glType, mipmap ); + _gl.texImage2D( _gl.TEXTURE_2D, i, glFormat, glFormat, glType, mipmap.texImage() ); } @@ -6706,7 +6703,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { } else { - _gl.texImage2D( _gl.TEXTURE_2D, 0, glFormat, glFormat, glType, texture.image.texImage() ); + _gl.texImage2D( _gl.TEXTURE_2D, 0, glFormat, glFormat, glType, texture.image.texImage() ); } @@ -6750,7 +6747,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { var canvas = image.resize( canvasWith, canvasHeight ); - console.log( 'THREE.Canvas3DRenderer:', image, 'is too big (' + image.width + 'x' + image.height + '). Resized to ' + canvasWidth + 'x' + canvasHeight + '.' ); + console.log( 'THREE.Canvas3DRenderer:', image, 'is too big (' + image.width + 'x' + image.height + '). Resized to ' + canvasWidth + 'x' + canvasHeight + '.' ); return canvas; @@ -6930,6 +6927,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { renderTarget.addEventListener( 'dispose', onRenderTargetDispose ); renderTarget.__webglTexture = _gl.createTexture(); + renderTarget.__webglTexture.name = "WebGLRenderTarget_Texture"+_this.info.memory.textures; _this.info.memory.textures ++; @@ -6950,7 +6948,9 @@ THREE.Canvas3DRenderer = function ( parameters ) { for ( var i = 0; i < 6; i ++ ) { renderTarget.__webglFramebuffer[ i ] = _gl.createFramebuffer(); + renderTarget.__webglFramebuffer[ i ].name = "WebGLRenderTarget_Framebuffer"; renderTarget.__webglRenderbuffer[ i ] = _gl.createRenderbuffer(); + renderTarget.__webglRenderbuffer[ i ].name = "WebGLRenderTarget_Renderbuffer"; _gl.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null ); @@ -6964,6 +6964,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { } else { renderTarget.__webglFramebuffer = _gl.createFramebuffer(); + renderTarget.__webglFramebuffer.name = "WebGLRenderTarget_Framebuffer"; if ( renderTarget.shareDepthFrom ) { @@ -6972,6 +6973,7 @@ THREE.Canvas3DRenderer = function ( parameters ) { } else { renderTarget.__webglRenderbuffer = _gl.createRenderbuffer(); + renderTarget.__webglRenderbuffer.name = "WebGLRenderTarget_Renderbuffer"; } @@ -7330,7 +7332,7 @@ if ( Math.sign === undefined ) { // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.button -THREE.MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2 }; +THREE.MOUSE = { LEFT: Qt.LeftButton, MIDDLE: Qt.MiddleButton, RIGHT: Qt.RightButton }; // GL STATE CONSTANTS @@ -7761,7 +7763,7 @@ THREE.Color.prototype = { getStyle: function () { - return 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')'; + return 'rgb(' + ( Math.floor( this.r * 255 ) ) + ',' + ( Math.floor( this.g * 255 ) ) + ',' + ( Math.floor( this.b * 255 ) ) + ')'; }, @@ -13685,7 +13687,7 @@ THREE.Math = { } else { - if ( rnd <= 0x02 ) rnd = ~~(0x2000000 + ( Math.random() * 0x1000000 )); + if ( rnd <= 0x02 ) rnd = 0x2000000 + ( Math.random() * 0x1000000 ) | 0; r = rnd & 0xf; rnd = rnd >> 4; uuid[ i ] = chars[ ( i == 19 ) ? ( r & 0x3 ) | 0x8 : r ]; @@ -13760,7 +13762,13 @@ THREE.Math = { randInt: function ( low, high ) { - return low + Math.floor( Math.random() * ( high - low + 1 ) ); + var rValue = Math.random() * ( high - low + 1 ); + if (rValue > 0) + rValue = Math.floor(rValue); + else + rValue = Math.ceil(rValue); + + return low + rValue; }, @@ -14208,9 +14216,7 @@ THREE.Clock.prototype = { start: function () { - this.startTime = self.performance !== undefined && self.performance.now !== undefined - ? self.performance.now() - : Date.now(); + this.startTime = Date.now(); this.oldTime = this.startTime; this.running = true; @@ -14242,9 +14248,7 @@ THREE.Clock.prototype = { if ( this.running ) { - var newTime = self.performance !== undefined && self.performance.now !== undefined - ? self.performance.now() - : Date.now(); + var newTime = Date.now(); diff = 0.001 * ( newTime - this.oldTime ); this.oldTime = newTime; @@ -18436,8 +18440,9 @@ THREE.Loader.prototype = { } function rgb2hex( rgb ) { - - return ( rgb[ 0 ] * 255 << 16 ) + ( rgb[ 1 ] * 255 << 8 ) + rgb[ 2 ] * 255; + return ( ( Math.floor(rgb[ 0 ] * 255) << 16 ) + + ( Math.floor(rgb[ 1 ] * 255) << 8 ) + + Math.floor(rgb[ 2 ] * 255) ); } @@ -18905,7 +18910,7 @@ THREE.JSONLoader.prototype.load = function ( url, callback, texturePath ) { // todo: unify load API to for easier SceneLoader use - texturePath = ( texturePath !== undefined ) && ( typeof texturePath === 'string' ) ? texturePath : ""; + texturePath = texturePath && ( typeof texturePath === 'string' ) ? texturePath : this.extractUrlBase( url ); this.onLoadStart(); this.loadAjaxJSON( this, url, callback, texturePath ); @@ -25182,6 +25187,7 @@ THREE.WebGLProgram = ( function () { // var program = _gl.createProgram(); + program.name = "Program_"+material.type; var prefix_vertex, prefix_fragment; @@ -25764,6 +25770,7 @@ THREE.LensFlarePlugin = function ( renderer, flares ) { } program = createProgram( shader ); + program.name = "ShaderProgram_LensFlarePlugin"; attributes = { vertex: gl.getAttribLocation ( program, "position" ), @@ -26551,6 +26558,7 @@ THREE.SpritePlugin = function ( renderer, sprites ) { gl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW ); program = createProgram(); + program.name = "ShaderProgram_SpritePlugin"; attributes = { position: gl.getAttribLocation ( program, 'position' ), @@ -26930,7 +26938,7 @@ THREE.ImageUtils = { loadTexture: function ( url, mapping, onLoad, onError ) { var loader = new THREE.ImageLoader(); - //loader.crossOrigin = this.crossOrigin; + loader.crossOrigin = this.crossOrigin; var texture = new THREE.Texture( undefined, mapping ); @@ -27037,7 +27045,7 @@ THREE.ImageUtils = { var width = image.width; var height = image.height; - + // TODO: Make this work in Qt Quick var canvas = document.createElement( 'canvas' ); canvas.width = width; canvas.height = height; @@ -27098,10 +27106,11 @@ THREE.ImageUtils = { var idx = ( y * width + x ) * 4; - output[ idx ] = ~~( ( ( normal[ 0 ] + 1.0 ) / 2.0 * 255 ) ); - output[ idx + 1 ] = ~~( ( ( normal[ 1 ] + 1.0 ) / 2.0 * 255 ) ); - output[ idx + 2 ] = ~~( ( normal[ 2 ] * 255 ) ); - output[ idx + 3 ] = 255; + // TODO: This might not work on QtQuick + output[ idx ] = ( ( normal[ 0 ] + 1.0 ) / 2.0 * 255 ) | 0; + output[ idx + 1 ] = ( ( normal[ 1 ] + 1.0 ) / 2.0 * 255 ) | 0; + output[ idx + 2 ] = ( normal[ 2 ] * 255 ) | 0; + output[ idx + 3 ] = 255; } @@ -27254,7 +27263,7 @@ THREE.FontUtils = { // RenderText - var i, p, + var i, p, face = this.getFace(), scale = this.size / face.resolution, offset = 0, @@ -27492,7 +27501,7 @@ THREE.FontUtils.process = function ( contour, indices ) { var u, v, w; - if ( area( contour ) > 0.0 ) { + if ( THREE.FontUtils.area( contour ) > 0.0 ) { for ( v = 0; v < n; v ++ ) verts[ v ] = v; @@ -27532,7 +27541,7 @@ THREE.FontUtils.process = function ( contour, indices ) { v = u + 1; if ( nv <= v ) v = 0; /* new v */ w = v + 1; if ( nv <= w ) w = 0; /* next */ - if ( snip( contour, u, v, w, nv, verts ) ) { + if ( THREE.FontUtils.snip( contour, u, v, w, nv, verts ) ) { var a, b, c, s, t; @@ -27652,8 +27661,8 @@ THREE.FontUtils.Triangulate.area = THREE.FontUtils.area; //} )( THREE.FontUtils ); // To use the typeface.js face files, hook up the API -//self._typeface_js = { faces: THREE.FontUtils.faces, loadFace: THREE.FontUtils.loadFace }; -//THREE.typeface_js = self._typeface_js; +var _typeface_js = { faces: THREE.FontUtils.faces, loadFace: THREE.FontUtils.loadFace }; +THREE.typeface_js = _typeface_js; // File:src/extras/audio/Audio.js @@ -28468,7 +28477,7 @@ THREE.Gyroscope = function () { THREE.Gyroscope.prototype = Object.create( THREE.Object3D.prototype ); -THREE.Gyroscope.prototype.updateMatrixWorld = ( function () { +THREE.Gyroscope.prototype.updateMatrixWorld = function () { var translationObject = new THREE.Vector3(); var quaternionObject = new THREE.Quaternion(); @@ -28480,7 +28489,7 @@ THREE.Gyroscope.prototype.updateMatrixWorld = ( function () { return function ( force ) { - this.matrixAutoUpdate && this.updateMatrix(); + if (this.matrixAutoUpdate) this.updateMatrix(); // update matrixWorld @@ -28519,7 +28528,7 @@ THREE.Gyroscope.prototype.updateMatrixWorld = ( function () { }; -}() ); +}(); // File:src/extras/core/Path.js diff --git a/src/plugins.qmltypes b/src/plugins.qmltypes index df2d2eb..55ca670 100644 --- a/src/plugins.qmltypes +++ b/src/plugins.qmltypes @@ -17,6 +17,7 @@ Module { Property { name: "logAllCalls"; type: "bool" } Property { name: "logAllErrors"; type: "bool" } Property { name: "devicePixelRatio"; type: "float"; isReadonly: true } + Property { name: "fps"; type: "uint"; isReadonly: true } Signal { name: "needRender" } Signal { name: "devicePixelRatioChanged" @@ -38,6 +39,10 @@ Module { name: "contextChanged" Parameter { name: "context"; type: "CanvasContext"; isPointer: true } } + Signal { + name: "fpsChanged" + Parameter { name: "fps"; type: "uint" } + } Signal { name: "initGL" } Signal { name: "renderGL" } Signal { @@ -1325,19 +1330,19 @@ Module { Parameter { name: "name"; type: "string" } } Method { name: "isContextLost"; type: "bool" } - Method { name: "getContextAttributes"; type: "CanvasContextAttributes*" } + Method { name: "getContextAttributes"; type: "QJSValue" } Method { name: "getShaderPrecisionFormat" - type: "CanvasShaderPrecisionFormat*" + type: "QJSValue" Parameter { name: "shadertype"; type: "glEnums" } Parameter { name: "precisiontype"; type: "glEnums" } } Method { name: "flush" } Method { name: "finish" } - Method { name: "createTexture"; type: "CanvasTexture*" } + Method { name: "createTexture"; type: "QJSValue" } Method { name: "deleteTexture" - Parameter { name: "texture"; type: "CanvasTexture"; isPointer: true } + Parameter { name: "texture"; type: "QJSValue" } } Method { name: "activeTexture" @@ -1346,7 +1351,7 @@ Module { Method { name: "bindTexture" Parameter { name: "target"; type: "glEnums" } - Parameter { name: "texture"; type: "CanvasTexture"; isPointer: true } + Parameter { name: "texture"; type: "QJSValue" } } Method { name: "generateMipmap" @@ -1355,7 +1360,7 @@ Module { Method { name: "isTexture" type: "bool" - Parameter { name: "texture"; type: "QObject"; isPointer: true } + Parameter { name: "anyObject"; type: "QJSValue" } } Method { name: "compressedTexImage2D" @@ -1365,7 +1370,7 @@ Module { Parameter { name: "width"; type: "int" } Parameter { name: "height"; type: "int" } Parameter { name: "border"; type: "int" } - Parameter { name: "pixels"; type: "CanvasTypedArray"; isPointer: true } + Parameter { name: "pixels"; type: "QJSValue" } } Method { name: "compressedTexSubImage2D" @@ -1376,7 +1381,7 @@ Module { Parameter { name: "width"; type: "int" } Parameter { name: "height"; type: "int" } Parameter { name: "format"; type: "glEnums" } - Parameter { name: "pixels"; type: "CanvasTypedArray"; isPointer: true } + Parameter { name: "pixels"; type: "QJSValue" } } Method { name: "copyTexImage2D" @@ -1410,7 +1415,7 @@ Module { Parameter { name: "border"; type: "int" } Parameter { name: "format"; type: "glEnums" } Parameter { name: "type"; type: "glEnums" } - Parameter { name: "pixels"; type: "CanvasTypedArray"; isPointer: true } + Parameter { name: "pixels"; type: "QJSValue" } } Method { name: "texSubImage2D" @@ -1422,7 +1427,7 @@ Module { Parameter { name: "height"; type: "int" } Parameter { name: "format"; type: "glEnums" } Parameter { name: "type"; type: "glEnums" } - Parameter { name: "pixels"; type: "CanvasTypedArray"; isPointer: true } + Parameter { name: "pixels"; type: "QJSValue" } } Method { name: "texImage2D" @@ -1431,7 +1436,7 @@ Module { Parameter { name: "internalformat"; type: "glEnums" } Parameter { name: "format"; type: "glEnums" } Parameter { name: "type"; type: "glEnums" } - Parameter { name: "image"; type: "CanvasTextureImage"; isPointer: true } + Parameter { name: "image"; type: "QJSValue" } } Method { name: "texSubImage2D" @@ -1441,7 +1446,7 @@ Module { Parameter { name: "yoffset"; type: "int" } Parameter { name: "format"; type: "glEnums" } Parameter { name: "type"; type: "glEnums" } - Parameter { name: "image"; type: "CanvasTextureImage"; isPointer: true } + Parameter { name: "image"; type: "QJSValue" } } Method { name: "texParameterf" @@ -1455,11 +1460,15 @@ Module { Parameter { name: "pname"; type: "glEnums" } Parameter { name: "param"; type: "int" } } - Method { name: "createFramebuffer"; type: "CanvasFrameBuffer*" } + Method { name: "createFramebuffer"; type: "QJSValue" } + Method { + name: "deleteFramebuffer" + Parameter { name: "buffer"; type: "QJSValue" } + } Method { name: "bindFramebuffer" Parameter { name: "target"; type: "glEnums" } - Parameter { name: "framebuffer"; type: "CanvasFrameBuffer"; isPointer: true } + Parameter { name: "framebuffer"; type: "QJSValue" } } Method { name: "checkFramebufferStatus" @@ -1471,30 +1480,26 @@ Module { Parameter { name: "target"; type: "glEnums" } Parameter { name: "attachment"; type: "glEnums" } Parameter { name: "renderbuffertarget"; type: "glEnums" } - Parameter { name: "renderbuffer"; type: "CanvasRenderBuffer"; isPointer: true } + Parameter { name: "renderbuffer"; type: "QJSValue" } } Method { name: "framebufferTexture2D" Parameter { name: "target"; type: "glEnums" } Parameter { name: "attachment"; type: "glEnums" } Parameter { name: "textarget"; type: "glEnums" } - Parameter { name: "texture"; type: "CanvasTexture"; isPointer: true } + Parameter { name: "texture"; type: "QJSValue" } Parameter { name: "level"; type: "int" } } Method { name: "isFramebuffer" type: "bool" - Parameter { name: "anyObject"; type: "QObject"; isPointer: true } - } - Method { - name: "deleteFramebuffer" - Parameter { name: "buffer"; type: "CanvasFrameBuffer"; isPointer: true } + Parameter { name: "anyObject"; type: "QJSValue" } } - Method { name: "createRenderbuffer"; type: "CanvasRenderBuffer*" } + Method { name: "createRenderbuffer"; type: "QJSValue" } Method { name: "bindRenderbuffer" Parameter { name: "target"; type: "glEnums" } - Parameter { name: "renderbuffer"; type: "CanvasRenderBuffer"; isPointer: true } + Parameter { name: "renderbuffer"; type: "QJSValue" } } Method { name: "renderbufferStorage" @@ -1506,11 +1511,11 @@ Module { Method { name: "isRenderbuffer" type: "bool" - Parameter { name: "anyObject"; type: "QObject"; isPointer: true } + Parameter { name: "anyObject"; type: "QJSValue" } } Method { name: "deleteRenderbuffer" - Parameter { name: "renderbuffer"; type: "CanvasRenderBuffer"; isPointer: true } + Parameter { name: "renderbuffer"; type: "QJSValue" } } Method { name: "sampleCoverage" @@ -1732,22 +1737,12 @@ Module { Parameter { name: "indx"; type: "uint" } Parameter { name: "x"; type: "float" } } - Method { - name: "vertexAttrib1fv" - Parameter { name: "indx"; type: "uint" } - Parameter { name: "values"; type: "CanvasFloat32Array"; isPointer: true } - } Method { name: "vertexAttrib2f" Parameter { name: "indx"; type: "uint" } Parameter { name: "x"; type: "float" } Parameter { name: "y"; type: "float" } } - Method { - name: "vertexAttrib2fv" - Parameter { name: "indx"; type: "uint" } - Parameter { name: "values"; type: "CanvasFloat32Array"; isPointer: true } - } Method { name: "vertexAttrib3f" Parameter { name: "indx"; type: "uint" } @@ -1755,11 +1750,6 @@ Module { Parameter { name: "y"; type: "float" } Parameter { name: "z"; type: "float" } } - Method { - name: "vertexAttrib3fv" - Parameter { name: "indx"; type: "uint" } - Parameter { name: "values"; type: "CanvasFloat32Array"; isPointer: true } - } Method { name: "vertexAttrib4f" Parameter { name: "indx"; type: "uint" } @@ -1768,10 +1758,25 @@ Module { Parameter { name: "z"; type: "float" } Parameter { name: "w"; type: "float" } } + Method { + name: "vertexAttrib1fv" + Parameter { name: "indx"; type: "uint" } + Parameter { name: "array"; type: "QJSValue" } + } + Method { + name: "vertexAttrib2fv" + Parameter { name: "indx"; type: "uint" } + Parameter { name: "array"; type: "QJSValue" } + } + Method { + name: "vertexAttrib3fv" + Parameter { name: "indx"; type: "uint" } + Parameter { name: "array"; type: "QJSValue" } + } Method { name: "vertexAttrib4fv" Parameter { name: "indx"; type: "uint" } - Parameter { name: "values"; type: "CanvasFloat32Array"; isPointer: true } + Parameter { name: "array"; type: "QJSValue" } } Method { name: "getShaderParameter" @@ -1805,26 +1810,14 @@ Module { Method { name: "bufferData" Parameter { name: "target"; type: "glEnums" } - Parameter { name: "data"; type: "CanvasTypedArray"; isPointer: true } + Parameter { name: "data"; type: "QJSValue" } Parameter { name: "hint"; type: "glEnums" } } - Method { - name: "bufferData" - Parameter { name: "target"; type: "glEnums" } - Parameter { name: "data"; type: "CanvasArrayBuffer&" } - Parameter { name: "hint"; type: "glEnums" } - } - Method { - name: "bufferSubData" - Parameter { name: "target"; type: "glEnums" } - Parameter { name: "offset"; type: "int" } - Parameter { name: "data"; type: "CanvasTypedArray"; isPointer: true } - } Method { name: "bufferSubData" Parameter { name: "target"; type: "glEnums" } Parameter { name: "offset"; type: "int" } - Parameter { name: "data"; type: "CanvasArrayBuffer&" } + Parameter { name: "data"; type: "QJSValue" } } Method { name: "getBufferParameter" @@ -1989,7 +1982,7 @@ Module { Parameter { name: "height"; type: "long" } Parameter { name: "format"; type: "glEnums" } Parameter { name: "type"; type: "glEnums" } - Parameter { name: "pixels"; type: "CanvasArrayBufferView"; isPointer: true } + Parameter { name: "pixels"; type: "QJSValue" } } Method { name: "getActiveAttrib" @@ -2043,26 +2036,6 @@ Module { Parameter { name: "zfail"; type: "glEnums" } Parameter { name: "zpass"; type: "glEnums" } } - Method { - name: "vertexAttrib1fva" - Parameter { name: "indx"; type: "uint" } - Parameter { name: "values"; type: "QVariantList" } - } - Method { - name: "vertexAttrib2fva" - Parameter { name: "indx"; type: "uint" } - Parameter { name: "values"; type: "QVariantList" } - } - Method { - name: "vertexAttrib3fva" - Parameter { name: "indx"; type: "uint" } - Parameter { name: "values"; type: "QVariantList" } - } - Method { - name: "vertexAttrib4fva" - Parameter { name: "indx"; type: "uint" } - Parameter { name: "values"; type: "QVariantList" } - } Method { name: "getFramebufferAttachmentParameter" type: "int" @@ -2086,7 +2059,7 @@ Module { name: "getUniform" type: "QVariant" Parameter { name: "program"; type: "QJSValue" } - Parameter { name: "location"; type: "CanvasUniformLocation"; isPointer: true } + Parameter { name: "location"; type: "QJSValue" } } Method { name: "getVertexAttribOffset" @@ -2305,11 +2278,6 @@ Module { exports: ["QtCanvas3D/Program3D 1.0"] isCreatable: false exportMetaObjectRevisions: [0] - Property { name: "id"; type: "int"; isReadonly: true } - Signal { - name: "idChanged" - Parameter { name: "id"; type: "int" } - } } Component { name: "QtCanvas3D::CanvasRenderBuffer" -- GitLab