From 1b4a538b4cd07c281ab7d87ac439dcd0c347d057 Mon Sep 17 00:00:00 2001 From: "artur.trzesiok" Date: Mon, 23 Jul 2018 16:31:27 +0200 Subject: [PATCH] Texture3d support - style fix --- src/renderers/WebGLRenderer.js | 14 ++++---- src/renderers/webgl/WebGLState.js | 17 ++++----- src/renderers/webgl/WebGLTextures.js | 52 +++++++++++++++++----------- src/renderers/webgl/WebGLUniforms.js | 20 ++++++----- src/renderers/webgl/WebGLUtils.js | 2 +- 5 files changed, 60 insertions(+), 45 deletions(-) diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 6a5a23b18c..7a2f1a7c57 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -2353,13 +2353,15 @@ function WebGLRenderer( parameters ) { }() ); - this.setTexture3D = ( function () { - // backwards compatibility: peel texture.texture - return function setTexture3D( texture, slot ) { - textures.setTexture3D( texture, slot ); + this.setTexture3D = ( function () { - }; - }() ); + // backwards compatibility: peel texture.texture + return function setTexture3D( texture, slot ) { + textures.setTexture3D( texture, slot ); + + }; + + }() ); this.setTexture = ( function () { diff --git a/src/renderers/webgl/WebGLState.js b/src/renderers/webgl/WebGLState.js index 53f1c1f5da..b6a0750357 100644 --- a/src/renderers/webgl/WebGLState.js +++ b/src/renderers/webgl/WebGLState.js @@ -844,19 +844,20 @@ function WebGLState( gl, extensions, utils ) { } - function texImage3D() { + function texImage3D() { - try { + try { + + gl.texImage3D.apply( gl, arguments ); - gl.texImage3D.apply( gl, arguments ); + } catch ( error ) { - } catch ( error ) { + console.error( 'THREE.WebGLState:', error ); - console.error( 'THREE.WebGLState:', error ); + } - } + } - } // function scissor( scissor ) { @@ -949,7 +950,7 @@ function WebGLState( gl, extensions, utils ) { bindTexture: bindTexture, compressedTexImage2D: compressedTexImage2D, texImage2D: texImage2D, - texImage3D: texImage3D, + texImage3D: texImage3D, scissor: scissor, viewport: viewport, diff --git a/src/renderers/webgl/WebGLTextures.js b/src/renderers/webgl/WebGLTextures.js index 358d686561..5ff6c4fe33 100644 --- a/src/renderers/webgl/WebGLTextures.js +++ b/src/renderers/webgl/WebGLTextures.js @@ -104,13 +104,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, if ( ! _gl.isWebGL2 ) return glFormat; - if ( glFormat === _gl.RED ) { + if ( glFormat === _gl.RED ) { - if ( glType === _gl.FLOAT ) return _gl.R32F; - if ( glType === _gl.HALF_FLOAT ) return _gl.R16F; - if ( glType === _gl.UNSIGNED_BYTE ) return _gl.R8; + if ( glType === _gl.FLOAT ) return _gl.R32F; + if ( glType === _gl.HALF_FLOAT ) return _gl.R16F; + if ( glType === _gl.UNSIGNED_BYTE ) return _gl.R8; - } + } if ( glFormat === _gl.RGB ) { @@ -281,21 +281,24 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, } - function setTexture3D( texture, slot ) { + function setTexture3D( texture, slot ) { - var textureProperties = properties.get( texture ); + var textureProperties = properties.get( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { - if ( texture.version > 0 && textureProperties.__version !== texture.version ) { uploadTexture( textureProperties, texture, slot ); return; - } - state.activeTexture( _gl.TEXTURE0 + slot ); - state.bindTexture( _gl.TEXTURE_3D, textureProperties.__webglTexture ); - } + } + + state.activeTexture( _gl.TEXTURE0 + slot ); + state.bindTexture( _gl.TEXTURE_3D, textureProperties.__webglTexture ); + + } - function setTextureCube( texture, slot ) { + function setTextureCube( texture, slot ) { var textureProperties = properties.get( texture ); @@ -483,12 +486,17 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, } function uploadTexture( textureProperties, texture, slot ) { + var textureType; - if(texture.isTexture3D) { - textureType = _gl.TEXTURE_3D; - } else { - textureType = _gl.TEXTURE_2D; + if ( texture.isTexture3D ) { + + textureType = _gl.TEXTURE_3D; + + } else { + + textureType = _gl.TEXTURE_2D; + } @@ -640,9 +648,11 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, textureProperties.__maxMipLevel = mipmaps.length - 1; - } else if ( texture.isTexture3D) { - state.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.length, 0, glFormat, glType, image.data ); - textureProperties.__maxMipLevel = 0; + } else if ( texture.isTexture3D ) { + + state.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.length, 0, glFormat, glType, image.data ); + textureProperties.__maxMipLevel = 0; + } else { // regular Texture (image, video, canvas) @@ -926,7 +936,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, } this.setTexture2D = setTexture2D; - this.setTexture3D = setTexture3D; + this.setTexture3D = setTexture3D; this.setTextureCube = setTextureCube; this.setTextureCubeDynamic = setTextureCubeDynamic; this.setupRenderTarget = setupRenderTarget; diff --git a/src/renderers/webgl/WebGLUniforms.js b/src/renderers/webgl/WebGLUniforms.js index 01ea2da9a4..ce5a6d912f 100644 --- a/src/renderers/webgl/WebGLUniforms.js +++ b/src/renderers/webgl/WebGLUniforms.js @@ -389,18 +389,20 @@ function setValueT1( gl, v, renderer ) { } -function setValueT3D1(gl, v, renderer) { - var cache = this.cache; - var unit = renderer.allocTextureUnit(); +function setValueT3D1( gl, v, renderer ) { - if ( cache[ 0 ] !== unit ) { + var cache = this.cache; + var unit = renderer.allocTextureUnit(); + + if ( cache[ 0 ] !== unit ) { - gl.uniform1i( this.addr, unit ); - cache[ 0 ] = unit; + gl.uniform1i( this.addr, unit ); + cache[ 0 ] = unit; + + } - } + renderer.setTexture3D( v || emptyTexture3d, unit ); - renderer.setTexture3D( v || emptyTexture3d, unit ); } function setValueT6( gl, v, renderer ) { @@ -473,7 +475,7 @@ function getSingularSetter( type ) { case 0x8b5c: return setValue4fm; // _MAT4 case 0x8b5e: case 0x8d66: return setValueT1; // SAMPLER_2D, SAMPLER_EXTERNAL_OES - case 0x8B5F: return setValueT3D1; // SAMPLER_3D + case 0x8B5F: return setValueT3D1; // SAMPLER_3D case 0x8b60: return setValueT6; // SAMPLER_CUBE case 0x1404: case 0x8b56: return setValue1i; // INT, BOOL diff --git a/src/renderers/webgl/WebGLUtils.js b/src/renderers/webgl/WebGLUtils.js index b8af16cd94..09d93505fb 100644 --- a/src/renderers/webgl/WebGLUtils.js +++ b/src/renderers/webgl/WebGLUtils.js @@ -51,7 +51,7 @@ function WebGLUtils( gl, extensions ) { if ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA; if ( p === DepthFormat ) return gl.DEPTH_COMPONENT; if ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL; - if ( p === RedFormat ) return gl.RED; + if ( p === RedFormat ) return gl.RED; if ( p === AddEquation ) return gl.FUNC_ADD; if ( p === SubtractEquation ) return gl.FUNC_SUBTRACT; -- GitLab