Initial commit
This commit is contained in:
119
node_modules/three/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js
generated
vendored
Normal file
119
node_modules/three/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js
generated
vendored
Normal file
@@ -0,0 +1,119 @@
|
||||
class WebGLAttributeUtils {
|
||||
|
||||
constructor( backend ) {
|
||||
|
||||
this.backend = backend;
|
||||
|
||||
}
|
||||
|
||||
createAttribute( attribute, bufferType ) {
|
||||
|
||||
const backend = this.backend;
|
||||
const { gl } = backend;
|
||||
|
||||
const array = attribute.array;
|
||||
const usage = attribute.usage || gl.STATIC_DRAW;
|
||||
|
||||
const bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute;
|
||||
const bufferData = backend.get( bufferAttribute );
|
||||
|
||||
let bufferGPU = bufferData.bufferGPU;
|
||||
|
||||
if ( bufferGPU === undefined ) {
|
||||
|
||||
bufferGPU = gl.createBuffer();
|
||||
|
||||
gl.bindBuffer( bufferType, bufferGPU );
|
||||
gl.bufferData( bufferType, array, usage );
|
||||
gl.bindBuffer( bufferType, null );
|
||||
|
||||
bufferData.bufferGPU = bufferGPU;
|
||||
bufferData.bufferType = bufferType;
|
||||
bufferData.version = bufferAttribute.version;
|
||||
|
||||
}
|
||||
|
||||
//attribute.onUploadCallback();
|
||||
|
||||
let type;
|
||||
let isFloat = false;
|
||||
|
||||
if ( array instanceof Float32Array ) {
|
||||
|
||||
type = gl.FLOAT;
|
||||
isFloat = true;
|
||||
|
||||
} else if ( array instanceof Uint16Array ) {
|
||||
|
||||
if ( attribute.isFloat16BufferAttribute ) {
|
||||
|
||||
type = gl.HALF_FLOAT;
|
||||
isFloat = true;
|
||||
|
||||
} else {
|
||||
|
||||
type = gl.UNSIGNED_SHORT;
|
||||
|
||||
}
|
||||
|
||||
} else if ( array instanceof Int16Array ) {
|
||||
|
||||
type = gl.SHORT;
|
||||
|
||||
} else if ( array instanceof Uint32Array ) {
|
||||
|
||||
type = gl.UNSIGNED_INT;
|
||||
|
||||
} else if ( array instanceof Int32Array ) {
|
||||
|
||||
type = gl.INT;
|
||||
|
||||
} else if ( array instanceof Int8Array ) {
|
||||
|
||||
type = gl.BYTE;
|
||||
|
||||
} else if ( array instanceof Uint8Array ) {
|
||||
|
||||
type = gl.UNSIGNED_BYTE;
|
||||
|
||||
} else if ( array instanceof Uint8ClampedArray ) {
|
||||
|
||||
type = gl.UNSIGNED_BYTE;
|
||||
|
||||
} else {
|
||||
|
||||
throw new Error( 'THREE.WebGLBackend: Unsupported buffer data format: ' + array );
|
||||
|
||||
}
|
||||
|
||||
backend.set( attribute, {
|
||||
bufferGPU,
|
||||
type,
|
||||
bytesPerElement: array.BYTES_PER_ELEMENT,
|
||||
version: attribute.version,
|
||||
isFloat
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
updateAttribute( attribute ) {
|
||||
|
||||
const backend = this.backend;
|
||||
const { gl } = backend;
|
||||
|
||||
const array = attribute.array;
|
||||
const bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute;
|
||||
const bufferData = backend.get( bufferAttribute );
|
||||
const bufferType = bufferData.bufferType;
|
||||
|
||||
gl.bindBuffer( bufferType, bufferData.bufferGPU );
|
||||
gl.bufferSubData( bufferType, 0, array );
|
||||
gl.bindBuffer( bufferType, null );
|
||||
|
||||
bufferData.version = bufferAttribute.version;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default WebGLAttributeUtils;
|
||||
26
node_modules/three/examples/jsm/renderers/webgl/utils/WebGLExtensions.js
generated
vendored
Normal file
26
node_modules/three/examples/jsm/renderers/webgl/utils/WebGLExtensions.js
generated
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
class WebGLExtensions {
|
||||
|
||||
constructor( backend ) {
|
||||
|
||||
this.backend = backend;
|
||||
|
||||
this.gl = this.backend.gl;
|
||||
this.availableExtensions = this.gl.getSupportedExtensions();
|
||||
|
||||
}
|
||||
|
||||
get( name ) {
|
||||
|
||||
return this.gl.getExtension( name );
|
||||
|
||||
}
|
||||
|
||||
has( name ) {
|
||||
|
||||
return this.availableExtensions.includes( name );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default WebGLExtensions;
|
||||
541
node_modules/three/examples/jsm/renderers/webgl/utils/WebGLState.js
generated
vendored
Normal file
541
node_modules/three/examples/jsm/renderers/webgl/utils/WebGLState.js
generated
vendored
Normal file
@@ -0,0 +1,541 @@
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
export default WebGLState;
|
||||
212
node_modules/three/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js
generated
vendored
Normal file
212
node_modules/three/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js
generated
vendored
Normal file
@@ -0,0 +1,212 @@
|
||||
import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBAFormat, DepthFormat, DepthStencilFormat, UnsignedShortType, UnsignedIntType, UnsignedInt248Type, FloatType, HalfFloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, UnsignedByteType, _SRGBAFormat, NoColorSpace, LinearSRGBColorSpace, SRGBColorSpace, NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare } from 'three';
|
||||
|
||||
let initialized = false, wrappingToGL, filterToGL, compareToGL;
|
||||
|
||||
class WebGLTextureUtils {
|
||||
|
||||
constructor( backend ) {
|
||||
|
||||
this.backend = backend;
|
||||
|
||||
this.gl = backend.gl;
|
||||
this.extensions = backend.extensions;
|
||||
|
||||
if ( initialized === false ) {
|
||||
|
||||
this._init( this.gl );
|
||||
|
||||
initialized = true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_init( gl ) {
|
||||
|
||||
// Store only WebGL constants here.
|
||||
|
||||
wrappingToGL = {
|
||||
[ RepeatWrapping ]: gl.REPEAT,
|
||||
[ ClampToEdgeWrapping ]: gl.CLAMP_TO_EDGE,
|
||||
[ MirroredRepeatWrapping ]: gl.MIRRORED_REPEAT
|
||||
};
|
||||
|
||||
filterToGL = {
|
||||
[ NearestFilter ]: gl.NEAREST,
|
||||
[ NearestMipmapNearestFilter ]: gl.NEAREST_MIPMAP_NEAREST,
|
||||
[ NearestMipmapLinearFilter ]: gl.NEAREST_MIPMAP_LINEAR,
|
||||
|
||||
[ LinearFilter ]: gl.LINEAR,
|
||||
[ LinearMipmapNearestFilter ]: gl.LINEAR_MIPMAP_NEAREST,
|
||||
[ LinearMipmapLinearFilter ]: gl.LINEAR_MIPMAP_LINEAR
|
||||
};
|
||||
|
||||
compareToGL = {
|
||||
[ NeverCompare ]: gl.NEVER,
|
||||
[ AlwaysCompare ]: gl.ALWAYS,
|
||||
[ LessCompare ]: gl.LESS,
|
||||
[ LessEqualCompare ]: gl.LEQUAL,
|
||||
[ EqualCompare ]: gl.EQUAL,
|
||||
[ GreaterEqualCompare ]: gl.GEQUAL,
|
||||
[ GreaterCompare ]: gl.GREATER,
|
||||
[ NotEqualCompare ]: gl.NOTEQUAL
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
filterFallback( f ) {
|
||||
|
||||
const { gl } = this;
|
||||
|
||||
if ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) {
|
||||
|
||||
return gl.NEAREST;
|
||||
|
||||
}
|
||||
|
||||
return gl.LINEAR;
|
||||
|
||||
}
|
||||
|
||||
getGLTextureType( texture ) {
|
||||
|
||||
const { gl } = this;
|
||||
|
||||
let glTextureType;
|
||||
|
||||
if ( texture.isCubeTexture === true ) {
|
||||
|
||||
glTextureType = gl.TEXTURE_CUBE_MAP;
|
||||
|
||||
} else {
|
||||
|
||||
glTextureType = gl.TEXTURE_2D;
|
||||
|
||||
|
||||
}
|
||||
|
||||
return glTextureType;
|
||||
|
||||
}
|
||||
|
||||
getInternalFormat( internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false ) {
|
||||
|
||||
const { gl, extensions } = this;
|
||||
|
||||
if ( internalFormatName !== null ) {
|
||||
|
||||
if ( gl[ internalFormatName ] !== undefined ) return gl[ internalFormatName ];
|
||||
|
||||
console.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \'' + internalFormatName + '\'' );
|
||||
|
||||
}
|
||||
|
||||
let internalFormat = glFormat;
|
||||
|
||||
if ( glFormat === gl.RED ) {
|
||||
|
||||
if ( glType === gl.FLOAT ) internalFormat = gl.R32F;
|
||||
if ( glType === gl.HALF_FLOAT ) internalFormat = gl.R16F;
|
||||
if ( glType === gl.UNSIGNED_BYTE ) internalFormat = gl.R8;
|
||||
|
||||
}
|
||||
|
||||
if ( glFormat === gl.RED_INTEGER ) {
|
||||
|
||||
if ( glType === gl.UNSIGNED_BYTE ) internalFormat = gl.R8UI;
|
||||
if ( glType === gl.UNSIGNED_SHORT ) internalFormat = gl.R16UI;
|
||||
if ( glType === gl.UNSIGNED_INT ) internalFormat = gl.R32UI;
|
||||
if ( glType === gl.BYTE ) internalFormat = gl.R8I;
|
||||
if ( glType === gl.SHORT ) internalFormat = gl.R16I;
|
||||
if ( glType === gl.INT ) internalFormat = gl.R32I;
|
||||
|
||||
}
|
||||
|
||||
if ( glFormat === gl.RG ) {
|
||||
|
||||
if ( glType === gl.FLOAT ) internalFormat = gl.RG32F;
|
||||
if ( glType === gl.HALF_FLOAT ) internalFormat = gl.RG16F;
|
||||
if ( glType === gl.UNSIGNED_BYTE ) internalFormat = gl.RG8;
|
||||
|
||||
}
|
||||
|
||||
if ( glFormat === gl.RGBA ) {
|
||||
|
||||
if ( glType === gl.FLOAT ) internalFormat = gl.RGBA32F;
|
||||
if ( glType === gl.HALF_FLOAT ) internalFormat = gl.RGBA16F;
|
||||
if ( glType === gl.UNSIGNED_BYTE ) internalFormat = ( colorSpace === SRGBColorSpace && forceLinearTransfer === false ) ? gl.SRGB8_ALPHA8 : gl.RGBA8;
|
||||
if ( glType === gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = gl.RGBA4;
|
||||
if ( glType === gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = gl.RGB5_A1;
|
||||
|
||||
}
|
||||
|
||||
if ( glFormat === gl.DEPTH_COMPONENT ) {
|
||||
|
||||
if ( glType === gl.UNSIGNED_INT ) internalFormat = gl.DEPTH_COMPONENT24;
|
||||
if ( glType === gl.FLOAT ) internalFormat = gl.DEPTH_COMPONENT32F;
|
||||
|
||||
}
|
||||
|
||||
if ( glFormat === gl.DEPTH_STENCIL ) {
|
||||
|
||||
if ( glType === gl.UNSIGNED_INT_24_8 ) internalFormat = gl.DEPTH24_STENCIL8;
|
||||
|
||||
}
|
||||
|
||||
if ( internalFormat === gl.R16F || internalFormat === gl.R32F ||
|
||||
internalFormat === gl.RG16F || internalFormat === gl.RG32F ||
|
||||
internalFormat === gl.RGBA16F || internalFormat === gl.RGBA32F ) {
|
||||
|
||||
extensions.get( 'EXT_color_buffer_float' );
|
||||
|
||||
}
|
||||
|
||||
return internalFormat;
|
||||
|
||||
}
|
||||
|
||||
setTextureParameters( textureType, texture ) {
|
||||
|
||||
const { gl, extensions } = this;
|
||||
|
||||
gl.texParameteri( textureType, gl.TEXTURE_WRAP_S, wrappingToGL[ texture.wrapS ] );
|
||||
gl.texParameteri( textureType, gl.TEXTURE_WRAP_T, wrappingToGL[ texture.wrapT ] );
|
||||
|
||||
if ( textureType === gl.TEXTURE_3D || textureType === gl.TEXTURE_2D_ARRAY ) {
|
||||
|
||||
gl.texParameteri( textureType, gl.TEXTURE_WRAP_R, wrappingToGL[ texture.wrapR ] );
|
||||
|
||||
}
|
||||
|
||||
gl.texParameteri( textureType, gl.TEXTURE_MAG_FILTER, filterToGL[ texture.magFilter ] );
|
||||
gl.texParameteri( textureType, gl.TEXTURE_MIN_FILTER, filterToGL[ texture.minFilter ] );
|
||||
|
||||
if ( texture.compareFunction ) {
|
||||
|
||||
gl.texParameteri( textureType, gl.TEXTURE_COMPARE_MODE, gl.COMPARE_REF_TO_TEXTURE );
|
||||
gl.texParameteri( textureType, gl.TEXTURE_COMPARE_FUNC, compareToGL[ texture.compareFunction ] );
|
||||
|
||||
}
|
||||
|
||||
if ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {
|
||||
|
||||
//extension = extensions.get( 'EXT_texture_filter_anisotropic' );
|
||||
|
||||
if ( texture.magFilter === NearestFilter ) return;
|
||||
if ( texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter ) return;
|
||||
if ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension for WebGL 1 and WebGL 2
|
||||
|
||||
if ( texture.anisotropy > 1 /*|| properties.get( texture ).__currentAnisotropy*/ ) {
|
||||
|
||||
//gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );
|
||||
//properties.get( texture ).__currentAnisotropy = texture.anisotropy;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default WebGLTextureUtils;
|
||||
242
node_modules/three/examples/jsm/renderers/webgl/utils/WebGLUtils.js
generated
vendored
Normal file
242
node_modules/three/examples/jsm/renderers/webgl/utils/WebGLUtils.js
generated
vendored
Normal file
@@ -0,0 +1,242 @@
|
||||
import { RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, RGB_S3TC_DXT1_Format, DepthFormat, DepthStencilFormat, LuminanceAlphaFormat, LuminanceFormat, RedFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, _SRGBAFormat, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, SRGBColorSpace, NoColorSpace } from 'three';
|
||||
|
||||
class WebGLUtils {
|
||||
|
||||
constructor( backend ) {
|
||||
|
||||
this.backend = backend;
|
||||
|
||||
this.gl = this.backend.gl;
|
||||
this.extensions = backend.extensions;
|
||||
|
||||
}
|
||||
|
||||
convert( p, colorSpace = NoColorSpace ) {
|
||||
|
||||
const { gl, extensions } = this;
|
||||
|
||||
let extension;
|
||||
|
||||
if ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;
|
||||
if ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;
|
||||
if ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;
|
||||
|
||||
if ( p === ByteType ) return gl.BYTE;
|
||||
if ( p === ShortType ) return gl.SHORT;
|
||||
if ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;
|
||||
if ( p === IntType ) return gl.INT;
|
||||
if ( p === UnsignedIntType ) return gl.UNSIGNED_INT;
|
||||
if ( p === FloatType ) return gl.FLOAT;
|
||||
|
||||
if ( p === HalfFloatType ) {
|
||||
|
||||
return gl.HALF_FLOAT;
|
||||
|
||||
}
|
||||
|
||||
if ( p === AlphaFormat ) return gl.ALPHA;
|
||||
if ( p === RGBAFormat ) return gl.RGBA;
|
||||
if ( p === LuminanceFormat ) return gl.LUMINANCE;
|
||||
if ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA;
|
||||
if ( p === DepthFormat ) return gl.DEPTH_COMPONENT;
|
||||
if ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;
|
||||
|
||||
// WebGL2 formats.
|
||||
|
||||
if ( p === RedFormat ) return gl.RED;
|
||||
if ( p === RedIntegerFormat ) return gl.RED_INTEGER;
|
||||
if ( p === RGFormat ) return gl.RG;
|
||||
if ( p === RGIntegerFormat ) return gl.RG_INTEGER;
|
||||
if ( p === RGBAIntegerFormat ) return gl.RGBA_INTEGER;
|
||||
|
||||
// S3TC
|
||||
|
||||
if ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {
|
||||
|
||||
if ( colorSpace === SRGBColorSpace ) {
|
||||
|
||||
extension = extensions.get( 'WEBGL_compressed_texture_s3tc_srgb' );
|
||||
|
||||
if ( extension !== null ) {
|
||||
|
||||
if ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT;
|
||||
if ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;
|
||||
if ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;
|
||||
if ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;
|
||||
|
||||
} else {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
extension = extensions.get( 'WEBGL_compressed_texture_s3tc' );
|
||||
|
||||
if ( extension !== null ) {
|
||||
|
||||
if ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;
|
||||
if ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;
|
||||
if ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;
|
||||
if ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;
|
||||
|
||||
} else {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// PVRTC
|
||||
|
||||
if ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {
|
||||
|
||||
extension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );
|
||||
|
||||
if ( extension !== null ) {
|
||||
|
||||
if ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;
|
||||
if ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;
|
||||
if ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;
|
||||
if ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;
|
||||
|
||||
} else {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// ETC1
|
||||
|
||||
if ( p === RGB_ETC1_Format ) {
|
||||
|
||||
extension = extensions.get( 'WEBGL_compressed_texture_etc1' );
|
||||
|
||||
if ( extension !== null ) {
|
||||
|
||||
return extension.COMPRESSED_RGB_ETC1_WEBGL;
|
||||
|
||||
} else {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// ETC2
|
||||
|
||||
if ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {
|
||||
|
||||
extension = extensions.get( 'WEBGL_compressed_texture_etc' );
|
||||
|
||||
if ( extension !== null ) {
|
||||
|
||||
if ( p === RGB_ETC2_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;
|
||||
if ( p === RGBA_ETC2_EAC_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;
|
||||
|
||||
} else {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// ASTC
|
||||
|
||||
if ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||
|
||||
p === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||
|
||||
p === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||
|
||||
p === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||
|
||||
p === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {
|
||||
|
||||
extension = extensions.get( 'WEBGL_compressed_texture_astc' );
|
||||
|
||||
if ( extension !== null ) {
|
||||
|
||||
if ( p === RGBA_ASTC_4x4_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR;
|
||||
if ( p === RGBA_ASTC_5x4_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR;
|
||||
if ( p === RGBA_ASTC_5x5_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR;
|
||||
if ( p === RGBA_ASTC_6x5_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR;
|
||||
if ( p === RGBA_ASTC_6x6_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR;
|
||||
if ( p === RGBA_ASTC_8x5_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR;
|
||||
if ( p === RGBA_ASTC_8x6_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR;
|
||||
if ( p === RGBA_ASTC_8x8_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR;
|
||||
if ( p === RGBA_ASTC_10x5_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR;
|
||||
if ( p === RGBA_ASTC_10x6_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR;
|
||||
if ( p === RGBA_ASTC_10x8_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR;
|
||||
if ( p === RGBA_ASTC_10x10_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR;
|
||||
if ( p === RGBA_ASTC_12x10_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR;
|
||||
if ( p === RGBA_ASTC_12x12_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR;
|
||||
|
||||
} else {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// BPTC
|
||||
|
||||
if ( p === RGBA_BPTC_Format ) {
|
||||
|
||||
extension = extensions.get( 'EXT_texture_compression_bptc' );
|
||||
|
||||
if ( extension !== null ) {
|
||||
|
||||
if ( p === RGBA_BPTC_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT;
|
||||
|
||||
} else {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// RGTC
|
||||
|
||||
if ( p === RED_RGTC1_Format || p === SIGNED_RED_RGTC1_Format || p === RED_GREEN_RGTC2_Format || p === SIGNED_RED_GREEN_RGTC2_Format ) {
|
||||
|
||||
extension = extensions.get( 'EXT_texture_compression_rgtc' );
|
||||
|
||||
if ( extension !== null ) {
|
||||
|
||||
if ( p === RGBA_BPTC_Format ) return extension.COMPRESSED_RED_RGTC1_EXT;
|
||||
if ( p === SIGNED_RED_RGTC1_Format ) return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT;
|
||||
if ( p === RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_RED_GREEN_RGTC2_EXT;
|
||||
if ( p === SIGNED_RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;
|
||||
|
||||
} else {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
if ( p === UnsignedInt248Type ) {
|
||||
|
||||
return gl.UNSIGNED_INT_24_8;
|
||||
|
||||
}
|
||||
|
||||
// if "p" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats)
|
||||
|
||||
return ( gl[ p ] !== undefined ) ? gl[ p ] : null;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default WebGLUtils;
|
||||
Reference in New Issue
Block a user