添加关照、全局等高线、修改图层问题
This commit is contained in:
738
static/sdk/three/jsm/renderers/webgl/utils/WebGLState.js
Normal file
738
static/sdk/three/jsm/renderers/webgl/utils/WebGLState.js
Normal file
@ -0,0 +1,738 @@
|
||||
import {
|
||||
CullFaceNone, CullFaceBack, CullFaceFront, DoubleSide, BackSide,
|
||||
NormalBlending, NoBlending, CustomBlending, AddEquation,
|
||||
AdditiveBlending, SubtractiveBlending, MultiplyBlending, SubtractEquation, ReverseSubtractEquation,
|
||||
ZeroFactor, OneFactor, SrcColorFactor, SrcAlphaFactor, SrcAlphaSaturateFactor, DstColorFactor, DstAlphaFactor,
|
||||
OneMinusSrcColorFactor, OneMinusSrcAlphaFactor, OneMinusDstColorFactor, OneMinusDstAlphaFactor,
|
||||
NeverDepth, AlwaysDepth, LessDepth, LessEqualDepth, EqualDepth, GreaterEqualDepth, GreaterDepth, NotEqualDepth
|
||||
} from 'three';
|
||||
|
||||
let initialized = false, equationToGL, factorToGL;
|
||||
|
||||
class WebGLState {
|
||||
|
||||
constructor( backend ) {
|
||||
|
||||
this.backend = backend;
|
||||
|
||||
this.gl = this.backend.gl;
|
||||
|
||||
this.enabled = {};
|
||||
this.currentFlipSided = null;
|
||||
this.currentCullFace = null;
|
||||
this.currentProgram = null;
|
||||
this.currentBlendingEnabled = false;
|
||||
this.currentBlending = null;
|
||||
this.currentBlendSrc = null;
|
||||
this.currentBlendDst = null;
|
||||
this.currentBlendSrcAlpha = null;
|
||||
this.currentBlendDstAlpha = null;
|
||||
this.currentPremultipledAlpha = null;
|
||||
this.currentPolygonOffsetFactor = null;
|
||||
this.currentPolygonOffsetUnits = null;
|
||||
this.currentColorMask = null;
|
||||
this.currentDepthFunc = null;
|
||||
this.currentDepthMask = null;
|
||||
this.currentStencilFunc = null;
|
||||
this.currentStencilRef = null;
|
||||
this.currentStencilFuncMask = null;
|
||||
this.currentStencilFail = null;
|
||||
this.currentStencilZFail = null;
|
||||
this.currentStencilZPass = null;
|
||||
this.currentStencilMask = null;
|
||||
this.currentLineWidth = null;
|
||||
|
||||
this.currentBoundFramebuffers = {};
|
||||
this.currentDrawbuffers = new WeakMap();
|
||||
|
||||
this.maxTextures = this.gl.getParameter( this.gl.MAX_TEXTURE_IMAGE_UNITS );
|
||||
this.currentTextureSlot = null;
|
||||
this.currentBoundTextures = {};
|
||||
|
||||
if ( initialized === false ) {
|
||||
|
||||
this._init( this.gl );
|
||||
|
||||
initialized = true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_init( gl ) {
|
||||
|
||||
// Store only WebGL constants here.
|
||||
|
||||
equationToGL = {
|
||||
[ AddEquation ]: gl.FUNC_ADD,
|
||||
[ SubtractEquation ]: gl.FUNC_SUBTRACT,
|
||||
[ ReverseSubtractEquation ]: gl.FUNC_REVERSE_SUBTRACT
|
||||
};
|
||||
|
||||
factorToGL = {
|
||||
[ ZeroFactor ]: gl.ZERO,
|
||||
[ OneFactor ]: gl.ONE,
|
||||
[ SrcColorFactor ]: gl.SRC_COLOR,
|
||||
[ SrcAlphaFactor ]: gl.SRC_ALPHA,
|
||||
[ SrcAlphaSaturateFactor ]: gl.SRC_ALPHA_SATURATE,
|
||||
[ DstColorFactor ]: gl.DST_COLOR,
|
||||
[ DstAlphaFactor ]: gl.DST_ALPHA,
|
||||
[ OneMinusSrcColorFactor ]: gl.ONE_MINUS_SRC_COLOR,
|
||||
[ OneMinusSrcAlphaFactor ]: gl.ONE_MINUS_SRC_ALPHA,
|
||||
[ OneMinusDstColorFactor ]: gl.ONE_MINUS_DST_COLOR,
|
||||
[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
enable( id ) {
|
||||
|
||||
const { enabled } = this;
|
||||
|
||||
if ( enabled[ id ] !== true ) {
|
||||
|
||||
this.gl.enable( id );
|
||||
enabled[ id ] = true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
disable( id ) {
|
||||
|
||||
const { enabled } = this;
|
||||
|
||||
if ( enabled[ id ] !== false ) {
|
||||
|
||||
this.gl.disable( id );
|
||||
enabled[ id ] = false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
setFlipSided( flipSided ) {
|
||||
|
||||
if ( this.currentFlipSided !== flipSided ) {
|
||||
|
||||
const { gl } = this;
|
||||
|
||||
if ( flipSided ) {
|
||||
|
||||
gl.frontFace( gl.CW );
|
||||
|
||||
} else {
|
||||
|
||||
gl.frontFace( gl.CCW );
|
||||
|
||||
}
|
||||
|
||||
this.currentFlipSided = flipSided;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
setCullFace( cullFace ) {
|
||||
|
||||
const { gl } = this;
|
||||
|
||||
if ( cullFace !== CullFaceNone ) {
|
||||
|
||||
this.enable( gl.CULL_FACE );
|
||||
|
||||
if ( cullFace !== this.currentCullFace ) {
|
||||
|
||||
if ( cullFace === CullFaceBack ) {
|
||||
|
||||
gl.cullFace( gl.BACK );
|
||||
|
||||
} else if ( cullFace === CullFaceFront ) {
|
||||
|
||||
gl.cullFace( gl.FRONT );
|
||||
|
||||
} else {
|
||||
|
||||
gl.cullFace( gl.FRONT_AND_BACK );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
this.disable( gl.CULL_FACE );
|
||||
|
||||
}
|
||||
|
||||
this.currentCullFace = cullFace;
|
||||
|
||||
}
|
||||
|
||||
setLineWidth( width ) {
|
||||
|
||||
const { currentLineWidth, gl } = this;
|
||||
|
||||
if ( width !== currentLineWidth ) {
|
||||
|
||||
gl.lineWidth( width );
|
||||
|
||||
this.currentLineWidth = width;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {
|
||||
|
||||
const { gl } = this;
|
||||
|
||||
if ( blending === NoBlending ) {
|
||||
|
||||
if ( this.currentBlendingEnabled === true ) {
|
||||
|
||||
this.disable( gl.BLEND );
|
||||
this.currentBlendingEnabled = false;
|
||||
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
if ( this.currentBlendingEnabled === false ) {
|
||||
|
||||
this.enable( gl.BLEND );
|
||||
this.currentBlendingEnabled = true;
|
||||
|
||||
}
|
||||
|
||||
if ( blending !== CustomBlending ) {
|
||||
|
||||
if ( blending !== this.currentBlending || premultipliedAlpha !== this.currentPremultipledAlpha ) {
|
||||
|
||||
if ( this.currentBlendEquation !== AddEquation || this.currentBlendEquationAlpha !== AddEquation ) {
|
||||
|
||||
gl.blendEquation( gl.FUNC_ADD );
|
||||
|
||||
this.currentBlendEquation = AddEquation;
|
||||
this.currentBlendEquationAlpha = AddEquation;
|
||||
|
||||
}
|
||||
|
||||
if ( premultipliedAlpha ) {
|
||||
|
||||
switch ( blending ) {
|
||||
|
||||
case NormalBlending:
|
||||
gl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );
|
||||
break;
|
||||
|
||||
case AdditiveBlending:
|
||||
gl.blendFunc( gl.ONE, gl.ONE );
|
||||
break;
|
||||
|
||||
case SubtractiveBlending:
|
||||
gl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );
|
||||
break;
|
||||
|
||||
case MultiplyBlending:
|
||||
gl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );
|
||||
break;
|
||||
|
||||
default:
|
||||
console.error( 'THREE.WebGLState: Invalid blending: ', blending );
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
switch ( blending ) {
|
||||
|
||||
case NormalBlending:
|
||||
gl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );
|
||||
break;
|
||||
|
||||
case AdditiveBlending:
|
||||
gl.blendFunc( gl.SRC_ALPHA, gl.ONE );
|
||||
break;
|
||||
|
||||
case SubtractiveBlending:
|
||||
gl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );
|
||||
break;
|
||||
|
||||
case MultiplyBlending:
|
||||
gl.blendFunc( gl.ZERO, gl.SRC_COLOR );
|
||||
break;
|
||||
|
||||
default:
|
||||
console.error( 'THREE.WebGLState: Invalid blending: ', blending );
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
this.currentBlendSrc = null;
|
||||
this.currentBlendDst = null;
|
||||
this.currentBlendSrcAlpha = null;
|
||||
this.currentBlendDstAlpha = null;
|
||||
|
||||
this.currentBlending = blending;
|
||||
this.currentPremultipledAlpha = premultipliedAlpha;
|
||||
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
// custom blending
|
||||
|
||||
blendEquationAlpha = blendEquationAlpha || blendEquation;
|
||||
blendSrcAlpha = blendSrcAlpha || blendSrc;
|
||||
blendDstAlpha = blendDstAlpha || blendDst;
|
||||
|
||||
if ( blendEquation !== this.currentBlendEquation || blendEquationAlpha !== this.currentBlendEquationAlpha ) {
|
||||
|
||||
gl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );
|
||||
|
||||
this.currentBlendEquation = blendEquation;
|
||||
this.currentBlendEquationAlpha = blendEquationAlpha;
|
||||
|
||||
}
|
||||
|
||||
if ( blendSrc !== this.currentBlendSrc || blendDst !== this.currentBlendDst || blendSrcAlpha !== this.currentBlendSrcAlpha || blendDstAlpha !== this.currentBlendDstAlpha ) {
|
||||
|
||||
gl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );
|
||||
|
||||
this.currentBlendSrc = blendSrc;
|
||||
this.currentBlendDst = blendDst;
|
||||
this.currentBlendSrcAlpha = blendSrcAlpha;
|
||||
this.currentBlendDstAlpha = blendDstAlpha;
|
||||
|
||||
}
|
||||
|
||||
this.currentBlending = blending;
|
||||
this.currentPremultipledAlpha = false;
|
||||
|
||||
}
|
||||
|
||||
setColorMask( colorMask ) {
|
||||
|
||||
if ( this.currentColorMask !== colorMask ) {
|
||||
|
||||
this.gl.colorMask( colorMask, colorMask, colorMask, colorMask );
|
||||
this.currentColorMask = colorMask;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
setDepthTest( depthTest ) {
|
||||
|
||||
const { gl } = this;
|
||||
|
||||
if ( depthTest ) {
|
||||
|
||||
this.enable( gl.DEPTH_TEST );
|
||||
|
||||
} else {
|
||||
|
||||
this.disable( gl.DEPTH_TEST );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
setDepthMask( depthMask ) {
|
||||
|
||||
if ( this.currentDepthMask !== depthMask ) {
|
||||
|
||||
this.gl.depthMask( depthMask );
|
||||
this.currentDepthMask = depthMask;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
setDepthFunc( depthFunc ) {
|
||||
|
||||
if ( this.currentDepthFunc !== depthFunc ) {
|
||||
|
||||
const { gl } = this;
|
||||
|
||||
switch ( depthFunc ) {
|
||||
|
||||
case NeverDepth:
|
||||
|
||||
gl.depthFunc( gl.NEVER );
|
||||
break;
|
||||
|
||||
case AlwaysDepth:
|
||||
|
||||
gl.depthFunc( gl.ALWAYS );
|
||||
break;
|
||||
|
||||
case LessDepth:
|
||||
|
||||
gl.depthFunc( gl.LESS );
|
||||
break;
|
||||
|
||||
case LessEqualDepth:
|
||||
|
||||
gl.depthFunc( gl.LEQUAL );
|
||||
break;
|
||||
|
||||
case EqualDepth:
|
||||
|
||||
gl.depthFunc( gl.EQUAL );
|
||||
break;
|
||||
|
||||
case GreaterEqualDepth:
|
||||
|
||||
gl.depthFunc( gl.GEQUAL );
|
||||
break;
|
||||
|
||||
case GreaterDepth:
|
||||
|
||||
gl.depthFunc( gl.GREATER );
|
||||
break;
|
||||
|
||||
case NotEqualDepth:
|
||||
|
||||
gl.depthFunc( gl.NOTEQUAL );
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
gl.depthFunc( gl.LEQUAL );
|
||||
|
||||
}
|
||||
|
||||
this.currentDepthFunc = depthFunc;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
setStencilTest( stencilTest ) {
|
||||
|
||||
const { gl } = this;
|
||||
|
||||
if ( stencilTest ) {
|
||||
|
||||
this.enable( gl.STENCIL_TEST );
|
||||
|
||||
} else {
|
||||
|
||||
this.disable( gl.STENCIL_TEST );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
setStencilMask( stencilMask ) {
|
||||
|
||||
if ( this.currentStencilMask !== stencilMask ) {
|
||||
|
||||
this.gl.stencilMask( stencilMask );
|
||||
this.currentStencilMask = stencilMask;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
setStencilFunc( stencilFunc, stencilRef, stencilMask ) {
|
||||
|
||||
if ( this.currentStencilFunc !== stencilFunc ||
|
||||
this.currentStencilRef !== stencilRef ||
|
||||
this.currentStencilFuncMask !== stencilMask ) {
|
||||
|
||||
this.gl.stencilFunc( stencilFunc, stencilRef, stencilMask );
|
||||
|
||||
this.currentStencilFunc = stencilFunc;
|
||||
this.currentStencilRef = stencilRef;
|
||||
this.currentStencilFuncMask = stencilMask;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
setStencilOp( stencilFail, stencilZFail, stencilZPass ) {
|
||||
|
||||
if ( this.currentStencilFail !== stencilFail ||
|
||||
this.currentStencilZFail !== stencilZFail ||
|
||||
this.currentStencilZPass !== stencilZPass ) {
|
||||
|
||||
this.gl.stencilOp( stencilFail, stencilZFail, stencilZPass );
|
||||
|
||||
this.currentStencilFail = stencilFail;
|
||||
this.currentStencilZFail = stencilZFail;
|
||||
this.currentStencilZPass = stencilZPass;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
setMaterial( material, frontFaceCW ) {
|
||||
|
||||
const { gl } = this;
|
||||
|
||||
material.side === DoubleSide
|
||||
? this.disable( gl.CULL_FACE )
|
||||
: this.enable( gl.CULL_FACE );
|
||||
|
||||
let flipSided = ( material.side === BackSide );
|
||||
if ( frontFaceCW ) flipSided = ! flipSided;
|
||||
|
||||
this.setFlipSided( flipSided );
|
||||
|
||||
( material.blending === NormalBlending && material.transparent === false )
|
||||
? this.setBlending( NoBlending )
|
||||
: this.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );
|
||||
|
||||
this.setDepthFunc( material.depthFunc );
|
||||
this.setDepthTest( material.depthTest );
|
||||
this.setDepthMask( material.depthWrite );
|
||||
this.setColorMask( material.colorWrite );
|
||||
|
||||
const stencilWrite = material.stencilWrite;
|
||||
this.setStencilTest( stencilWrite );
|
||||
if ( stencilWrite ) {
|
||||
|
||||
this.setStencilMask( material.stencilWriteMask );
|
||||
this.setStencilFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );
|
||||
this.setStencilOp( material.stencilFail, material.stencilZFail, material.stencilZPass );
|
||||
|
||||
}
|
||||
|
||||
this.setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );
|
||||
|
||||
material.alphaToCoverage === true
|
||||
? this.enable( gl.SAMPLE_ALPHA_TO_COVERAGE )
|
||||
: this.disable( gl.SAMPLE_ALPHA_TO_COVERAGE );
|
||||
|
||||
}
|
||||
|
||||
setPolygonOffset( polygonOffset, factor, units ) {
|
||||
|
||||
const { gl } = this;
|
||||
|
||||
if ( polygonOffset ) {
|
||||
|
||||
this.enable( gl.POLYGON_OFFSET_FILL );
|
||||
|
||||
if ( this.currentPolygonOffsetFactor !== factor || this.currentPolygonOffsetUnits !== units ) {
|
||||
|
||||
gl.polygonOffset( factor, units );
|
||||
|
||||
this.currentPolygonOffsetFactor = factor;
|
||||
this.currentPolygonOffsetUnits = units;
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
this.disable( gl.POLYGON_OFFSET_FILL );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
useProgram( program ) {
|
||||
|
||||
if ( this.currentProgram !== program ) {
|
||||
|
||||
this.gl.useProgram( program );
|
||||
|
||||
this.currentProgram = program;
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
// framebuffer
|
||||
|
||||
|
||||
bindFramebuffer( target, framebuffer ) {
|
||||
|
||||
const { gl, currentBoundFramebuffers } = this;
|
||||
|
||||
if ( currentBoundFramebuffers[ target ] !== framebuffer ) {
|
||||
|
||||
gl.bindFramebuffer( target, framebuffer );
|
||||
|
||||
currentBoundFramebuffers[ target ] = framebuffer;
|
||||
|
||||
// gl.DRAW_FRAMEBUFFER is equivalent to gl.FRAMEBUFFER
|
||||
|
||||
if ( target === gl.DRAW_FRAMEBUFFER ) {
|
||||
|
||||
currentBoundFramebuffers[ gl.FRAMEBUFFER ] = framebuffer;
|
||||
|
||||
}
|
||||
|
||||
if ( target === gl.FRAMEBUFFER ) {
|
||||
|
||||
currentBoundFramebuffers[ gl.DRAW_FRAMEBUFFER ] = framebuffer;
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
drawBuffers( renderContext, framebuffer ) {
|
||||
|
||||
const { gl } = this;
|
||||
|
||||
let drawBuffers = [];
|
||||
|
||||
let needsUpdate = false;
|
||||
|
||||
if ( renderContext.textures !== null ) {
|
||||
|
||||
drawBuffers = this.currentDrawbuffers.get( framebuffer );
|
||||
|
||||
if ( drawBuffers === undefined ) {
|
||||
|
||||
drawBuffers = [];
|
||||
this.currentDrawbuffers.set( framebuffer, drawBuffers );
|
||||
|
||||
}
|
||||
|
||||
|
||||
const textures = renderContext.textures;
|
||||
|
||||
if ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) {
|
||||
|
||||
for ( let i = 0, il = textures.length; i < il; i ++ ) {
|
||||
|
||||
drawBuffers[ i ] = gl.COLOR_ATTACHMENT0 + i;
|
||||
|
||||
}
|
||||
|
||||
drawBuffers.length = textures.length;
|
||||
|
||||
needsUpdate = true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
if ( drawBuffers[ 0 ] !== gl.BACK ) {
|
||||
|
||||
drawBuffers[ 0 ] = gl.BACK;
|
||||
|
||||
needsUpdate = true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ( needsUpdate ) {
|
||||
|
||||
gl.drawBuffers( drawBuffers );
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// texture
|
||||
|
||||
activeTexture( webglSlot ) {
|
||||
|
||||
const { gl, currentTextureSlot, maxTextures } = this;
|
||||
|
||||
if ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;
|
||||
|
||||
if ( currentTextureSlot !== webglSlot ) {
|
||||
|
||||
gl.activeTexture( webglSlot );
|
||||
this.currentTextureSlot = webglSlot;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bindTexture( webglType, webglTexture, webglSlot ) {
|
||||
|
||||
const { gl, currentTextureSlot, currentBoundTextures, maxTextures } = this;
|
||||
|
||||
if ( webglSlot === undefined ) {
|
||||
|
||||
if ( currentTextureSlot === null ) {
|
||||
|
||||
webglSlot = gl.TEXTURE0 + maxTextures - 1;
|
||||
|
||||
} else {
|
||||
|
||||
webglSlot = currentTextureSlot;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
let boundTexture = currentBoundTextures[ webglSlot ];
|
||||
|
||||
if ( boundTexture === undefined ) {
|
||||
|
||||
boundTexture = { type: undefined, texture: undefined };
|
||||
currentBoundTextures[ webglSlot ] = boundTexture;
|
||||
|
||||
}
|
||||
|
||||
if ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {
|
||||
|
||||
if ( currentTextureSlot !== webglSlot ) {
|
||||
|
||||
gl.activeTexture( webglSlot );
|
||||
this.currentTextureSlot = webglSlot;
|
||||
|
||||
}
|
||||
|
||||
gl.bindTexture( webglType, webglTexture );
|
||||
|
||||
boundTexture.type = webglType;
|
||||
boundTexture.texture = webglTexture;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
unbindTexture() {
|
||||
|
||||
const { gl, currentTextureSlot, currentBoundTextures } = this;
|
||||
|
||||
const boundTexture = currentBoundTextures[ currentTextureSlot ];
|
||||
|
||||
if ( boundTexture !== undefined && boundTexture.type !== undefined ) {
|
||||
|
||||
gl.bindTexture( boundTexture.type, null );
|
||||
|
||||
boundTexture.type = undefined;
|
||||
boundTexture.texture = undefined;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default WebGLState;
|
Reference in New Issue
Block a user