Browse Source

Texture3d support - style fix

artur.trzesiok 7 years ago
parent
commit
1b4a538b4c

+ 8 - 6
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 () {
 

+ 9 - 8
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,

+ 31 - 21
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;

+ 11 - 9
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

+ 1 - 1
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;