提交 1b4a538b 编写于 作者: A artur.trzesiok

Texture3d support - style fix

上级 80dcd17a
......@@ -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 () {
......
......@@ -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,
......
......@@ -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;
......
......@@ -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
......
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册