|
|
@@ -1261,14 +1261,6 @@ const RGBDepthPacking = 3202;
|
|
|
*/
|
|
|
const RGDepthPacking = 3203;
|
|
|
|
|
|
-/**
|
|
|
- * The depth value is not packed.
|
|
|
- *
|
|
|
- * @type {number}
|
|
|
- * @constant
|
|
|
- */
|
|
|
-const IdentityDepthPacking = 3204;
|
|
|
-
|
|
|
/**
|
|
|
* Normal information is relative to the underlying surface.
|
|
|
*
|
|
|
@@ -45364,7 +45356,7 @@ class Light extends Object3D {
|
|
|
*/
|
|
|
dispose() {
|
|
|
|
|
|
- // Empty here in base class; some subclasses override.
|
|
|
+ this.dispatchEvent( { type: 'dispose' } );
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -46010,6 +46002,8 @@ class SpotLight extends Light {
|
|
|
|
|
|
dispose() {
|
|
|
|
|
|
+ super.dispose();
|
|
|
+
|
|
|
this.shadow.dispose();
|
|
|
|
|
|
}
|
|
|
@@ -46222,6 +46216,8 @@ class PointLight extends Light {
|
|
|
|
|
|
dispose() {
|
|
|
|
|
|
+ super.dispose();
|
|
|
+
|
|
|
this.shadow.dispose();
|
|
|
|
|
|
}
|
|
|
@@ -46601,6 +46597,8 @@ class DirectionalLight extends Light {
|
|
|
|
|
|
dispose() {
|
|
|
|
|
|
+ super.dispose();
|
|
|
+
|
|
|
this.shadow.dispose();
|
|
|
|
|
|
}
|
|
|
@@ -59619,7 +59617,7 @@ const fragment$f = "uniform samplerCube tCube;\nuniform float tFlip;\nuniform fl
|
|
|
|
|
|
const vertex$e = "#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <batching_vertex>\n\t#include <skinbase_vertex>\n\t#include <morphinstance_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}";
|
|
|
|
|
|
-const fragment$e = "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include <clipping_planes_fragment>\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <logdepthbuf_fragment>\n\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\tfloat fragCoordZ = vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ];\n\t#else\n\t\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ] + 0.5;\n\t#endif\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#elif DEPTH_PACKING == 3202\n\t\tgl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\n\t#elif DEPTH_PACKING == 3203\n\t\tgl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\n\t#elif DEPTH_PACKING == 3204\n\t\tgl_FragColor = vec4( vec3( fragCoordZ ), 1.0 );\n\t#endif\n}";
|
|
|
+const fragment$e = "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include <clipping_planes_fragment>\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <logdepthbuf_fragment>\n\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\tfloat fragCoordZ = vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ];\n\t#else\n\t\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ] + 0.5;\n\t#endif\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#elif DEPTH_PACKING == 3202\n\t\tgl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\n\t#elif DEPTH_PACKING == 3203\n\t\tgl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\n\t#endif\n}";
|
|
|
|
|
|
const vertex$d = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <batching_vertex>\n\t#include <skinbase_vertex>\n\t#include <morphinstance_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}";
|
|
|
|
|
|
@@ -61466,9 +61464,8 @@ function WebGLCapabilities( gl, extensions, parameters, utils ) {
|
|
|
const maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );
|
|
|
const maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );
|
|
|
|
|
|
- const vertexTextures = maxVertexTextures > 0;
|
|
|
-
|
|
|
const maxSamples = gl.getParameter( gl.MAX_SAMPLES );
|
|
|
+ const samples = gl.getParameter( gl.SAMPLES );
|
|
|
|
|
|
return {
|
|
|
|
|
|
@@ -61494,9 +61491,9 @@ function WebGLCapabilities( gl, extensions, parameters, utils ) {
|
|
|
maxVaryings: maxVaryings,
|
|
|
maxFragmentUniforms: maxFragmentUniforms,
|
|
|
|
|
|
- vertexTextures: vertexTextures,
|
|
|
+ maxSamples: maxSamples,
|
|
|
|
|
|
- maxSamples: maxSamples
|
|
|
+ samples: samples
|
|
|
|
|
|
};
|
|
|
|
|
|
@@ -66105,7 +66102,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
const programs = [];
|
|
|
|
|
|
const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;
|
|
|
- const SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures;
|
|
|
|
|
|
let precision = capabilities.precision;
|
|
|
|
|
|
@@ -66289,7 +66285,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,
|
|
|
instancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null,
|
|
|
|
|
|
- supportsVertexTextures: SUPPORTS_VERTEX_TEXTURES,
|
|
|
outputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace ),
|
|
|
alphaToCoverage: !! material.alphaToCoverage,
|
|
|
|
|
|
@@ -66302,7 +66297,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
lightMap: HAS_LIGHTMAP,
|
|
|
bumpMap: HAS_BUMPMAP,
|
|
|
normalMap: HAS_NORMALMAP,
|
|
|
- displacementMap: SUPPORTS_VERTEX_TEXTURES && HAS_DISPLACEMENTMAP,
|
|
|
+ displacementMap: HAS_DISPLACEMENTMAP,
|
|
|
emissiveMap: HAS_EMISSIVEMAP,
|
|
|
|
|
|
normalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap,
|
|
|
@@ -66562,52 +66557,50 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
|
|
|
_programLayers.disableAll();
|
|
|
|
|
|
- if ( parameters.supportsVertexTextures )
|
|
|
- _programLayers.enable( 0 );
|
|
|
if ( parameters.instancing )
|
|
|
- _programLayers.enable( 1 );
|
|
|
+ _programLayers.enable( 0 );
|
|
|
if ( parameters.instancingColor )
|
|
|
- _programLayers.enable( 2 );
|
|
|
+ _programLayers.enable( 1 );
|
|
|
if ( parameters.instancingMorph )
|
|
|
- _programLayers.enable( 3 );
|
|
|
+ _programLayers.enable( 2 );
|
|
|
if ( parameters.matcap )
|
|
|
- _programLayers.enable( 4 );
|
|
|
+ _programLayers.enable( 3 );
|
|
|
if ( parameters.envMap )
|
|
|
- _programLayers.enable( 5 );
|
|
|
+ _programLayers.enable( 4 );
|
|
|
if ( parameters.normalMapObjectSpace )
|
|
|
- _programLayers.enable( 6 );
|
|
|
+ _programLayers.enable( 5 );
|
|
|
if ( parameters.normalMapTangentSpace )
|
|
|
- _programLayers.enable( 7 );
|
|
|
+ _programLayers.enable( 6 );
|
|
|
if ( parameters.clearcoat )
|
|
|
- _programLayers.enable( 8 );
|
|
|
+ _programLayers.enable( 7 );
|
|
|
if ( parameters.iridescence )
|
|
|
- _programLayers.enable( 9 );
|
|
|
+ _programLayers.enable( 8 );
|
|
|
if ( parameters.alphaTest )
|
|
|
- _programLayers.enable( 10 );
|
|
|
+ _programLayers.enable( 9 );
|
|
|
if ( parameters.vertexColors )
|
|
|
- _programLayers.enable( 11 );
|
|
|
+ _programLayers.enable( 10 );
|
|
|
if ( parameters.vertexAlphas )
|
|
|
- _programLayers.enable( 12 );
|
|
|
+ _programLayers.enable( 11 );
|
|
|
if ( parameters.vertexUv1s )
|
|
|
- _programLayers.enable( 13 );
|
|
|
+ _programLayers.enable( 12 );
|
|
|
if ( parameters.vertexUv2s )
|
|
|
- _programLayers.enable( 14 );
|
|
|
+ _programLayers.enable( 13 );
|
|
|
if ( parameters.vertexUv3s )
|
|
|
- _programLayers.enable( 15 );
|
|
|
+ _programLayers.enable( 14 );
|
|
|
if ( parameters.vertexTangents )
|
|
|
- _programLayers.enable( 16 );
|
|
|
+ _programLayers.enable( 15 );
|
|
|
if ( parameters.anisotropy )
|
|
|
- _programLayers.enable( 17 );
|
|
|
+ _programLayers.enable( 16 );
|
|
|
if ( parameters.alphaHash )
|
|
|
- _programLayers.enable( 18 );
|
|
|
+ _programLayers.enable( 17 );
|
|
|
if ( parameters.batching )
|
|
|
- _programLayers.enable( 19 );
|
|
|
+ _programLayers.enable( 18 );
|
|
|
if ( parameters.dispersion )
|
|
|
- _programLayers.enable( 20 );
|
|
|
+ _programLayers.enable( 19 );
|
|
|
if ( parameters.batchingColor )
|
|
|
- _programLayers.enable( 21 );
|
|
|
+ _programLayers.enable( 20 );
|
|
|
if ( parameters.gradientMap )
|
|
|
- _programLayers.enable( 22 );
|
|
|
+ _programLayers.enable( 21 );
|
|
|
|
|
|
array.push( _programLayers.mask );
|
|
|
_programLayers.disableAll();
|
|
|
@@ -67278,7 +67271,23 @@ function WebGLLights( extensions ) {
|
|
|
const intensity = light.intensity;
|
|
|
const distance = light.distance;
|
|
|
|
|
|
- const shadowMap = ( light.shadow && light.shadow.map ) ? ( light.shadow.map.depthTexture || light.shadow.map.texture ) : null;
|
|
|
+ let shadowMap = null;
|
|
|
+
|
|
|
+ if ( light.shadow && light.shadow.map ) {
|
|
|
+
|
|
|
+ if ( light.shadow.map.texture.format === RGFormat ) {
|
|
|
+
|
|
|
+ // VSM uses color texture with blurred mean/std_dev
|
|
|
+ shadowMap = light.shadow.map.texture;
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ // Other types use depth texture
|
|
|
+ shadowMap = light.shadow.map.depthTexture || light.shadow.map.texture;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
if ( light.isAmbientLight ) {
|
|
|
|
|
|
@@ -67713,7 +67722,7 @@ function WebGLRenderStates( extensions ) {
|
|
|
|
|
|
const vertex = "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}";
|
|
|
|
|
|
-const fragment = "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ).rg;\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ).r;\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = vec4( mean, std_dev, 0.0, 1.0 );\n}";
|
|
|
+const fragment = "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ).rg;\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ).r;\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( max( 0.0, squared_mean - mean * mean ) );\n\tgl_FragColor = vec4( mean, std_dev, 0.0, 1.0 );\n}";
|
|
|
|
|
|
function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
|
|
|
|
@@ -67725,7 +67734,6 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
|
_viewport = new Vector4(),
|
|
|
|
|
|
_depthMaterial = new MeshDepthMaterial(),
|
|
|
- _depthMaterialVSM = new MeshDepthMaterial( { depthPacking: IdentityDepthPacking } ),
|
|
|
_distanceMaterial = new MeshDistanceMaterial(),
|
|
|
|
|
|
_materialCache = {},
|
|
|
@@ -67914,6 +67922,14 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
|
} );
|
|
|
shadow.map.texture.name = light.name + '.shadowMap';
|
|
|
|
|
|
+ // Native depth texture for VSM - depth is captured here, then blurred into the color texture
|
|
|
+ shadow.map.depthTexture = new DepthTexture( _shadowMapSize.x, _shadowMapSize.y, FloatType );
|
|
|
+ shadow.map.depthTexture.name = light.name + '.shadowMapDepth';
|
|
|
+ shadow.map.depthTexture.format = DepthFormat;
|
|
|
+ shadow.map.depthTexture.compareFunction = null; // For regular sampling (not shadow comparison)
|
|
|
+ shadow.map.depthTexture.minFilter = NearestFilter;
|
|
|
+ shadow.map.depthTexture.magFilter = NearestFilter;
|
|
|
+
|
|
|
} else {
|
|
|
|
|
|
if ( light.isPointLight ) {
|
|
|
@@ -68038,9 +68054,9 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- // vertical pass
|
|
|
+ // vertical pass - read from native depth texture
|
|
|
|
|
|
- shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;
|
|
|
+ shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.depthTexture;
|
|
|
shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;
|
|
|
shadowMaterialVertical.uniforms.radius.value = shadow.radius;
|
|
|
renderer.setRenderTarget( shadow.mapPass );
|
|
|
@@ -68070,15 +68086,7 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- if ( type === VSMShadowMap ) {
|
|
|
-
|
|
|
- result = _depthMaterialVSM;
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- result = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial;
|
|
|
-
|
|
|
- }
|
|
|
+ result = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial;
|
|
|
|
|
|
if ( ( renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||
|
|
|
( material.displacementMap && material.displacementScale !== 0 ) ||
|
|
|
@@ -71144,7 +71152,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
}
|
|
|
|
|
|
// Setup storage for internal depth/stencil buffers and bind to correct framebuffer
|
|
|
- function setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {
|
|
|
+ function setupRenderBufferStorage( renderbuffer, renderTarget, useMultisample ) {
|
|
|
|
|
|
_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );
|
|
|
|
|
|
@@ -71157,15 +71165,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
const glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
|
|
|
|
// set up the attachment
|
|
|
- const samples = getRenderTargetSamples( renderTarget );
|
|
|
- const isUseMultisampledRTT = useMultisampledRTT( renderTarget );
|
|
|
- if ( isUseMultisampledRTT ) {
|
|
|
+ if ( useMultisampledRTT( renderTarget ) ) {
|
|
|
|
|
|
- multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
|
+ multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height );
|
|
|
|
|
|
- } else if ( isMultisample ) {
|
|
|
+ } else if ( useMultisample ) {
|
|
|
|
|
|
- _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
|
+ _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height );
|
|
|
|
|
|
} else {
|
|
|
|
|
|
@@ -71186,15 +71192,14 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
const glFormat = utils.convert( texture.format, texture.colorSpace );
|
|
|
const glType = utils.convert( texture.type );
|
|
|
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );
|
|
|
- const samples = getRenderTargetSamples( renderTarget );
|
|
|
|
|
|
- if ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {
|
|
|
+ if ( useMultisampledRTT( renderTarget ) ) {
|
|
|
|
|
|
- _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
|
+ multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height );
|
|
|
|
|
|
- } else if ( useMultisampledRTT( renderTarget ) ) {
|
|
|
+ } else if ( useMultisample ) {
|
|
|
|
|
|
- multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
|
+ _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height );
|
|
|
|
|
|
} else {
|
|
|
|
|
|
@@ -76263,7 +76268,7 @@ class WebGLRenderer {
|
|
|
generateMipmaps: true,
|
|
|
type: ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) ) ? HalfFloatType : UnsignedByteType,
|
|
|
minFilter: LinearMipmapLinearFilter,
|
|
|
- samples: 4,
|
|
|
+ samples: capabilities.samples,
|
|
|
stencilBuffer: stencil,
|
|
|
resolveDepthBuffer: false,
|
|
|
resolveStencilBuffer: false,
|
|
|
@@ -77976,7 +77981,6 @@ exports.HalfFloatType = HalfFloatType;
|
|
|
exports.HemisphereLight = HemisphereLight;
|
|
|
exports.HemisphereLightHelper = HemisphereLightHelper;
|
|
|
exports.IcosahedronGeometry = IcosahedronGeometry;
|
|
|
-exports.IdentityDepthPacking = IdentityDepthPacking;
|
|
|
exports.ImageBitmapLoader = ImageBitmapLoader;
|
|
|
exports.ImageLoader = ImageLoader;
|
|
|
exports.ImageUtils = ImageUtils;
|