@plastic-software/three 0.179.0 → 0.180.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +166 -106
- package/build/three.core.js +112 -20
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +55 -89
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +30 -5
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2896 -1048
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2896 -1048
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +7 -7
- package/examples/jsm/controls/DragControls.js +6 -56
- package/examples/jsm/controls/FirstPersonControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +0 -8
- package/examples/jsm/exporters/GLTFExporter.js +30 -22
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +1 -1
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/GLTFLoader.js +9 -5
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +112 -32
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -1
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +2 -2
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +1 -1
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
- package/examples/jsm/transpiler/TSLEncoder.js +2 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +24 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +27 -4
- package/examples/jsm/tsl/display/BloomNode.js +3 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +439 -90
- package/examples/jsm/tsl/display/GTAONode.js +8 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +47 -35
- package/examples/jsm/tsl/display/OutlineNode.js +2 -2
- package/examples/jsm/tsl/display/SSRNode.js +180 -65
- package/examples/jsm/tsl/display/TRAANode.js +1 -1
- package/examples/jsm/tsl/display/boxBlur.js +64 -0
- package/examples/jsm/tsl/display/hashBlur.js +15 -18
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/package.json +1 -1
- package/src/Three.Core.js +1 -0
- package/src/Three.TSL.js +29 -4
- package/src/animation/AnimationClip.js +17 -2
- package/src/constants.js +11 -3
- package/src/core/BufferGeometry.js +2 -2
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/lib/earcut.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/materials/Material.js +12 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +1 -1
- package/src/math/ColorManagement.js +7 -1
- package/src/nodes/Nodes.js +3 -0
- package/src/nodes/TSL.js +3 -0
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +133 -7
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +2 -2
- package/src/nodes/accessors/InstanceNode.js +3 -1
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/Texture3DNode.js +13 -0
- package/src/nodes/accessors/TextureNode.js +71 -19
- package/src/nodes/code/FunctionCallNode.js +19 -0
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/AssignNode.js +4 -3
- package/src/nodes/core/ContextNode.js +24 -0
- package/src/nodes/core/Node.js +16 -20
- package/src/nodes/core/NodeBuilder.js +48 -14
- package/src/nodes/core/NodeFrame.js +1 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +1 -2
- package/src/nodes/core/StackNode.js +29 -4
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformNode.js +16 -9
- package/src/nodes/core/VarNode.js +0 -21
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/PassNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +42 -13
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +42 -12
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +430 -0
- package/src/nodes/lighting/LightsNode.js +1 -1
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +18 -2
- package/src/nodes/math/MathNode.js +3 -15
- package/src/nodes/math/OperatorNode.js +4 -3
- package/src/nodes/tsl/TSLCore.js +432 -152
- package/src/nodes/utils/JoinNode.js +3 -1
- package/src/nodes/utils/MemberNode.js +58 -7
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +51 -7
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/objects/BatchedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Sprite.js +2 -2
- package/src/renderers/WebGLRenderer.js +0 -9
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +19 -1
- package/src/renderers/common/Bindings.js +2 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderObject.js +14 -2
- package/src/renderers/common/Renderer.js +39 -19
- package/src/renderers/common/SampledTexture.js +1 -1
- package/src/renderers/common/Sampler.js +25 -13
- package/src/renderers/common/Textures.js +34 -12
- package/src/renderers/common/TimestampQueryPool.js +3 -3
- package/src/renderers/common/XRManager.js +35 -19
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +5 -5
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -15
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
- package/src/renderers/webgl/WebGLProgram.js +4 -4
- package/src/renderers/webgl/WebGLShadowMap.js +1 -1
- package/src/renderers/webgl/WebGLTextures.js +1 -0
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +186 -135
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +110 -17
- package/src/renderers/webgl-fallback/utils/WebGLState.js +1 -1
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +52 -3
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +35 -31
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +124 -34
- package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +9 -18
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +114 -25
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +3 -3
- package/src/renderers/webxr/WebXRManager.js +39 -24
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/Source.js +1 -1
- package/src/textures/VideoTexture.js +0 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
|
@@ -1,484 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DataTextureLoader,
|
|
3
|
-
DataUtils,
|
|
4
|
-
FloatType,
|
|
5
|
-
HalfFloatType,
|
|
6
|
-
LinearFilter,
|
|
7
|
-
LinearSRGBColorSpace
|
|
8
|
-
} from 'three';
|
|
1
|
+
import { HDRLoader } from './HDRLoader.js';
|
|
9
2
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
* ```js
|
|
14
|
-
* const loader = new RGBELoader();
|
|
15
|
-
* const envMap = await loader.loadAsync( 'textures/equirectangular/blouberg_sunrise_2_1k.hdr' );
|
|
16
|
-
* envMap.mapping = THREE.EquirectangularReflectionMapping;
|
|
17
|
-
*
|
|
18
|
-
* scene.environment = envMap;
|
|
19
|
-
* ```
|
|
20
|
-
*
|
|
21
|
-
* @augments DataTextureLoader
|
|
22
|
-
* @three_import import { RGBELoader } from 'three/addons/loaders/RGBELoader.js';
|
|
23
|
-
*/
|
|
24
|
-
class RGBELoader extends DataTextureLoader {
|
|
3
|
+
// @deprecated, r180
|
|
4
|
+
|
|
5
|
+
class RGBELoader extends HDRLoader {
|
|
25
6
|
|
|
26
|
-
/**
|
|
27
|
-
* Constructs a new RGBE loader.
|
|
28
|
-
*
|
|
29
|
-
* @param {LoadingManager} [manager] - The loading manager.
|
|
30
|
-
*/
|
|
31
7
|
constructor( manager ) {
|
|
32
8
|
|
|
9
|
+
console.warn( 'RGBELoader has been deprecated. Please use HDRLoader instead.' );
|
|
33
10
|
super( manager );
|
|
34
11
|
|
|
35
|
-
/**
|
|
36
|
-
* The texture type.
|
|
37
|
-
*
|
|
38
|
-
* @type {(HalfFloatType|FloatType)}
|
|
39
|
-
* @default HalfFloatType
|
|
40
|
-
*/
|
|
41
|
-
this.type = HalfFloatType;
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Parses the given RGBE texture data.
|
|
47
|
-
*
|
|
48
|
-
* @param {ArrayBuffer} buffer - The raw texture data.
|
|
49
|
-
* @return {DataTextureLoader~TexData} An object representing the parsed texture data.
|
|
50
|
-
*/
|
|
51
|
-
parse( buffer ) {
|
|
52
|
-
|
|
53
|
-
// adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
/* default error routine. change this to change error handling */
|
|
57
|
-
rgbe_read_error = 1,
|
|
58
|
-
rgbe_write_error = 2,
|
|
59
|
-
rgbe_format_error = 3,
|
|
60
|
-
rgbe_memory_error = 4,
|
|
61
|
-
rgbe_error = function ( rgbe_error_code, msg ) {
|
|
62
|
-
|
|
63
|
-
switch ( rgbe_error_code ) {
|
|
64
|
-
|
|
65
|
-
case rgbe_read_error: throw new Error( 'THREE.RGBELoader: Read Error: ' + ( msg || '' ) );
|
|
66
|
-
case rgbe_write_error: throw new Error( 'THREE.RGBELoader: Write Error: ' + ( msg || '' ) );
|
|
67
|
-
case rgbe_format_error: throw new Error( 'THREE.RGBELoader: Bad File Format: ' + ( msg || '' ) );
|
|
68
|
-
default:
|
|
69
|
-
case rgbe_memory_error: throw new Error( 'THREE.RGBELoader: Memory Error: ' + ( msg || '' ) );
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
},
|
|
74
|
-
|
|
75
|
-
/* offsets to red, green, and blue components in a data (float) pixel */
|
|
76
|
-
//RGBE_DATA_RED = 0,
|
|
77
|
-
//RGBE_DATA_GREEN = 1,
|
|
78
|
-
//RGBE_DATA_BLUE = 2,
|
|
79
|
-
|
|
80
|
-
/* number of floats per pixel, use 4 since stored in rgba image format */
|
|
81
|
-
//RGBE_DATA_SIZE = 4,
|
|
82
|
-
|
|
83
|
-
/* flags indicating which fields in an rgbe_header_info are valid */
|
|
84
|
-
RGBE_VALID_PROGRAMTYPE = 1,
|
|
85
|
-
RGBE_VALID_FORMAT = 2,
|
|
86
|
-
RGBE_VALID_DIMENSIONS = 4,
|
|
87
|
-
|
|
88
|
-
NEWLINE = '\n',
|
|
89
|
-
|
|
90
|
-
fgets = function ( buffer, lineLimit, consume ) {
|
|
91
|
-
|
|
92
|
-
const chunkSize = 128;
|
|
93
|
-
|
|
94
|
-
lineLimit = ! lineLimit ? 1024 : lineLimit;
|
|
95
|
-
let p = buffer.pos,
|
|
96
|
-
i = - 1, len = 0, s = '',
|
|
97
|
-
chunk = String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) );
|
|
98
|
-
|
|
99
|
-
while ( ( 0 > ( i = chunk.indexOf( NEWLINE ) ) ) && ( len < lineLimit ) && ( p < buffer.byteLength ) ) {
|
|
100
|
-
|
|
101
|
-
s += chunk; len += chunk.length;
|
|
102
|
-
p += chunkSize;
|
|
103
|
-
chunk += String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) );
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
if ( - 1 < i ) {
|
|
108
|
-
|
|
109
|
-
/*for (i=l-1; i>=0; i--) {
|
|
110
|
-
byteCode = m.charCodeAt(i);
|
|
111
|
-
if (byteCode > 0x7f && byteCode <= 0x7ff) byteLen++;
|
|
112
|
-
else if (byteCode > 0x7ff && byteCode <= 0xffff) byteLen += 2;
|
|
113
|
-
if (byteCode >= 0xDC00 && byteCode <= 0xDFFF) i--; //trail surrogate
|
|
114
|
-
}*/
|
|
115
|
-
if ( false !== consume ) buffer.pos += len + i + 1;
|
|
116
|
-
return s + chunk.slice( 0, i );
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return false;
|
|
121
|
-
|
|
122
|
-
},
|
|
123
|
-
|
|
124
|
-
/* minimal header reading. modify if you want to parse more information */
|
|
125
|
-
RGBE_ReadHeader = function ( buffer ) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
// regexes to parse header info fields
|
|
129
|
-
const magic_token_re = /^#\?(\S+)/,
|
|
130
|
-
gamma_re = /^\s*GAMMA\s*=\s*(\d+(\.\d+)?)\s*$/,
|
|
131
|
-
exposure_re = /^\s*EXPOSURE\s*=\s*(\d+(\.\d+)?)\s*$/,
|
|
132
|
-
format_re = /^\s*FORMAT=(\S+)\s*$/,
|
|
133
|
-
dimensions_re = /^\s*\-Y\s+(\d+)\s+\+X\s+(\d+)\s*$/,
|
|
134
|
-
|
|
135
|
-
// RGBE format header struct
|
|
136
|
-
header = {
|
|
137
|
-
|
|
138
|
-
valid: 0, /* indicate which fields are valid */
|
|
139
|
-
|
|
140
|
-
string: '', /* the actual header string */
|
|
141
|
-
|
|
142
|
-
comments: '', /* comments found in header */
|
|
143
|
-
|
|
144
|
-
programtype: 'RGBE', /* listed at beginning of file to identify it after "#?". defaults to "RGBE" */
|
|
145
|
-
|
|
146
|
-
format: '', /* RGBE format, default 32-bit_rle_rgbe */
|
|
147
|
-
|
|
148
|
-
gamma: 1.0, /* image has already been gamma corrected with given gamma. defaults to 1.0 (no correction) */
|
|
149
|
-
|
|
150
|
-
exposure: 1.0, /* a value of 1.0 in an image corresponds to <exposure> watts/steradian/m^2. defaults to 1.0 */
|
|
151
|
-
|
|
152
|
-
width: 0, height: 0 /* image dimensions, width/height */
|
|
153
|
-
|
|
154
|
-
};
|
|
155
|
-
|
|
156
|
-
let line, match;
|
|
157
|
-
|
|
158
|
-
if ( buffer.pos >= buffer.byteLength || ! ( line = fgets( buffer ) ) ) {
|
|
159
|
-
|
|
160
|
-
rgbe_error( rgbe_read_error, 'no header found' );
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/* if you want to require the magic token then uncomment the next line */
|
|
165
|
-
if ( ! ( match = line.match( magic_token_re ) ) ) {
|
|
166
|
-
|
|
167
|
-
rgbe_error( rgbe_format_error, 'bad initial token' );
|
|
168
|
-
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
header.valid |= RGBE_VALID_PROGRAMTYPE;
|
|
172
|
-
header.programtype = match[ 1 ];
|
|
173
|
-
header.string += line + '\n';
|
|
174
|
-
|
|
175
|
-
while ( true ) {
|
|
176
|
-
|
|
177
|
-
line = fgets( buffer );
|
|
178
|
-
if ( false === line ) break;
|
|
179
|
-
header.string += line + '\n';
|
|
180
|
-
|
|
181
|
-
if ( '#' === line.charAt( 0 ) ) {
|
|
182
|
-
|
|
183
|
-
header.comments += line + '\n';
|
|
184
|
-
continue; // comment line
|
|
185
|
-
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
if ( match = line.match( gamma_re ) ) {
|
|
189
|
-
|
|
190
|
-
header.gamma = parseFloat( match[ 1 ] );
|
|
191
|
-
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
if ( match = line.match( exposure_re ) ) {
|
|
195
|
-
|
|
196
|
-
header.exposure = parseFloat( match[ 1 ] );
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
if ( match = line.match( format_re ) ) {
|
|
201
|
-
|
|
202
|
-
header.valid |= RGBE_VALID_FORMAT;
|
|
203
|
-
header.format = match[ 1 ];//'32-bit_rle_rgbe';
|
|
204
|
-
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
if ( match = line.match( dimensions_re ) ) {
|
|
208
|
-
|
|
209
|
-
header.valid |= RGBE_VALID_DIMENSIONS;
|
|
210
|
-
header.height = parseInt( match[ 1 ], 10 );
|
|
211
|
-
header.width = parseInt( match[ 2 ], 10 );
|
|
212
|
-
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
if ( ( header.valid & RGBE_VALID_FORMAT ) && ( header.valid & RGBE_VALID_DIMENSIONS ) ) break;
|
|
216
|
-
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
if ( ! ( header.valid & RGBE_VALID_FORMAT ) ) {
|
|
220
|
-
|
|
221
|
-
rgbe_error( rgbe_format_error, 'missing format specifier' );
|
|
222
|
-
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
if ( ! ( header.valid & RGBE_VALID_DIMENSIONS ) ) {
|
|
226
|
-
|
|
227
|
-
rgbe_error( rgbe_format_error, 'missing image size specifier' );
|
|
228
|
-
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
return header;
|
|
232
|
-
|
|
233
|
-
},
|
|
234
|
-
|
|
235
|
-
RGBE_ReadPixels_RLE = function ( buffer, w, h ) {
|
|
236
|
-
|
|
237
|
-
const scanline_width = w;
|
|
238
|
-
|
|
239
|
-
if (
|
|
240
|
-
// run length encoding is not allowed so read flat
|
|
241
|
-
( ( scanline_width < 8 ) || ( scanline_width > 0x7fff ) ) ||
|
|
242
|
-
// this file is not run length encoded
|
|
243
|
-
( ( 2 !== buffer[ 0 ] ) || ( 2 !== buffer[ 1 ] ) || ( buffer[ 2 ] & 0x80 ) )
|
|
244
|
-
) {
|
|
245
|
-
|
|
246
|
-
// return the flat buffer
|
|
247
|
-
return new Uint8Array( buffer );
|
|
248
|
-
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
if ( scanline_width !== ( ( buffer[ 2 ] << 8 ) | buffer[ 3 ] ) ) {
|
|
252
|
-
|
|
253
|
-
rgbe_error( rgbe_format_error, 'wrong scanline width' );
|
|
254
|
-
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
const data_rgba = new Uint8Array( 4 * w * h );
|
|
258
|
-
|
|
259
|
-
if ( ! data_rgba.length ) {
|
|
260
|
-
|
|
261
|
-
rgbe_error( rgbe_memory_error, 'unable to allocate buffer space' );
|
|
262
|
-
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
let offset = 0, pos = 0;
|
|
266
|
-
|
|
267
|
-
const ptr_end = 4 * scanline_width;
|
|
268
|
-
const rgbeStart = new Uint8Array( 4 );
|
|
269
|
-
const scanline_buffer = new Uint8Array( ptr_end );
|
|
270
|
-
let num_scanlines = h;
|
|
271
|
-
|
|
272
|
-
// read in each successive scanline
|
|
273
|
-
while ( ( num_scanlines > 0 ) && ( pos < buffer.byteLength ) ) {
|
|
274
|
-
|
|
275
|
-
if ( pos + 4 > buffer.byteLength ) {
|
|
276
|
-
|
|
277
|
-
rgbe_error( rgbe_read_error );
|
|
278
|
-
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
rgbeStart[ 0 ] = buffer[ pos ++ ];
|
|
282
|
-
rgbeStart[ 1 ] = buffer[ pos ++ ];
|
|
283
|
-
rgbeStart[ 2 ] = buffer[ pos ++ ];
|
|
284
|
-
rgbeStart[ 3 ] = buffer[ pos ++ ];
|
|
285
|
-
|
|
286
|
-
if ( ( 2 != rgbeStart[ 0 ] ) || ( 2 != rgbeStart[ 1 ] ) || ( ( ( rgbeStart[ 2 ] << 8 ) | rgbeStart[ 3 ] ) != scanline_width ) ) {
|
|
287
|
-
|
|
288
|
-
rgbe_error( rgbe_format_error, 'bad rgbe scanline format' );
|
|
289
|
-
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
// read each of the four channels for the scanline into the buffer
|
|
293
|
-
// first red, then green, then blue, then exponent
|
|
294
|
-
let ptr = 0, count;
|
|
295
|
-
|
|
296
|
-
while ( ( ptr < ptr_end ) && ( pos < buffer.byteLength ) ) {
|
|
297
|
-
|
|
298
|
-
count = buffer[ pos ++ ];
|
|
299
|
-
const isEncodedRun = count > 128;
|
|
300
|
-
if ( isEncodedRun ) count -= 128;
|
|
301
|
-
|
|
302
|
-
if ( ( 0 === count ) || ( ptr + count > ptr_end ) ) {
|
|
303
|
-
|
|
304
|
-
rgbe_error( rgbe_format_error, 'bad scanline data' );
|
|
305
|
-
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
if ( isEncodedRun ) {
|
|
309
|
-
|
|
310
|
-
// a (encoded) run of the same value
|
|
311
|
-
const byteValue = buffer[ pos ++ ];
|
|
312
|
-
for ( let i = 0; i < count; i ++ ) {
|
|
313
|
-
|
|
314
|
-
scanline_buffer[ ptr ++ ] = byteValue;
|
|
315
|
-
|
|
316
|
-
}
|
|
317
|
-
//ptr += count;
|
|
318
|
-
|
|
319
|
-
} else {
|
|
320
|
-
|
|
321
|
-
// a literal-run
|
|
322
|
-
scanline_buffer.set( buffer.subarray( pos, pos + count ), ptr );
|
|
323
|
-
ptr += count; pos += count;
|
|
324
|
-
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
// now convert data from buffer into rgba
|
|
331
|
-
// first red, then green, then blue, then exponent (alpha)
|
|
332
|
-
const l = scanline_width; //scanline_buffer.byteLength;
|
|
333
|
-
for ( let i = 0; i < l; i ++ ) {
|
|
334
|
-
|
|
335
|
-
let off = 0;
|
|
336
|
-
data_rgba[ offset ] = scanline_buffer[ i + off ];
|
|
337
|
-
off += scanline_width; //1;
|
|
338
|
-
data_rgba[ offset + 1 ] = scanline_buffer[ i + off ];
|
|
339
|
-
off += scanline_width; //1;
|
|
340
|
-
data_rgba[ offset + 2 ] = scanline_buffer[ i + off ];
|
|
341
|
-
off += scanline_width; //1;
|
|
342
|
-
data_rgba[ offset + 3 ] = scanline_buffer[ i + off ];
|
|
343
|
-
offset += 4;
|
|
344
|
-
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
num_scanlines --;
|
|
348
|
-
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
return data_rgba;
|
|
352
|
-
|
|
353
|
-
};
|
|
354
|
-
|
|
355
|
-
const RGBEByteToRGBFloat = function ( sourceArray, sourceOffset, destArray, destOffset ) {
|
|
356
|
-
|
|
357
|
-
const e = sourceArray[ sourceOffset + 3 ];
|
|
358
|
-
const scale = Math.pow( 2.0, e - 128.0 ) / 255.0;
|
|
359
|
-
|
|
360
|
-
destArray[ destOffset + 0 ] = sourceArray[ sourceOffset + 0 ] * scale;
|
|
361
|
-
destArray[ destOffset + 1 ] = sourceArray[ sourceOffset + 1 ] * scale;
|
|
362
|
-
destArray[ destOffset + 2 ] = sourceArray[ sourceOffset + 2 ] * scale;
|
|
363
|
-
destArray[ destOffset + 3 ] = 1;
|
|
364
|
-
|
|
365
|
-
};
|
|
366
|
-
|
|
367
|
-
const RGBEByteToRGBHalf = function ( sourceArray, sourceOffset, destArray, destOffset ) {
|
|
368
|
-
|
|
369
|
-
const e = sourceArray[ sourceOffset + 3 ];
|
|
370
|
-
const scale = Math.pow( 2.0, e - 128.0 ) / 255.0;
|
|
371
|
-
|
|
372
|
-
// clamping to 65504, the maximum representable value in float16
|
|
373
|
-
destArray[ destOffset + 0 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 0 ] * scale, 65504 ) );
|
|
374
|
-
destArray[ destOffset + 1 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 1 ] * scale, 65504 ) );
|
|
375
|
-
destArray[ destOffset + 2 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 2 ] * scale, 65504 ) );
|
|
376
|
-
destArray[ destOffset + 3 ] = DataUtils.toHalfFloat( 1 );
|
|
377
|
-
|
|
378
|
-
};
|
|
379
|
-
|
|
380
|
-
const byteArray = new Uint8Array( buffer );
|
|
381
|
-
byteArray.pos = 0;
|
|
382
|
-
const rgbe_header_info = RGBE_ReadHeader( byteArray );
|
|
383
|
-
|
|
384
|
-
const w = rgbe_header_info.width,
|
|
385
|
-
h = rgbe_header_info.height,
|
|
386
|
-
image_rgba_data = RGBE_ReadPixels_RLE( byteArray.subarray( byteArray.pos ), w, h );
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
let data, type;
|
|
390
|
-
let numElements;
|
|
391
|
-
|
|
392
|
-
switch ( this.type ) {
|
|
393
|
-
|
|
394
|
-
case FloatType:
|
|
395
|
-
|
|
396
|
-
numElements = image_rgba_data.length / 4;
|
|
397
|
-
const floatArray = new Float32Array( numElements * 4 );
|
|
398
|
-
|
|
399
|
-
for ( let j = 0; j < numElements; j ++ ) {
|
|
400
|
-
|
|
401
|
-
RGBEByteToRGBFloat( image_rgba_data, j * 4, floatArray, j * 4 );
|
|
402
|
-
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
data = floatArray;
|
|
406
|
-
type = FloatType;
|
|
407
|
-
break;
|
|
408
|
-
|
|
409
|
-
case HalfFloatType:
|
|
410
|
-
|
|
411
|
-
numElements = image_rgba_data.length / 4;
|
|
412
|
-
const halfArray = new Uint16Array( numElements * 4 );
|
|
413
|
-
|
|
414
|
-
for ( let j = 0; j < numElements; j ++ ) {
|
|
415
|
-
|
|
416
|
-
RGBEByteToRGBHalf( image_rgba_data, j * 4, halfArray, j * 4 );
|
|
417
|
-
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
data = halfArray;
|
|
421
|
-
type = HalfFloatType;
|
|
422
|
-
break;
|
|
423
|
-
|
|
424
|
-
default:
|
|
425
|
-
|
|
426
|
-
throw new Error( 'THREE.RGBELoader: Unsupported type: ' + this.type );
|
|
427
|
-
break;
|
|
428
|
-
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
return {
|
|
432
|
-
width: w, height: h,
|
|
433
|
-
data: data,
|
|
434
|
-
header: rgbe_header_info.string,
|
|
435
|
-
gamma: rgbe_header_info.gamma,
|
|
436
|
-
exposure: rgbe_header_info.exposure,
|
|
437
|
-
type: type
|
|
438
|
-
};
|
|
439
|
-
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
/**
|
|
443
|
-
* Sets the texture type.
|
|
444
|
-
*
|
|
445
|
-
* @param {(HalfFloatType|FloatType)} value - The texture type to set.
|
|
446
|
-
* @return {RGBELoader} A reference to this loader.
|
|
447
|
-
*/
|
|
448
|
-
setDataType( value ) {
|
|
449
|
-
|
|
450
|
-
this.type = value;
|
|
451
|
-
return this;
|
|
452
|
-
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
load( url, onLoad, onProgress, onError ) {
|
|
456
|
-
|
|
457
|
-
function onLoadCallback( texture, texData ) {
|
|
458
|
-
|
|
459
|
-
switch ( texture.type ) {
|
|
460
|
-
|
|
461
|
-
case FloatType:
|
|
462
|
-
case HalfFloatType:
|
|
463
|
-
|
|
464
|
-
texture.colorSpace = LinearSRGBColorSpace;
|
|
465
|
-
texture.minFilter = LinearFilter;
|
|
466
|
-
texture.magFilter = LinearFilter;
|
|
467
|
-
texture.generateMipmaps = false;
|
|
468
|
-
texture.flipY = true;
|
|
469
|
-
|
|
470
|
-
break;
|
|
471
|
-
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
if ( onLoad ) onLoad( texture, texData );
|
|
475
|
-
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
return super.load( url, onLoadCallback, onProgress, onError );
|
|
479
|
-
|
|
480
12
|
}
|
|
481
13
|
|
|
482
14
|
}
|
|
483
15
|
|
|
484
16
|
export { RGBELoader };
|
|
17
|
+
|
|
18
|
+
|
|
@@ -153,13 +153,13 @@ class TTFLoader extends Loader {
|
|
|
153
153
|
} );
|
|
154
154
|
|
|
155
155
|
if ( Array.isArray( glyph.unicodes ) && glyph.unicodes.length > 0 ) {
|
|
156
|
-
|
|
156
|
+
|
|
157
157
|
glyph.unicodes.forEach( function ( unicode ) {
|
|
158
|
-
|
|
158
|
+
|
|
159
159
|
glyphs[ String.fromCodePoint( unicode ) ] = token;
|
|
160
|
-
|
|
160
|
+
|
|
161
161
|
} );
|
|
162
|
-
|
|
162
|
+
|
|
163
163
|
} else {
|
|
164
164
|
|
|
165
165
|
glyphs[ String.fromCodePoint( glyph.unicode ) ] = token;
|
|
@@ -89,7 +89,7 @@ class UltraHDRLoader extends Loader {
|
|
|
89
89
|
* Sets the texture type.
|
|
90
90
|
*
|
|
91
91
|
* @param {(HalfFloatType|FloatType)} value - The texture type to set.
|
|
92
|
-
* @return {
|
|
92
|
+
* @return {UltraHDRLoader} A reference to this loader.
|
|
93
93
|
*/
|
|
94
94
|
setDataType( value ) {
|
|
95
95
|
|