@cesium/engine 10.0.0 → 11.0.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/Workers/{chunk-AA4GZKOT.js → chunk-2EDC3QGH.js} +1 -1
- package/Build/Workers/{chunk-DKVHRNFY.js → chunk-2MKRG7L7.js} +5 -5
- package/Build/Workers/{chunk-X23FRWHJ.js → chunk-2RZYNSMR.js} +6 -6
- package/Build/Workers/{chunk-TO2PVHKI.js → chunk-4NBRIKB3.js} +2 -2
- package/Build/Workers/{chunk-GRAT5GE7.js → chunk-4TK5YR6Q.js} +5 -5
- package/Build/Workers/{chunk-XD445VDH.js → chunk-54VC7SCM.js} +7 -7
- package/Build/Workers/{chunk-G3YR53LY.js → chunk-5IY5BXCT.js} +13 -13
- package/Build/Workers/{chunk-O3JCMSS3.js → chunk-6FFGOENI.js} +54 -7
- package/Build/Workers/{chunk-7XGC6YB2.js → chunk-6PJIHPQB.js} +13 -13
- package/Build/Workers/{chunk-GR3CDLCP.js → chunk-6ZREIBKS.js} +7 -7
- package/Build/Workers/{chunk-4MSUJ4I7.js → chunk-AI3O7UN2.js} +6 -6
- package/Build/Workers/{chunk-COYFZ5VA.js → chunk-AS7P4BHI.js} +6 -6
- package/Build/Workers/{chunk-JYAHOGGL.js → chunk-AUM45VEG.js} +16 -15
- package/Build/Workers/{chunk-BDFNKFOE.js → chunk-BBO6BGLC.js} +13 -13
- package/Build/Workers/{chunk-AVI4IUWC.js → chunk-BH5ZEN4I.js} +10 -10
- package/Build/Workers/{chunk-4BAE4PWO.js → chunk-BJ3WF5RW.js} +6 -6
- package/Build/Workers/{chunk-Q55ECN3Y.js → chunk-BUOFSNFW.js} +1 -1
- package/Build/Workers/{chunk-QX5XS4LC.js → chunk-BZXF3GNX.js} +2 -2
- package/Build/Workers/{chunk-PYHLO636.js → chunk-DJXXI7UF.js} +5 -5
- package/Build/Workers/{chunk-LCLJJ2MZ.js → chunk-DVAIU7A4.js} +17 -17
- package/Build/Workers/{chunk-SYCPRK3D.js → chunk-FJT3ERV7.js} +9 -9
- package/Build/Workers/{chunk-L6RTJ3RE.js → chunk-GOHDOWU5.js} +14 -14
- package/Build/Workers/{chunk-MSKXMXJI.js → chunk-HA6TZ3XT.js} +4 -4
- package/Build/Workers/{chunk-PCP4YQST.js → chunk-HBZSCVZC.js} +11 -11
- package/Build/Workers/{chunk-5S7OLEPK.js → chunk-HC7RYWPZ.js} +12 -12
- package/Build/Workers/{chunk-VE7BFUIX.js → chunk-HFMJM3SX.js} +1 -1
- package/Build/Workers/{chunk-OOK53QUQ.js → chunk-HFPMX5L2.js} +1 -1
- package/Build/Workers/{chunk-VFBNELXB.js → chunk-HO2NTC7I.js} +6 -6
- package/Build/Workers/{chunk-DOXCPOG4.js → chunk-HZPMWR4H.js} +7 -7
- package/Build/Workers/{chunk-I2RC4XVN.js → chunk-IBG5FVXC.js} +4 -4
- package/Build/Workers/{chunk-LEABCTLP.js → chunk-IXLNNST6.js} +4 -4
- package/Build/Workers/{chunk-4YSNMHZ4.js → chunk-JYUCC5NV.js} +6 -6
- package/Build/Workers/{chunk-BCL4PHHT.js → chunk-KFW4UNQH.js} +10 -10
- package/Build/Workers/{chunk-R6B7UCQB.js → chunk-KKAEXHDY.js} +2 -2
- package/Build/Workers/{chunk-BJF5LOWE.js → chunk-L6FARMF6.js} +7 -7
- package/Build/Workers/{chunk-C2CGMAIU.js → chunk-N3BIL6WA.js} +13 -13
- package/Build/Workers/{chunk-STBBMQGG.js → chunk-O5SSW3B3.js} +6 -6
- package/Build/Workers/{chunk-S3PI2KFM.js → chunk-OC4MYPVW.js} +2 -2
- package/Build/Workers/{chunk-MDHQR3ZS.js → chunk-OOA6GXKD.js} +7 -7
- package/Build/Workers/{chunk-AD5HBJ2F.js → chunk-OSCHEWSG.js} +7 -7
- package/Build/Workers/{chunk-NTXTUNEF.js → chunk-QGT2GMOK.js} +4 -4
- package/Build/Workers/{chunk-VO3ACQB2.js → chunk-RFQYEYAL.js} +17 -17
- package/Build/Workers/{chunk-KUN2ZA5X.js → chunk-RJF5ZP76.js} +4 -4
- package/Build/Workers/{chunk-QD4KM3GO.js → chunk-SIZXFNJY.js} +6 -5
- package/Build/Workers/{chunk-FXIHSF7O.js → chunk-SRZJCF7G.js} +9 -9
- package/Build/Workers/{chunk-T77JILCU.js → chunk-T4MB73MC.js} +2 -2
- package/Build/Workers/{chunk-3WUV74WM.js → chunk-TTI2SUWJ.js} +2 -2
- package/Build/Workers/{chunk-QMLTCCYG.js → chunk-VHJ5ESXF.js} +1 -1
- package/Build/Workers/{chunk-2J3JKXCP.js → chunk-VSFFJGTA.js} +9 -5
- package/Build/Workers/{chunk-DGS5QNIO.js → chunk-WQRXRDCZ.js} +11 -11
- package/Build/Workers/{chunk-OORVMGDU.js → chunk-WXDGOYTT.js} +12 -7
- package/Build/Workers/{chunk-RJYML24O.js → chunk-XLCZE6DD.js} +423 -448
- package/Build/Workers/combineGeometry.js +22 -22
- package/Build/Workers/createBoxGeometry.js +16 -16
- package/Build/Workers/createBoxOutlineGeometry.js +14 -14
- package/Build/Workers/createCircleGeometry.js +24 -24
- package/Build/Workers/createCircleOutlineGeometry.js +17 -17
- package/Build/Workers/createCoplanarPolygonGeometry.js +31 -31
- package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +29 -29
- package/Build/Workers/createCorridorGeometry.js +27 -27
- package/Build/Workers/createCorridorOutlineGeometry.js +26 -26
- package/Build/Workers/createCylinderGeometry.js +18 -18
- package/Build/Workers/createCylinderOutlineGeometry.js +16 -16
- package/Build/Workers/createEllipseGeometry.js +24 -24
- package/Build/Workers/createEllipseOutlineGeometry.js +17 -17
- package/Build/Workers/createEllipsoidGeometry.js +17 -17
- package/Build/Workers/createEllipsoidOutlineGeometry.js +16 -16
- package/Build/Workers/createFrustumGeometry.js +16 -16
- package/Build/Workers/createFrustumOutlineGeometry.js +16 -16
- package/Build/Workers/createGeometry.js +22 -22
- package/Build/Workers/createGroundPolylineGeometry.js +20 -20
- package/Build/Workers/createPlaneGeometry.js +14 -14
- package/Build/Workers/createPlaneOutlineGeometry.js +13 -13
- package/Build/Workers/createPolygonGeometry.js +30 -30
- package/Build/Workers/createPolygonOutlineGeometry.js +28 -28
- package/Build/Workers/createPolylineGeometry.js +23 -23
- package/Build/Workers/createPolylineVolumeGeometry.js +29 -29
- package/Build/Workers/createPolylineVolumeOutlineGeometry.js +25 -25
- package/Build/Workers/createRectangleGeometry.js +25 -25
- package/Build/Workers/createRectangleOutlineGeometry.js +18 -18
- package/Build/Workers/createSimplePolylineGeometry.js +21 -21
- package/Build/Workers/createSphereGeometry.js +17 -17
- package/Build/Workers/createSphereOutlineGeometry.js +16 -16
- package/Build/Workers/createTaskProcessorWorker.js +3 -3
- package/Build/Workers/createVectorTileClampedPolylines.js +13 -13
- package/Build/Workers/createVectorTileGeometries.js +22 -22
- package/Build/Workers/createVectorTilePoints.js +12 -12
- package/Build/Workers/createVectorTilePolygons.js +20 -20
- package/Build/Workers/createVectorTilePolylines.js +13 -13
- package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +20 -20
- package/Build/Workers/createVerticesFromHeightmap.js +24 -20
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +17 -17
- package/Build/Workers/createWallGeometry.js +22 -22
- package/Build/Workers/createWallOutlineGeometry.js +21 -21
- package/Build/Workers/decodeDraco.js +11 -11
- package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +28 -5
- package/Build/Workers/decodeI3S.js +10 -10
- package/Build/Workers/transcodeKTX2.js +20 -22
- package/Build/Workers/transferTypedArrayTest.js +1 -1
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +20 -20
- package/Source/Core/CompressedTextureBuffer.js +11 -0
- package/Source/Core/Ion.js +1 -1
- package/Source/Core/KTX2Transcoder.js +9 -16
- package/Source/Core/PixelFormat.js +1 -15
- package/Source/Core/Simon1994PlanetaryPositions.js +2 -1
- package/Source/Core/Transforms.js +137 -2
- package/Source/DataSources/BillboardGraphics.js +16 -0
- package/Source/DataSources/BillboardVisualizer.js +7 -0
- package/Source/DataSources/CallbackProperty.js +8 -2
- package/Source/DataSources/CheckerboardMaterialProperty.js +7 -1
- package/Source/DataSources/ColorMaterialProperty.js +7 -1
- package/Source/DataSources/CompositeMaterialProperty.js +5 -4
- package/Source/DataSources/CompositePositionProperty.js +7 -1
- package/Source/DataSources/CompositeProperty.js +5 -5
- package/Source/DataSources/ConstantPositionProperty.js +7 -1
- package/Source/DataSources/Entity.js +1 -1
- package/Source/DataSources/GridMaterialProperty.js +7 -1
- package/Source/DataSources/ImageMaterialProperty.js +8 -1
- package/Source/DataSources/MaterialProperty.js +7 -1
- package/Source/DataSources/NodeTransformationProperty.js +7 -1
- package/Source/DataSources/PathVisualizer.js +4 -4
- package/Source/DataSources/PointGraphics.js +17 -0
- package/Source/DataSources/PointVisualizer.js +12 -0
- package/Source/DataSources/PolylineArrowMaterialProperty.js +7 -1
- package/Source/DataSources/PolylineDashMaterialProperty.js +7 -1
- package/Source/DataSources/PolylineGlowMaterialProperty.js +7 -1
- package/Source/DataSources/PolylineOutlineMaterialProperty.js +7 -1
- package/Source/DataSources/PositionProperty.js +5 -8
- package/Source/DataSources/PositionPropertyArray.js +7 -1
- package/Source/DataSources/Property.js +1 -1
- package/Source/DataSources/PropertyArray.js +5 -5
- package/Source/DataSources/PropertyBag.js +5 -4
- package/Source/DataSources/ReferenceProperty.js +7 -1
- package/Source/DataSources/SampledPositionProperty.js +7 -1
- package/Source/DataSources/SampledProperty.js +6 -4
- package/Source/DataSources/ScaledPositionProperty.js +6 -0
- package/Source/DataSources/StripeMaterialProperty.js +7 -1
- package/Source/DataSources/TerrainOffsetProperty.js +9 -0
- package/Source/DataSources/TimeIntervalCollectionPositionProperty.js +7 -1
- package/Source/DataSources/TimeIntervalCollectionProperty.js +5 -5
- package/Source/DataSources/VelocityOrientationProperty.js +6 -1
- package/Source/DataSources/VelocityVectorProperty.js +3 -5
- package/Source/Renderer/AutomaticUniforms.js +3 -18
- package/Source/Renderer/Context.js +15 -0
- package/Source/Renderer/CubeMap.js +326 -348
- package/Source/Renderer/CubeMapFace.js +26 -48
- package/Source/Renderer/PixelDatatype.js +23 -0
- package/Source/Renderer/Sampler.js +7 -13
- package/Source/Renderer/ShaderProgram.js +7 -0
- package/Source/Renderer/Texture.js +396 -332
- package/Source/Renderer/UniformState.js +8 -33
- package/Source/Renderer/demodernizeShader.js +2 -0
- package/Source/Renderer/loadCubeMap.js +3 -8
- package/Source/Scene/ArcGisMapService.js +1 -1
- package/Source/Scene/Billboard.js +29 -2
- package/Source/Scene/BillboardCollection.js +49 -0
- package/Source/Scene/BingMapsImageryProvider.js +10 -1
- package/Source/Scene/CameraEventAggregator.js +49 -5
- package/Source/Scene/Globe.js +1 -1
- package/Source/Scene/GlobeSurfaceShaderSet.js +29 -24
- package/Source/Scene/GlobeSurfaceTileProvider.js +5 -3
- package/Source/Scene/ImageBasedLighting.js +36 -36
- package/Source/Scene/Label.js +2 -2
- package/Source/Scene/Material.js +24 -2
- package/Source/Scene/Model/ImageBasedLightingPipelineStage.js +7 -15
- package/Source/Scene/Model/Model.js +1 -1
- package/Source/Scene/PointPrimitive.js +28 -2
- package/Source/Scene/PointPrimitiveCollection.js +22 -9
- package/Source/Scene/PostProcessStageCollection.js +45 -15
- package/Source/Scene/PostProcessStageLibrary.js +26 -0
- package/Source/Scene/Scene.js +20 -22
- package/Source/Scene/SceneTransforms.js +0 -62
- package/Source/Scene/ScreenSpaceCameraController.js +11 -4
- package/Source/Scene/SkyBox.js +13 -19
- package/Source/Scene/SpecularEnvironmentCubeMap.js +240 -0
- package/Source/Scene/Tonemapper.js +35 -23
- package/Source/Scene/VoxelPrimitive.js +0 -29
- package/Source/Scene/VoxelRenderResources.js +0 -3
- package/Source/Shaders/BillboardCollectionFS.glsl +4 -0
- package/Source/Shaders/BillboardCollectionFS.js +4 -0
- package/Source/Shaders/BillboardCollectionVS.glsl +3 -1
- package/Source/Shaders/BillboardCollectionVS.js +3 -1
- package/Source/Shaders/BrdfLutGeneratorFS.glsl +30 -13
- package/Source/Shaders/BrdfLutGeneratorFS.js +30 -13
- package/Source/Shaders/Builtin/CzmBuiltins.js +2 -2
- package/Source/Shaders/Builtin/Functions/pbrLighting.glsl +42 -41
- package/Source/Shaders/Builtin/Functions/pbrLighting.js +42 -41
- package/Source/Shaders/Builtin/Functions/pbrNeutralTonemapping.glsl +23 -0
- package/Source/Shaders/Builtin/Functions/pbrNeutralTonemapping.js +25 -0
- package/Source/Shaders/Builtin/Functions/textureCube.glsl +21 -2
- package/Source/Shaders/Builtin/Functions/textureCube.js +21 -2
- package/Source/Shaders/Builtin/Structs/materialInput.glsl +2 -0
- package/Source/Shaders/Builtin/Structs/materialInput.js +2 -0
- package/Source/Shaders/GlobeFS.glsl +10 -4
- package/Source/Shaders/GlobeFS.js +10 -4
- package/Source/Shaders/Materials/WaterMaskMaterial.glsl +15 -0
- package/Source/Shaders/Materials/WaterMaskMaterial.js +17 -0
- package/Source/Shaders/Model/AtmosphereStageFS.glsl +1 -1
- package/Source/Shaders/Model/AtmosphereStageFS.js +1 -1
- package/Source/Shaders/Model/ImageBasedLightingStageFS.glsl +57 -46
- package/Source/Shaders/Model/ImageBasedLightingStageFS.js +57 -46
- package/Source/Shaders/Model/LightingStageFS.glsl +8 -7
- package/Source/Shaders/Model/LightingStageFS.js +8 -7
- package/Source/Shaders/Model/MaterialStageFS.glsl +10 -14
- package/Source/Shaders/Model/MaterialStageFS.js +10 -14
- package/Source/Shaders/PointPrimitiveCollectionFS.glsl +4 -0
- package/Source/Shaders/PointPrimitiveCollectionFS.js +4 -0
- package/Source/Shaders/PointPrimitiveCollectionVS.glsl +9 -7
- package/Source/Shaders/PointPrimitiveCollectionVS.js +9 -7
- package/Source/Shaders/PostProcessStages/AcesTonemappingStage.glsl +4 -0
- package/Source/Shaders/PostProcessStages/AcesTonemappingStage.js +4 -0
- package/Source/Shaders/PostProcessStages/FilmicTonemapping.glsl +4 -0
- package/Source/Shaders/PostProcessStages/FilmicTonemapping.js +4 -0
- package/Source/Shaders/PostProcessStages/ModifiedReinhardTonemapping.glsl +4 -0
- package/Source/Shaders/PostProcessStages/ModifiedReinhardTonemapping.js +4 -0
- package/Source/Shaders/PostProcessStages/PbrNeutralTonemapping.glsl +25 -0
- package/Source/Shaders/PostProcessStages/PbrNeutralTonemapping.js +27 -0
- package/Source/Shaders/PostProcessStages/ReinhardTonemapping.glsl +4 -0
- package/Source/Shaders/PostProcessStages/ReinhardTonemapping.js +4 -0
- package/Source/Shaders/SkyAtmosphereFS.glsl +1 -1
- package/Source/Shaders/SkyAtmosphereFS.js +1 -1
- package/Source/Widget/CesiumWidget.js +1 -1
- package/index.d.ts +191 -106
- package/index.js +133 -134
- package/package.json +4 -4
- package/Source/Scene/OctahedralProjectedCubeMap.js +0 -445
- package/Source/Shaders/Builtin/Functions/sampleOctahedralProjection.glsl +0 -78
- package/Source/Shaders/Builtin/Functions/sampleOctahedralProjection.js +0 -80
- package/Source/Shaders/OctahedralProjectionAtlasFS.glsl +0 -89
- package/Source/Shaders/OctahedralProjectionAtlasFS.js +0 -91
- package/Source/Shaders/OctahedralProjectionFS.glsl +0 -14
- package/Source/Shaders/OctahedralProjectionFS.js +0 -16
- package/Source/Shaders/OctahedralProjectionVS.glsl +0 -10
- package/Source/Shaders/OctahedralProjectionVS.js +0 -12
|
@@ -14,6 +14,51 @@ import TextureMagnificationFilter from "./TextureMagnificationFilter.js";
|
|
|
14
14
|
import TextureMinificationFilter from "./TextureMinificationFilter.js";
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
|
+
* @typedef CubeMap.BufferSource
|
|
18
|
+
*
|
|
19
|
+
* @property {TypedArray} arrayBufferView A view of a binary data buffer containing pixel values.
|
|
20
|
+
* @property {number} width The width of one face of the cube map, in pixels. Must be equal to height.
|
|
21
|
+
* @property {number} height The height of one face of the cube map, in pixels. Must be equal to width.
|
|
22
|
+
*
|
|
23
|
+
* @private
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @typedef CubeMap.Source
|
|
28
|
+
*
|
|
29
|
+
* @property {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|CubeMap.BufferSource} positiveX
|
|
30
|
+
* @property {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|CubeMap.BufferSource} negativeX
|
|
31
|
+
* @property {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|CubeMap.BufferSource} positiveY
|
|
32
|
+
* @property {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|CubeMap.BufferSource} negativeY
|
|
33
|
+
* @property {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|CubeMap.BufferSource} positiveZ
|
|
34
|
+
* @property {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|CubeMap.BufferSource} negativeZ
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @typedef CubeMap.ConstructorOptions
|
|
39
|
+
*
|
|
40
|
+
* @property {Context} context
|
|
41
|
+
* @property {CubeMap.Source} [source] The source for texel values to be loaded into the texture.
|
|
42
|
+
* @property {PixelFormat} [pixelFormat=PixelFormat.RGBA] The format of each pixel, i.e., the number of components it has and what they represent.
|
|
43
|
+
* @property {PixelDatatype} [pixelDatatype=PixelDatatype.UNSIGNED_BYTE] The data type of each pixel.
|
|
44
|
+
* @property {boolean} [flipY=true] If true, the source values will be read as if the y-axis is inverted (y=0 at the top).
|
|
45
|
+
* @property {boolean} [skipColorSpaceConversion=false] If true, color space conversions will be skipped when reading the texel values.
|
|
46
|
+
* @property {Sampler} [sampler] Information about how to sample the cubemap texture.
|
|
47
|
+
* @property {number} [width] The pixel width of the texture. If not supplied, must be available from the source. Must be equal to height.
|
|
48
|
+
* @property {number} [height] The pixel height of the texture. If not supplied, must be available from the source. Must be equal to width.
|
|
49
|
+
* @property {boolean} [preMultiplyAlpha] If true, the alpha channel will be multiplied into the other channels.
|
|
50
|
+
*
|
|
51
|
+
* @private
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* A wrapper for a {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLTexture|WebGLTexture}
|
|
56
|
+
* used as a cube map, to abstract away the verbose GL calls associated with setting up a texture.
|
|
57
|
+
*
|
|
58
|
+
* @alias CubeMap
|
|
59
|
+
* @constructor
|
|
60
|
+
*
|
|
61
|
+
* @param {CubeMap.ConstructorOptions} options An object describing initialization options.
|
|
17
62
|
* @private
|
|
18
63
|
*/
|
|
19
64
|
function CubeMap(options) {
|
|
@@ -23,67 +68,55 @@ function CubeMap(options) {
|
|
|
23
68
|
Check.defined("options.context", options.context);
|
|
24
69
|
//>>includeEnd('debug');
|
|
25
70
|
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
71
|
+
const {
|
|
72
|
+
context,
|
|
73
|
+
source,
|
|
74
|
+
pixelFormat = PixelFormat.RGBA,
|
|
75
|
+
pixelDatatype = PixelDatatype.UNSIGNED_BYTE,
|
|
76
|
+
flipY = true,
|
|
77
|
+
skipColorSpaceConversion = false,
|
|
78
|
+
sampler = new Sampler(),
|
|
79
|
+
} = options;
|
|
30
80
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
source.positiveZ,
|
|
38
|
-
source.negativeZ,
|
|
39
|
-
];
|
|
81
|
+
// Use premultiplied alpha for opaque textures should perform better on Chrome:
|
|
82
|
+
// http://media.tojicode.com/webglCamp4/#20
|
|
83
|
+
const preMultiplyAlpha =
|
|
84
|
+
options.preMultiplyAlpha ||
|
|
85
|
+
pixelFormat === PixelFormat.RGB ||
|
|
86
|
+
pixelFormat === PixelFormat.LUMINANCE;
|
|
40
87
|
|
|
88
|
+
let { width, height } = options;
|
|
89
|
+
|
|
90
|
+
if (defined(source)) {
|
|
41
91
|
//>>includeStart('debug', pragmas.debug);
|
|
42
92
|
if (
|
|
43
|
-
!
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
!faces[3] ||
|
|
47
|
-
!faces[4] ||
|
|
48
|
-
!faces[5]
|
|
93
|
+
!Object.values(CubeMap.FaceName).every((faceName) =>
|
|
94
|
+
defined(source[faceName])
|
|
95
|
+
)
|
|
49
96
|
) {
|
|
50
97
|
throw new DeveloperError(
|
|
51
|
-
|
|
98
|
+
`options.source requires faces ${Object.values(CubeMap.FaceName).join(
|
|
99
|
+
", "
|
|
100
|
+
)}.`
|
|
52
101
|
);
|
|
53
102
|
}
|
|
54
103
|
//>>includeEnd('debug');
|
|
55
104
|
|
|
56
|
-
width =
|
|
57
|
-
height = faces[0].height;
|
|
105
|
+
({ width, height } = source.positiveX);
|
|
58
106
|
|
|
59
107
|
//>>includeStart('debug', pragmas.debug);
|
|
60
|
-
for (
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
Number(faces[i].height) !== height
|
|
64
|
-
) {
|
|
108
|
+
for (const faceName of CubeMap.getFaceNames()) {
|
|
109
|
+
const face = source[faceName];
|
|
110
|
+
if (Number(face.width) !== width || Number(face.height) !== height) {
|
|
65
111
|
throw new DeveloperError(
|
|
66
112
|
"Each face in options.source must have the same width and height."
|
|
67
113
|
);
|
|
68
114
|
}
|
|
69
115
|
}
|
|
70
116
|
//>>includeEnd('debug');
|
|
71
|
-
} else {
|
|
72
|
-
width = options.width;
|
|
73
|
-
height = options.height;
|
|
74
117
|
}
|
|
75
118
|
|
|
76
119
|
const size = width;
|
|
77
|
-
const pixelDatatype = defaultValue(
|
|
78
|
-
options.pixelDatatype,
|
|
79
|
-
PixelDatatype.UNSIGNED_BYTE
|
|
80
|
-
);
|
|
81
|
-
const pixelFormat = defaultValue(options.pixelFormat, PixelFormat.RGBA);
|
|
82
|
-
const internalFormat = PixelFormat.toInternalFormat(
|
|
83
|
-
pixelFormat,
|
|
84
|
-
pixelDatatype,
|
|
85
|
-
context
|
|
86
|
-
);
|
|
87
120
|
|
|
88
121
|
//>>includeStart('debug', pragmas.debug);
|
|
89
122
|
if (!defined(width) || !defined(height)) {
|
|
@@ -102,7 +135,7 @@ function CubeMap(options) {
|
|
|
102
135
|
|
|
103
136
|
if (size > ContextLimits.maximumCubeMapSize) {
|
|
104
137
|
throw new DeveloperError(
|
|
105
|
-
`Width and height must be less than or equal to the maximum cube map size (${ContextLimits.maximumCubeMapSize}).
|
|
138
|
+
`Width and height must be less than or equal to the maximum cube map size (${ContextLimits.maximumCubeMapSize}). Check maximumCubeMapSize.`
|
|
106
139
|
);
|
|
107
140
|
}
|
|
108
141
|
|
|
@@ -138,168 +171,135 @@ function CubeMap(options) {
|
|
|
138
171
|
|
|
139
172
|
const sizeInBytes =
|
|
140
173
|
PixelFormat.textureSizeInBytes(pixelFormat, pixelDatatype, size, size) * 6;
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
options.preMultiplyAlpha ||
|
|
146
|
-
pixelFormat === PixelFormat.RGB ||
|
|
147
|
-
pixelFormat === PixelFormat.LUMINANCE;
|
|
148
|
-
const flipY = defaultValue(options.flipY, true);
|
|
149
|
-
const skipColorSpaceConversion = defaultValue(
|
|
150
|
-
options.skipColorSpaceConversion,
|
|
151
|
-
false
|
|
174
|
+
const internalFormat = PixelFormat.toInternalFormat(
|
|
175
|
+
pixelFormat,
|
|
176
|
+
pixelDatatype,
|
|
177
|
+
context
|
|
152
178
|
);
|
|
153
179
|
|
|
154
180
|
const gl = context._gl;
|
|
155
181
|
const textureTarget = gl.TEXTURE_CUBE_MAP;
|
|
156
182
|
const texture = gl.createTexture();
|
|
157
183
|
|
|
184
|
+
this._context = context;
|
|
185
|
+
this._textureFilterAnisotropic = context._textureFilterAnisotropic;
|
|
186
|
+
this._textureTarget = textureTarget;
|
|
187
|
+
this._texture = texture;
|
|
188
|
+
this._pixelFormat = pixelFormat;
|
|
189
|
+
this._pixelDatatype = pixelDatatype;
|
|
190
|
+
this._size = size;
|
|
191
|
+
this._hasMipmap = false;
|
|
192
|
+
this._sizeInBytes = sizeInBytes;
|
|
193
|
+
this._preMultiplyAlpha = preMultiplyAlpha;
|
|
194
|
+
this._flipY = flipY;
|
|
195
|
+
|
|
196
|
+
const initialized = defined(source);
|
|
197
|
+
function constructFace(targetFace) {
|
|
198
|
+
return new CubeMapFace(
|
|
199
|
+
context,
|
|
200
|
+
texture,
|
|
201
|
+
textureTarget,
|
|
202
|
+
targetFace,
|
|
203
|
+
internalFormat,
|
|
204
|
+
pixelFormat,
|
|
205
|
+
pixelDatatype,
|
|
206
|
+
size,
|
|
207
|
+
preMultiplyAlpha,
|
|
208
|
+
flipY,
|
|
209
|
+
initialized
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
this._positiveX = constructFace(gl.TEXTURE_CUBE_MAP_POSITIVE_X);
|
|
213
|
+
this._negativeX = constructFace(gl.TEXTURE_CUBE_MAP_NEGATIVE_X);
|
|
214
|
+
this._positiveY = constructFace(gl.TEXTURE_CUBE_MAP_POSITIVE_Y);
|
|
215
|
+
this._negativeY = constructFace(gl.TEXTURE_CUBE_MAP_NEGATIVE_Y);
|
|
216
|
+
this._positiveZ = constructFace(gl.TEXTURE_CUBE_MAP_POSITIVE_Z);
|
|
217
|
+
this._negativeZ = constructFace(gl.TEXTURE_CUBE_MAP_NEGATIVE_Z);
|
|
218
|
+
|
|
219
|
+
this._sampler = sampler;
|
|
220
|
+
setupSampler(this, sampler);
|
|
221
|
+
|
|
158
222
|
gl.activeTexture(gl.TEXTURE0);
|
|
159
223
|
gl.bindTexture(textureTarget, texture);
|
|
160
224
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
if (!defined(arrayBufferView)) {
|
|
170
|
-
arrayBufferView = sourceFace.bufferView;
|
|
171
|
-
}
|
|
225
|
+
if (skipColorSpaceConversion) {
|
|
226
|
+
gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);
|
|
227
|
+
} else {
|
|
228
|
+
gl.pixelStorei(
|
|
229
|
+
gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,
|
|
230
|
+
gl.BROWSER_DEFAULT_WEBGL
|
|
231
|
+
);
|
|
232
|
+
}
|
|
172
233
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
pixelFormat,
|
|
177
|
-
pixelDatatype,
|
|
178
|
-
width
|
|
179
|
-
);
|
|
180
|
-
}
|
|
234
|
+
for (const faceName of CubeMap.getFaceNames()) {
|
|
235
|
+
loadFace(this[faceName], source?.[faceName], 0);
|
|
236
|
+
}
|
|
181
237
|
|
|
182
|
-
|
|
238
|
+
gl.bindTexture(textureTarget, null);
|
|
239
|
+
}
|
|
183
240
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
241
|
+
/**
|
|
242
|
+
* An enum defining the names of the faces of a cube map.
|
|
243
|
+
*
|
|
244
|
+
* @alias {CubeMap.FaceName}
|
|
245
|
+
* @enum {string}
|
|
246
|
+
*
|
|
247
|
+
* @private
|
|
248
|
+
*/
|
|
249
|
+
CubeMap.FaceName = Object.freeze({
|
|
250
|
+
POSITIVEX: "positiveX",
|
|
251
|
+
NEGATIVEX: "negativeX",
|
|
252
|
+
POSITIVEY: "positiveY",
|
|
253
|
+
NEGATIVEY: "negativeY",
|
|
254
|
+
POSITIVEZ: "positiveZ",
|
|
255
|
+
NEGATIVEZ: "negativeZ",
|
|
256
|
+
});
|
|
192
257
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
pixelDatatype,
|
|
202
|
-
size,
|
|
203
|
-
size
|
|
204
|
-
);
|
|
205
|
-
}
|
|
206
|
-
gl.texImage2D(
|
|
207
|
-
target,
|
|
208
|
-
0,
|
|
209
|
-
internalFormat,
|
|
210
|
-
size,
|
|
211
|
-
size,
|
|
212
|
-
0,
|
|
213
|
-
pixelFormat,
|
|
214
|
-
PixelDatatype.toWebGLConstant(pixelDatatype, context),
|
|
215
|
-
arrayBufferView
|
|
216
|
-
);
|
|
217
|
-
} else {
|
|
218
|
-
// Only valid for DOM-Element uploads
|
|
219
|
-
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, preMultiplyAlpha);
|
|
220
|
-
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);
|
|
221
|
-
|
|
222
|
-
// Source: ImageData, HTMLImageElement, HTMLCanvasElement, or HTMLVideoElement
|
|
223
|
-
gl.texImage2D(
|
|
224
|
-
target,
|
|
225
|
-
0,
|
|
226
|
-
internalFormat,
|
|
227
|
-
pixelFormat,
|
|
228
|
-
PixelDatatype.toWebGLConstant(pixelDatatype, context),
|
|
229
|
-
sourceFace
|
|
230
|
-
);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
258
|
+
function* makeFacesIterator() {
|
|
259
|
+
yield CubeMap.FaceName.POSITIVEX;
|
|
260
|
+
yield CubeMap.FaceName.NEGATIVEX;
|
|
261
|
+
yield CubeMap.FaceName.POSITIVEY;
|
|
262
|
+
yield CubeMap.FaceName.NEGATIVEY;
|
|
263
|
+
yield CubeMap.FaceName.POSITIVEZ;
|
|
264
|
+
yield CubeMap.FaceName.NEGATIVEZ;
|
|
265
|
+
}
|
|
233
266
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
flipY,
|
|
268
|
-
skipColorSpaceConversion
|
|
269
|
-
);
|
|
270
|
-
createFace(
|
|
271
|
-
gl.TEXTURE_CUBE_MAP_NEGATIVE_Z,
|
|
272
|
-
source.negativeZ,
|
|
273
|
-
preMultiplyAlpha,
|
|
274
|
-
flipY,
|
|
275
|
-
skipColorSpaceConversion
|
|
276
|
-
);
|
|
277
|
-
} else {
|
|
278
|
-
gl.texImage2D(
|
|
279
|
-
gl.TEXTURE_CUBE_MAP_POSITIVE_X,
|
|
280
|
-
0,
|
|
281
|
-
internalFormat,
|
|
282
|
-
size,
|
|
283
|
-
size,
|
|
284
|
-
0,
|
|
285
|
-
pixelFormat,
|
|
286
|
-
PixelDatatype.toWebGLConstant(pixelDatatype, context),
|
|
287
|
-
null
|
|
288
|
-
);
|
|
289
|
-
gl.texImage2D(
|
|
290
|
-
gl.TEXTURE_CUBE_MAP_NEGATIVE_X,
|
|
291
|
-
0,
|
|
292
|
-
internalFormat,
|
|
293
|
-
size,
|
|
294
|
-
size,
|
|
295
|
-
0,
|
|
296
|
-
pixelFormat,
|
|
297
|
-
PixelDatatype.toWebGLConstant(pixelDatatype, context),
|
|
298
|
-
null
|
|
299
|
-
);
|
|
267
|
+
/**
|
|
268
|
+
* Creates an iterator for looping over the cubemap faces.
|
|
269
|
+
*
|
|
270
|
+
* @type {Iterable<CubeMap.FaceName>}
|
|
271
|
+
*
|
|
272
|
+
* @private
|
|
273
|
+
*/
|
|
274
|
+
CubeMap.getFaceNames = function () {
|
|
275
|
+
return makeFacesIterator();
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Load texel data into one face of a cube map.
|
|
280
|
+
*
|
|
281
|
+
* @param {CubeMapFace} cubeMapFace The face to which texel values will be loaded.
|
|
282
|
+
* @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|CubeMap.BufferSource} [source] The source for texel values to be loaded into the texture.
|
|
283
|
+
* @param {number} [mipLevel=0] The mip level to which the texel values will be loaded.
|
|
284
|
+
*
|
|
285
|
+
* @private
|
|
286
|
+
*/
|
|
287
|
+
function loadFace(cubeMapFace, source, mipLevel) {
|
|
288
|
+
mipLevel = defaultValue(mipLevel, 0);
|
|
289
|
+
const targetFace = cubeMapFace._targetFace;
|
|
290
|
+
const size = Math.max(Math.floor(cubeMapFace._size / 2 ** mipLevel), 1);
|
|
291
|
+
const pixelFormat = cubeMapFace._pixelFormat;
|
|
292
|
+
const pixelDatatype = cubeMapFace._pixelDatatype;
|
|
293
|
+
const internalFormat = cubeMapFace._internalFormat;
|
|
294
|
+
const flipY = cubeMapFace._flipY;
|
|
295
|
+
const preMultiplyAlpha = cubeMapFace._preMultiplyAlpha;
|
|
296
|
+
const context = cubeMapFace._context;
|
|
297
|
+
const gl = context._gl;
|
|
298
|
+
|
|
299
|
+
if (!defined(source)) {
|
|
300
300
|
gl.texImage2D(
|
|
301
|
-
|
|
302
|
-
|
|
301
|
+
targetFace,
|
|
302
|
+
mipLevel,
|
|
303
303
|
internalFormat,
|
|
304
304
|
size,
|
|
305
305
|
size,
|
|
@@ -308,136 +308,57 @@ function CubeMap(options) {
|
|
|
308
308
|
PixelDatatype.toWebGLConstant(pixelDatatype, context),
|
|
309
309
|
null
|
|
310
310
|
);
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
let { arrayBufferView } = source;
|
|
315
|
+
|
|
316
|
+
let unpackAlignment = 4;
|
|
317
|
+
if (defined(arrayBufferView)) {
|
|
318
|
+
unpackAlignment = PixelFormat.alignmentInBytes(
|
|
318
319
|
pixelFormat,
|
|
319
|
-
|
|
320
|
-
|
|
320
|
+
pixelDatatype,
|
|
321
|
+
size
|
|
321
322
|
);
|
|
323
|
+
}
|
|
324
|
+
gl.pixelStorei(gl.UNPACK_ALIGNMENT, unpackAlignment);
|
|
325
|
+
|
|
326
|
+
if (defined(arrayBufferView)) {
|
|
327
|
+
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
|
|
328
|
+
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
|
|
329
|
+
if (flipY) {
|
|
330
|
+
arrayBufferView = PixelFormat.flipY(
|
|
331
|
+
arrayBufferView,
|
|
332
|
+
pixelFormat,
|
|
333
|
+
pixelDatatype,
|
|
334
|
+
size,
|
|
335
|
+
size
|
|
336
|
+
);
|
|
337
|
+
}
|
|
322
338
|
gl.texImage2D(
|
|
323
|
-
|
|
324
|
-
|
|
339
|
+
targetFace,
|
|
340
|
+
mipLevel,
|
|
325
341
|
internalFormat,
|
|
326
342
|
size,
|
|
327
343
|
size,
|
|
328
344
|
0,
|
|
329
345
|
pixelFormat,
|
|
330
346
|
PixelDatatype.toWebGLConstant(pixelDatatype, context),
|
|
331
|
-
|
|
347
|
+
arrayBufferView
|
|
332
348
|
);
|
|
349
|
+
} else {
|
|
350
|
+
// Only valid for DOM-Element uploads
|
|
351
|
+
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, preMultiplyAlpha);
|
|
352
|
+
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);
|
|
333
353
|
gl.texImage2D(
|
|
334
|
-
|
|
335
|
-
|
|
354
|
+
targetFace,
|
|
355
|
+
mipLevel,
|
|
336
356
|
internalFormat,
|
|
337
|
-
size,
|
|
338
|
-
size,
|
|
339
|
-
0,
|
|
340
357
|
pixelFormat,
|
|
341
358
|
PixelDatatype.toWebGLConstant(pixelDatatype, context),
|
|
342
|
-
|
|
359
|
+
source
|
|
343
360
|
);
|
|
344
361
|
}
|
|
345
|
-
gl.bindTexture(textureTarget, null);
|
|
346
|
-
|
|
347
|
-
this._context = context;
|
|
348
|
-
this._textureFilterAnisotropic = context._textureFilterAnisotropic;
|
|
349
|
-
this._textureTarget = textureTarget;
|
|
350
|
-
this._texture = texture;
|
|
351
|
-
this._pixelFormat = pixelFormat;
|
|
352
|
-
this._pixelDatatype = pixelDatatype;
|
|
353
|
-
this._size = size;
|
|
354
|
-
this._hasMipmap = false;
|
|
355
|
-
this._sizeInBytes = sizeInBytes;
|
|
356
|
-
this._preMultiplyAlpha = preMultiplyAlpha;
|
|
357
|
-
this._flipY = flipY;
|
|
358
|
-
this._sampler = undefined;
|
|
359
|
-
|
|
360
|
-
const initialized = defined(source);
|
|
361
|
-
this._positiveX = new CubeMapFace(
|
|
362
|
-
context,
|
|
363
|
-
texture,
|
|
364
|
-
textureTarget,
|
|
365
|
-
gl.TEXTURE_CUBE_MAP_POSITIVE_X,
|
|
366
|
-
internalFormat,
|
|
367
|
-
pixelFormat,
|
|
368
|
-
pixelDatatype,
|
|
369
|
-
size,
|
|
370
|
-
preMultiplyAlpha,
|
|
371
|
-
flipY,
|
|
372
|
-
initialized
|
|
373
|
-
);
|
|
374
|
-
this._negativeX = new CubeMapFace(
|
|
375
|
-
context,
|
|
376
|
-
texture,
|
|
377
|
-
textureTarget,
|
|
378
|
-
gl.TEXTURE_CUBE_MAP_NEGATIVE_X,
|
|
379
|
-
internalFormat,
|
|
380
|
-
pixelFormat,
|
|
381
|
-
pixelDatatype,
|
|
382
|
-
size,
|
|
383
|
-
preMultiplyAlpha,
|
|
384
|
-
flipY,
|
|
385
|
-
initialized
|
|
386
|
-
);
|
|
387
|
-
this._positiveY = new CubeMapFace(
|
|
388
|
-
context,
|
|
389
|
-
texture,
|
|
390
|
-
textureTarget,
|
|
391
|
-
gl.TEXTURE_CUBE_MAP_POSITIVE_Y,
|
|
392
|
-
internalFormat,
|
|
393
|
-
pixelFormat,
|
|
394
|
-
pixelDatatype,
|
|
395
|
-
size,
|
|
396
|
-
preMultiplyAlpha,
|
|
397
|
-
flipY,
|
|
398
|
-
initialized
|
|
399
|
-
);
|
|
400
|
-
this._negativeY = new CubeMapFace(
|
|
401
|
-
context,
|
|
402
|
-
texture,
|
|
403
|
-
textureTarget,
|
|
404
|
-
gl.TEXTURE_CUBE_MAP_NEGATIVE_Y,
|
|
405
|
-
internalFormat,
|
|
406
|
-
pixelFormat,
|
|
407
|
-
pixelDatatype,
|
|
408
|
-
size,
|
|
409
|
-
preMultiplyAlpha,
|
|
410
|
-
flipY,
|
|
411
|
-
initialized
|
|
412
|
-
);
|
|
413
|
-
this._positiveZ = new CubeMapFace(
|
|
414
|
-
context,
|
|
415
|
-
texture,
|
|
416
|
-
textureTarget,
|
|
417
|
-
gl.TEXTURE_CUBE_MAP_POSITIVE_Z,
|
|
418
|
-
internalFormat,
|
|
419
|
-
pixelFormat,
|
|
420
|
-
pixelDatatype,
|
|
421
|
-
size,
|
|
422
|
-
preMultiplyAlpha,
|
|
423
|
-
flipY,
|
|
424
|
-
initialized
|
|
425
|
-
);
|
|
426
|
-
this._negativeZ = new CubeMapFace(
|
|
427
|
-
context,
|
|
428
|
-
texture,
|
|
429
|
-
textureTarget,
|
|
430
|
-
gl.TEXTURE_CUBE_MAP_NEGATIVE_Z,
|
|
431
|
-
internalFormat,
|
|
432
|
-
pixelFormat,
|
|
433
|
-
pixelDatatype,
|
|
434
|
-
size,
|
|
435
|
-
preMultiplyAlpha,
|
|
436
|
-
flipY,
|
|
437
|
-
initialized
|
|
438
|
-
);
|
|
439
|
-
|
|
440
|
-
this.sampler = defined(options.sampler) ? options.sampler : new Sampler();
|
|
441
362
|
}
|
|
442
363
|
|
|
443
364
|
Object.defineProperties(CubeMap.prototype, {
|
|
@@ -476,52 +397,7 @@ Object.defineProperties(CubeMap.prototype, {
|
|
|
476
397
|
return this._sampler;
|
|
477
398
|
},
|
|
478
399
|
set: function (sampler) {
|
|
479
|
-
|
|
480
|
-
let magnificationFilter = sampler.magnificationFilter;
|
|
481
|
-
|
|
482
|
-
const mipmap =
|
|
483
|
-
minificationFilter ===
|
|
484
|
-
TextureMinificationFilter.NEAREST_MIPMAP_NEAREST ||
|
|
485
|
-
minificationFilter ===
|
|
486
|
-
TextureMinificationFilter.NEAREST_MIPMAP_LINEAR ||
|
|
487
|
-
minificationFilter ===
|
|
488
|
-
TextureMinificationFilter.LINEAR_MIPMAP_NEAREST ||
|
|
489
|
-
minificationFilter === TextureMinificationFilter.LINEAR_MIPMAP_LINEAR;
|
|
490
|
-
|
|
491
|
-
const context = this._context;
|
|
492
|
-
const pixelDatatype = this._pixelDatatype;
|
|
493
|
-
|
|
494
|
-
// float textures only support nearest filtering unless the linear extensions are supported, so override the sampler's settings
|
|
495
|
-
if (
|
|
496
|
-
(pixelDatatype === PixelDatatype.FLOAT &&
|
|
497
|
-
!context.textureFloatLinear) ||
|
|
498
|
-
(pixelDatatype === PixelDatatype.HALF_FLOAT &&
|
|
499
|
-
!context.textureHalfFloatLinear)
|
|
500
|
-
) {
|
|
501
|
-
minificationFilter = mipmap
|
|
502
|
-
? TextureMinificationFilter.NEAREST_MIPMAP_NEAREST
|
|
503
|
-
: TextureMinificationFilter.NEAREST;
|
|
504
|
-
magnificationFilter = TextureMagnificationFilter.NEAREST;
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
const gl = context._gl;
|
|
508
|
-
const target = this._textureTarget;
|
|
509
|
-
|
|
510
|
-
gl.activeTexture(gl.TEXTURE0);
|
|
511
|
-
gl.bindTexture(target, this._texture);
|
|
512
|
-
gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, minificationFilter);
|
|
513
|
-
gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, magnificationFilter);
|
|
514
|
-
gl.texParameteri(target, gl.TEXTURE_WRAP_S, sampler.wrapS);
|
|
515
|
-
gl.texParameteri(target, gl.TEXTURE_WRAP_T, sampler.wrapT);
|
|
516
|
-
if (defined(this._textureFilterAnisotropic)) {
|
|
517
|
-
gl.texParameteri(
|
|
518
|
-
target,
|
|
519
|
-
this._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,
|
|
520
|
-
sampler.maximumAnisotropy
|
|
521
|
-
);
|
|
522
|
-
}
|
|
523
|
-
gl.bindTexture(target, null);
|
|
524
|
-
|
|
400
|
+
setupSampler(this, sampler);
|
|
525
401
|
this._sampler = sampler;
|
|
526
402
|
},
|
|
527
403
|
},
|
|
@@ -571,6 +447,108 @@ Object.defineProperties(CubeMap.prototype, {
|
|
|
571
447
|
},
|
|
572
448
|
});
|
|
573
449
|
|
|
450
|
+
/**
|
|
451
|
+
* Set up a sampler for use with a cube map.
|
|
452
|
+
* @param {CubeMap} cubeMap The cube map containing the texture to be sampled by this sampler.
|
|
453
|
+
* @param {Sampler} sampler Information about how to sample the cubemap texture.
|
|
454
|
+
* @private
|
|
455
|
+
*/
|
|
456
|
+
function setupSampler(cubeMap, sampler) {
|
|
457
|
+
let { minificationFilter, magnificationFilter } = sampler;
|
|
458
|
+
|
|
459
|
+
const mipmap = [
|
|
460
|
+
TextureMinificationFilter.NEAREST_MIPMAP_NEAREST,
|
|
461
|
+
TextureMinificationFilter.NEAREST_MIPMAP_LINEAR,
|
|
462
|
+
TextureMinificationFilter.LINEAR_MIPMAP_NEAREST,
|
|
463
|
+
TextureMinificationFilter.LINEAR_MIPMAP_LINEAR,
|
|
464
|
+
].includes(minificationFilter);
|
|
465
|
+
|
|
466
|
+
const context = cubeMap._context;
|
|
467
|
+
const pixelDatatype = cubeMap._pixelDatatype;
|
|
468
|
+
|
|
469
|
+
// float textures only support nearest filtering unless the linear extensions are supported
|
|
470
|
+
if (
|
|
471
|
+
(pixelDatatype === PixelDatatype.FLOAT && !context.textureFloatLinear) ||
|
|
472
|
+
(pixelDatatype === PixelDatatype.HALF_FLOAT &&
|
|
473
|
+
!context.textureHalfFloatLinear)
|
|
474
|
+
) {
|
|
475
|
+
// override the sampler's settings
|
|
476
|
+
minificationFilter = mipmap
|
|
477
|
+
? TextureMinificationFilter.NEAREST_MIPMAP_NEAREST
|
|
478
|
+
: TextureMinificationFilter.NEAREST;
|
|
479
|
+
magnificationFilter = TextureMagnificationFilter.NEAREST;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
const gl = context._gl;
|
|
483
|
+
const target = cubeMap._textureTarget;
|
|
484
|
+
|
|
485
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
486
|
+
gl.bindTexture(target, cubeMap._texture);
|
|
487
|
+
gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, minificationFilter);
|
|
488
|
+
gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, magnificationFilter);
|
|
489
|
+
gl.texParameteri(target, gl.TEXTURE_WRAP_S, sampler.wrapS);
|
|
490
|
+
gl.texParameteri(target, gl.TEXTURE_WRAP_T, sampler.wrapT);
|
|
491
|
+
if (defined(cubeMap._textureFilterAnisotropic)) {
|
|
492
|
+
gl.texParameteri(
|
|
493
|
+
target,
|
|
494
|
+
cubeMap._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,
|
|
495
|
+
sampler.maximumAnisotropy
|
|
496
|
+
);
|
|
497
|
+
}
|
|
498
|
+
gl.bindTexture(target, null);
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* Load a complete mipmap chain for each cubemap face.
|
|
503
|
+
*
|
|
504
|
+
* @param {CubeMap.Source[]} source The source data for each mip level, beginning at level 1.
|
|
505
|
+
* @param {boolean} [skipColorSpaceConversion=false] If true, color space conversions will be skipped when reading the texel values.
|
|
506
|
+
*
|
|
507
|
+
* @private
|
|
508
|
+
*/
|
|
509
|
+
CubeMap.prototype.loadMipmaps = function (source, skipColorSpaceConversion) {
|
|
510
|
+
//>>includeStart('debug', pragmas.debug);
|
|
511
|
+
Check.defined("source", source);
|
|
512
|
+
if (!Array.isArray(source)) {
|
|
513
|
+
throw new DeveloperError(`source must be an array`);
|
|
514
|
+
}
|
|
515
|
+
const mipCount = Math.log2(this._size);
|
|
516
|
+
if (source.length !== mipCount) {
|
|
517
|
+
throw new DeveloperError(`all mip levels must be defined`);
|
|
518
|
+
}
|
|
519
|
+
//>>includeEnd('debug');
|
|
520
|
+
|
|
521
|
+
skipColorSpaceConversion = defaultValue(skipColorSpaceConversion, false);
|
|
522
|
+
const gl = this._context._gl;
|
|
523
|
+
const texture = this._texture;
|
|
524
|
+
const textureTarget = this._textureTarget;
|
|
525
|
+
|
|
526
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
527
|
+
gl.bindTexture(textureTarget, texture);
|
|
528
|
+
|
|
529
|
+
if (skipColorSpaceConversion) {
|
|
530
|
+
gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);
|
|
531
|
+
} else {
|
|
532
|
+
gl.pixelStorei(
|
|
533
|
+
gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,
|
|
534
|
+
gl.BROWSER_DEFAULT_WEBGL
|
|
535
|
+
);
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
for (let i = 0; i < source.length; i++) {
|
|
539
|
+
const mipSource = source[i];
|
|
540
|
+
// mipLevel 0 was the base layer, already loaded when the CubeMap was constructed.
|
|
541
|
+
const mipLevel = i + 1;
|
|
542
|
+
for (const faceName of CubeMap.getFaceNames()) {
|
|
543
|
+
loadFace(this[faceName], mipSource[faceName], mipLevel);
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
gl.bindTexture(textureTarget, null);
|
|
548
|
+
|
|
549
|
+
this._hasMipmap = true;
|
|
550
|
+
};
|
|
551
|
+
|
|
574
552
|
/**
|
|
575
553
|
* Generates a complete mipmap chain for each cubemap face.
|
|
576
554
|
*
|