cesium 0.22.0 → 0.23.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/Cesium.js +5 -2
  3. data/app/assets/javascripts/Core/Cartesian2.js +58 -0
  4. data/app/assets/javascripts/Core/Cartesian3.js +67 -7
  5. data/app/assets/javascripts/Core/Cartesian4.js +63 -0
  6. data/app/assets/javascripts/Core/CatmullRomSpline.js +183 -163
  7. data/app/assets/javascripts/Core/CorridorGeometry.js +2 -2
  8. data/app/assets/javascripts/Core/Ellipsoid.js +16 -0
  9. data/app/assets/javascripts/Core/ExtentGeometry.js +9 -2
  10. data/app/assets/javascripts/Core/ExtentOutlineGeometry.js +2 -2
  11. data/app/assets/javascripts/Core/GeometryPipeline.js +23 -23
  12. data/app/assets/javascripts/Core/HermiteSpline.js +260 -155
  13. data/app/assets/javascripts/Core/IndexDatatype.js +43 -34
  14. data/app/assets/javascripts/Core/LinearSpline.js +118 -0
  15. data/app/assets/javascripts/Core/Math.js +34 -3
  16. data/app/assets/javascripts/Core/Matrix2.js +26 -0
  17. data/app/assets/javascripts/Core/Matrix3.js +98 -0
  18. data/app/assets/javascripts/Core/Matrix4.js +42 -0
  19. data/app/assets/javascripts/Core/ObjectOrientedBoundingBox.js +396 -0
  20. data/app/assets/javascripts/Core/PolygonGeometry.js +87 -47
  21. data/app/assets/javascripts/Core/PolygonGeometryLibrary.js +20 -17
  22. data/app/assets/javascripts/Core/PolygonOutlineGeometry.js +68 -40
  23. data/app/assets/javascripts/Core/PolygonPipeline.js +19 -9
  24. data/app/assets/javascripts/Core/PrimitiveType.js +33 -36
  25. data/app/assets/javascripts/Core/Quaternion.js +147 -1
  26. data/app/assets/javascripts/Core/QuaternionSpline.js +160 -0
  27. data/app/assets/javascripts/Core/Spline.js +121 -0
  28. data/app/assets/javascripts/Core/Transforms.js +0 -2
  29. data/app/assets/javascripts/Core/loadArrayBuffer.js +5 -1
  30. data/app/assets/javascripts/Core/loadBlob.js +5 -1
  31. data/app/assets/javascripts/Core/loadText.js +4 -1
  32. data/app/assets/javascripts/Core/loadWithXhr.js +30 -14
  33. data/app/assets/javascripts/DynamicScene/PolylineOutlineMaterialProperty.js +2 -2
  34. data/app/assets/javascripts/Renderer/AutomaticUniforms.js +41 -41
  35. data/app/assets/javascripts/Renderer/Context.js +171 -201
  36. data/app/assets/javascripts/Renderer/CubeMapFace.js +2 -2
  37. data/app/assets/javascripts/Renderer/DrawCommand.js +2 -2
  38. data/app/assets/javascripts/Renderer/PixelFormat.js +22 -28
  39. data/app/assets/javascripts/Renderer/ShaderProgram.js +65 -46
  40. data/app/assets/javascripts/Renderer/Texture.js +1 -1
  41. data/app/assets/javascripts/Renderer/TextureMagnificationFilter.js +7 -9
  42. data/app/assets/javascripts/Renderer/TextureMinificationFilter.js +19 -25
  43. data/app/assets/javascripts/Renderer/TextureWrap.js +11 -13
  44. data/app/assets/javascripts/Renderer/UniformDatatype.js +29 -29
  45. data/app/assets/javascripts/Renderer/VertexArray.js +43 -35
  46. data/app/assets/javascripts/Scene/ArcGisMapServerImageryProvider.js +1 -2
  47. data/app/assets/javascripts/Scene/BillboardCollection.js +10 -1
  48. data/app/assets/javascripts/Scene/CameraFlightPath.js +58 -101
  49. data/app/assets/javascripts/Scene/CentralBody.js +1 -4
  50. data/app/assets/javascripts/Scene/CentralBodySurface.js +1 -2
  51. data/app/assets/javascripts/Scene/CesiumTerrainProvider.js +1 -2
  52. data/app/assets/javascripts/Scene/CustomSensorVolume.js +17 -3
  53. data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +20 -5
  54. data/app/assets/javascripts/Scene/EllipsoidSurfaceAppearance.js +1 -2
  55. data/app/assets/javascripts/Scene/FrameState.js +1 -3
  56. data/app/assets/javascripts/Scene/GoogleEarthImageryProvider.js +2 -5
  57. data/app/assets/javascripts/Scene/OpenStreetMapImageryProvider.js +1 -2
  58. data/app/assets/javascripts/Scene/OrthographicFrustum.js +1 -2
  59. data/app/assets/javascripts/Scene/PerspectiveOffCenterFrustum.js +1 -2
  60. data/app/assets/javascripts/Scene/Polygon.js +1 -3
  61. data/app/assets/javascripts/Scene/Polyline.js +5 -2
  62. data/app/assets/javascripts/Scene/PolylineCollection.js +4 -6
  63. data/app/assets/javascripts/Scene/Primitive.js +19 -13
  64. data/app/assets/javascripts/Scene/PrimitivePipeline.js +1 -1
  65. data/app/assets/javascripts/Scene/Scene.js +7 -10
  66. data/app/assets/javascripts/Scene/SceneTransforms.js +1 -3
  67. data/app/assets/javascripts/Scene/SceneTransitioner.js +11 -11
  68. data/app/assets/javascripts/Scene/SingleTileImageryProvider.js +1 -2
  69. data/app/assets/javascripts/Scene/TexturePool.js +1 -1
  70. data/app/assets/javascripts/Scene/TileMapServiceImageryProvider.js +1 -2
  71. data/app/assets/javascripts/Scene/VRTheWorldTerrainProvider.js +1 -2
  72. data/app/assets/javascripts/Scene/ViewportQuad.js +1 -3
  73. data/app/assets/javascripts/Scene/WebMapServiceImageryProvider.js +1 -2
  74. data/app/assets/javascripts/ThirdParty/knockout-3.0.0.js +6 -3
  75. data/app/assets/javascripts/Widgets/CesiumWidget/CesiumWidget.js +4 -3
  76. data/app/assets/javascripts/Widgets/SceneModePicker/SceneModePickerViewModel.js +1 -1
  77. data/app/assets/javascripts/Widgets/Viewer/Viewer.js +5 -5
  78. data/app/assets/javascripts/Widgets/Viewer/viewerDragDropMixin.js +13 -13
  79. data/app/assets/javascripts/Widgets/Viewer/viewerDynamicObjectMixin.js +6 -6
  80. data/app/assets/javascripts/Widgets/widgets.css +1 -1
  81. data/lib/cesium/version.rb +1 -1
  82. metadata +6 -3
  83. data/app/assets/javascripts/Core/OrientationInterpolator.js +0 -106
@@ -229,8 +229,6 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
229
229
  this._defaultCubeMap = undefined;
230
230
 
231
231
  this._us = us;
232
- this._currentFramebuffer = undefined;
233
- this._currentSp = undefined;
234
232
  this._currentRenderState = rs;
235
233
  this._maxFrameTextureUnitIndex = 0;
236
234
 
@@ -1138,11 +1136,11 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
1138
1136
  throw new DeveloperError('Invalid indexDatatype.');
1139
1137
  }
1140
1138
 
1141
- if ((indexDatatype.value === IndexDatatype.UNSIGNED_INT.value) && !this.getElementIndexUint()) {
1139
+ if ((indexDatatype === IndexDatatype.UNSIGNED_INT) && !this.getElementIndexUint()) {
1142
1140
  throw new RuntimeError('IndexDatatype.UNSIGNED_INT requires OES_element_index_uint, which is not supported on this system.');
1143
1141
  }
1144
1142
 
1145
- var bytesPerIndex = indexDatatype.sizeInBytes;
1143
+ var bytesPerIndex = IndexDatatype.getSizeInBytes(indexDatatype);
1146
1144
 
1147
1145
  var gl = this._gl;
1148
1146
  var buffer = createBuffer(gl, gl.ELEMENT_ARRAY_BUFFER, typedArrayOrSizeInBytes, usage);
@@ -1256,41 +1254,41 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
1256
1254
  /**
1257
1255
  * DOC_TBA.
1258
1256
  *
1259
- * description.source can be {ImageData}, {HTMLImageElement}, {HTMLCanvasElement}, or {HTMLVideoElement}.
1257
+ * options.source can be {ImageData}, {HTMLImageElement}, {HTMLCanvasElement}, or {HTMLVideoElement}.
1260
1258
  *
1261
1259
  * @memberof Context
1262
1260
  *
1263
1261
  * @returns {Texture} DOC_TBA.
1264
1262
  *
1265
- * @exception {RuntimeError} When description.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, this WebGL implementation must support WEBGL_depth_texture.
1266
- * @exception {RuntimeError} When description.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension.
1267
- * @exception {DeveloperError} description is required.
1268
- * @exception {DeveloperError} description requires a source field to create an initialized texture or width and height fields to create a blank texture.
1263
+ * @exception {RuntimeError} When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, this WebGL implementation must support WEBGL_depth_texture.
1264
+ * @exception {RuntimeError} When options.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension.
1265
+ * @exception {DeveloperError} options is required.
1266
+ * @exception {DeveloperError} options requires a source field to create an initialized texture or width and height fields to create a blank texture.
1269
1267
  * @exception {DeveloperError} Width must be greater than zero.
1270
1268
  * @exception {DeveloperError} Width must be less than or equal to the maximum texture size.
1271
1269
  * @exception {DeveloperError} Height must be greater than zero.
1272
1270
  * @exception {DeveloperError} Height must be less than or equal to the maximum texture size.
1273
- * @exception {DeveloperError} Invalid description.pixelFormat.
1274
- * @exception {DeveloperError} Invalid description.pixelDatatype.
1275
- * @exception {DeveloperError} When description.pixelFormat is DEPTH_COMPONENT, description.pixelDatatype must be UNSIGNED_SHORT or UNSIGNED_INT.
1276
- * @exception {DeveloperError} When description.pixelFormat is DEPTH_STENCIL, description.pixelDatatype must be UNSIGNED_INT_24_8_WEBGL.
1277
- * @exception {DeveloperError} When description.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, source cannot be provided.
1271
+ * @exception {DeveloperError} Invalid options.pixelFormat.
1272
+ * @exception {DeveloperError} Invalid options.pixelDatatype.
1273
+ * @exception {DeveloperError} When options.pixelFormat is DEPTH_COMPONENT, options.pixelDatatype must be UNSIGNED_SHORT or UNSIGNED_INT.
1274
+ * @exception {DeveloperError} When options.pixelFormat is DEPTH_STENCIL, options.pixelDatatype must be UNSIGNED_INT_24_8_WEBGL.
1275
+ * @exception {DeveloperError} When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, source cannot be provided.
1278
1276
  *
1279
1277
  * @see Context#createTexture2DFromFramebuffer
1280
1278
  * @see Context#createCubeMap
1281
1279
  * @see Context#createSampler
1282
1280
  */
1283
- Context.prototype.createTexture2D = function(description) {
1284
- if (!description) {
1285
- throw new DeveloperError('description is required.');
1281
+ Context.prototype.createTexture2D = function(options) {
1282
+ if (!defined(options)) {
1283
+ throw new DeveloperError('options is required.');
1286
1284
  }
1287
1285
 
1288
- var source = description.source;
1289
- var width = defined(source) ? source.width : description.width;
1290
- var height = defined(source) ? source.height : description.height;
1286
+ var source = options.source;
1287
+ var width = defined(source) ? source.width : options.width;
1288
+ var height = defined(source) ? source.height : options.height;
1291
1289
 
1292
1290
  if (!defined(width) || !defined(height)) {
1293
- throw new DeveloperError('description requires a source field to create an initialized texture or width and height fields to create a blank texture.');
1291
+ throw new DeveloperError('options requires a source field to create an initialized texture or width and height fields to create a blank texture.');
1294
1292
  }
1295
1293
 
1296
1294
  if (width <= 0) {
@@ -1309,43 +1307,43 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
1309
1307
  throw new DeveloperError('Height must be less than or equal to the maximum texture size (' + this._maximumTextureSize + '). Check getMaximumTextureSize().');
1310
1308
  }
1311
1309
 
1312
- var pixelFormat = defaultValue(description.pixelFormat, PixelFormat.RGBA);
1310
+ var pixelFormat = defaultValue(options.pixelFormat, PixelFormat.RGBA);
1313
1311
  if (!PixelFormat.validate(pixelFormat)) {
1314
- throw new DeveloperError('Invalid description.pixelFormat.');
1312
+ throw new DeveloperError('Invalid options.pixelFormat.');
1315
1313
  }
1316
1314
 
1317
- var pixelDatatype = defaultValue(description.pixelDatatype, PixelDatatype.UNSIGNED_BYTE);
1315
+ var pixelDatatype = defaultValue(options.pixelDatatype, PixelDatatype.UNSIGNED_BYTE);
1318
1316
  if (!PixelDatatype.validate(pixelDatatype)) {
1319
- throw new DeveloperError('Invalid description.pixelDatatype.');
1317
+ throw new DeveloperError('Invalid options.pixelDatatype.');
1320
1318
  }
1321
1319
 
1322
1320
  if ((pixelDatatype === PixelDatatype.FLOAT) && !this.getFloatingPointTexture()) {
1323
- throw new RuntimeError('When description.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension.');
1321
+ throw new RuntimeError('When options.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension.');
1324
1322
  }
1325
1323
 
1326
1324
  if ((pixelFormat === PixelFormat.DEPTH_COMPONENT) &&
1327
1325
  ((pixelDatatype !== PixelDatatype.UNSIGNED_SHORT) && (pixelDatatype !== PixelDatatype.UNSIGNED_INT))) {
1328
- throw new DeveloperError('When description.pixelFormat is DEPTH_COMPONENT, description.pixelDatatype must be UNSIGNED_SHORT or UNSIGNED_INT.');
1326
+ throw new DeveloperError('When options.pixelFormat is DEPTH_COMPONENT, options.pixelDatatype must be UNSIGNED_SHORT or UNSIGNED_INT.');
1329
1327
  }
1330
1328
 
1331
1329
  if ((pixelFormat === PixelFormat.DEPTH_STENCIL) && (pixelDatatype !== PixelDatatype.UNSIGNED_INT_24_8_WEBGL)) {
1332
- throw new DeveloperError('When description.pixelFormat is DEPTH_STENCIL, description.pixelDatatype must be UNSIGNED_INT_24_8_WEBGL.');
1330
+ throw new DeveloperError('When options.pixelFormat is DEPTH_STENCIL, options.pixelDatatype must be UNSIGNED_INT_24_8_WEBGL.');
1333
1331
  }
1334
1332
 
1335
1333
  if (PixelFormat.isDepthFormat(pixelFormat)) {
1336
- if (source) {
1337
- throw new DeveloperError('When description.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, source cannot be provided.');
1334
+ if (defined(source)) {
1335
+ throw new DeveloperError('When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, source cannot be provided.');
1338
1336
  }
1339
1337
 
1340
1338
  if (!this.getDepthTexture()) {
1341
- throw new RuntimeError('When description.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, this WebGL implementation must support WEBGL_depth_texture. Check getDepthTexture().');
1339
+ throw new RuntimeError('When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, this WebGL implementation must support WEBGL_depth_texture. Check getDepthTexture().');
1342
1340
  }
1343
1341
  }
1344
1342
 
1345
1343
  // Use premultiplied alpha for opaque textures should perform better on Chrome:
1346
1344
  // http://media.tojicode.com/webglCamp4/#20
1347
- var preMultiplyAlpha = description.preMultiplyAlpha || pixelFormat === PixelFormat.RGB || pixelFormat === PixelFormat.LUMINANCE;
1348
- var flipY = defaultValue(description.flipY, true);
1345
+ var preMultiplyAlpha = options.preMultiplyAlpha || pixelFormat === PixelFormat.RGB || pixelFormat === PixelFormat.LUMINANCE;
1346
+ var flipY = defaultValue(options.flipY, true);
1349
1347
 
1350
1348
  var gl = this._gl;
1351
1349
  var textureTarget = gl.TEXTURE_2D;
@@ -1354,12 +1352,12 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
1354
1352
  gl.activeTexture(gl.TEXTURE0);
1355
1353
  gl.bindTexture(textureTarget, texture);
1356
1354
 
1357
- if (source) {
1355
+ if (defined(source)) {
1358
1356
  // TODO: _gl.pixelStorei(_gl._UNPACK_ALIGNMENT, 4);
1359
1357
  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, preMultiplyAlpha);
1360
1358
  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);
1361
1359
 
1362
- if (source.arrayBufferView) {
1360
+ if (defined(source.arrayBufferView)) {
1363
1361
  // Source: typed array
1364
1362
  gl.texImage2D(textureTarget, 0, pixelFormat, width, height, 0, pixelFormat, pixelDatatype, source.arrayBufferView);
1365
1363
  } else {
@@ -1452,61 +1450,61 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
1452
1450
  *
1453
1451
  * @memberof Context
1454
1452
  *
1455
- * @param {PixelFormat} [description.pixelFormat = PixelFormat.RGBA] The pixel format of the texture.
1456
- * @param {Number} [description.borderWidthInPixels = 1] The amount of spacing between adjacent images in pixels.
1457
- * @param {Cartesian2} [description.initialSize = new Cartesian2(16.0, 16.0)] The initial side lengths of the texture.
1458
- * @param {Array} [description.images=undefined] Array of {@link Image} to be added to the atlas. Same as calling addImages(images).
1459
- * @param {Image} [description.image=undefined] Single image to be added to the atlas. Same as calling addImage(image).
1453
+ * @param {PixelFormat} [options.pixelFormat = PixelFormat.RGBA] The pixel format of the texture.
1454
+ * @param {Number} [options.borderWidthInPixels = 1] The amount of spacing between adjacent images in pixels.
1455
+ * @param {Cartesian2} [options.initialSize = new Cartesian2(16.0, 16.0)] The initial side lengths of the texture.
1456
+ * @param {Array} [options.images=undefined] Array of {@link Image} to be added to the atlas. Same as calling addImages(images).
1457
+ * @param {Image} [options.image=undefined] Single image to be added to the atlas. Same as calling addImage(image).
1460
1458
  *
1461
1459
  * @returns {TextureAtlas} The new texture atlas.
1462
1460
  *
1463
1461
  * @see TextureAtlas
1464
1462
  */
1465
- Context.prototype.createTextureAtlas = function(description) {
1466
- description = description || {};
1467
- description.context = this;
1468
- return new TextureAtlas(description);
1463
+ Context.prototype.createTextureAtlas = function(options) {
1464
+ options = defaultValue(options, {});
1465
+ options.context = this;
1466
+ return new TextureAtlas(options);
1469
1467
  };
1470
1468
 
1471
1469
  /**
1472
1470
  * DOC_TBA.
1473
1471
  *
1474
- * description.source can be {ImageData}, {HTMLImageElement}, {HTMLCanvasElement}, or {HTMLVideoElement}.
1472
+ * options.source can be {ImageData}, {HTMLImageElement}, {HTMLCanvasElement}, or {HTMLVideoElement}.
1475
1473
  *
1476
1474
  * @memberof Context
1477
1475
  *
1478
1476
  * @returns {CubeMap} DOC_TBA.
1479
1477
  *
1480
- * @exception {RuntimeError} When description.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension.
1481
- * @exception {DeveloperError} description is required.
1482
- * @exception {DeveloperError} description.source requires positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ faces.
1483
- * @exception {DeveloperError} Each face in description.sources must have the same width and height.
1484
- * @exception {DeveloperError} description requires a source field to create an initialized cube map or width and height fields to create a blank cube map.
1478
+ * @exception {RuntimeError} When options.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension.
1479
+ * @exception {DeveloperError} options is required.
1480
+ * @exception {DeveloperError} options.source requires positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ faces.
1481
+ * @exception {DeveloperError} Each face in options.sources must have the same width and height.
1482
+ * @exception {DeveloperError} options requires a source field to create an initialized cube map or width and height fields to create a blank cube map.
1485
1483
  * @exception {DeveloperError} Width must equal height.
1486
1484
  * @exception {DeveloperError} Width and height must be greater than zero.
1487
1485
  * @exception {DeveloperError} Width and height must be less than or equal to the maximum cube map size.
1488
- * @exception {DeveloperError} Invalid description.pixelFormat.
1489
- * @exception {DeveloperError} description.pixelFormat cannot be DEPTH_COMPONENT or DEPTH_STENCIL.
1490
- * @exception {DeveloperError} Invalid description.pixelDatatype.
1486
+ * @exception {DeveloperError} Invalid options.pixelFormat.
1487
+ * @exception {DeveloperError} options.pixelFormat cannot be DEPTH_COMPONENT or DEPTH_STENCIL.
1488
+ * @exception {DeveloperError} Invalid options.pixelDatatype.
1491
1489
  *
1492
1490
  * @see Context#createTexture2D
1493
1491
  * @see Context#createTexture2DFromFramebuffer
1494
1492
  * @see Context#createSampler
1495
1493
  */
1496
- Context.prototype.createCubeMap = function(description) {
1497
- if (!description) {
1498
- throw new DeveloperError('description is required.');
1494
+ Context.prototype.createCubeMap = function(options) {
1495
+ if (!defined(options)) {
1496
+ throw new DeveloperError('options is required.');
1499
1497
  }
1500
1498
 
1501
- var source = description.source;
1499
+ var source = options.source;
1502
1500
  var width;
1503
1501
  var height;
1504
1502
 
1505
- if (source) {
1503
+ if (defined(source)) {
1506
1504
  var faces = [source.positiveX, source.negativeX, source.positiveY, source.negativeY, source.positiveZ, source.negativeZ];
1507
1505
 
1508
1506
  if (!faces[0] || !faces[1] || !faces[2] || !faces[3] || !faces[4] || !faces[5]) {
1509
- throw new DeveloperError('description.source requires positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ faces.');
1507
+ throw new DeveloperError('options.source requires positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ faces.');
1510
1508
  }
1511
1509
 
1512
1510
  width = faces[0].width;
@@ -1514,16 +1512,16 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
1514
1512
 
1515
1513
  for ( var i = 1; i < 6; ++i) {
1516
1514
  if ((Number(faces[i].width) !== width) || (Number(faces[i].height) !== height)) {
1517
- throw new DeveloperError('Each face in description.source must have the same width and height.');
1515
+ throw new DeveloperError('Each face in options.source must have the same width and height.');
1518
1516
  }
1519
1517
  }
1520
1518
  } else {
1521
- width = description.width;
1522
- height = description.height;
1519
+ width = options.width;
1520
+ height = options.height;
1523
1521
  }
1524
1522
 
1525
1523
  if (!defined(width) || !defined(height)) {
1526
- throw new DeveloperError('description requires a source field to create an initialized cube map or width and height fields to create a blank cube map.');
1524
+ throw new DeveloperError('options requires a source field to create an initialized cube map or width and height fields to create a blank cube map.');
1527
1525
  }
1528
1526
 
1529
1527
  if (width !== height) {
@@ -1540,28 +1538,28 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
1540
1538
  throw new DeveloperError('Width and height must be less than or equal to the maximum cube map size (' + this._maximumCubeMapSize + '). Check getMaximumCubeMapSize().');
1541
1539
  }
1542
1540
 
1543
- var pixelFormat = defaultValue(description.pixelFormat, PixelFormat.RGBA);
1541
+ var pixelFormat = defaultValue(options.pixelFormat, PixelFormat.RGBA);
1544
1542
  if (!PixelFormat.validate(pixelFormat)) {
1545
- throw new DeveloperError('Invalid description.pixelFormat.');
1543
+ throw new DeveloperError('Invalid options.pixelFormat.');
1546
1544
  }
1547
1545
 
1548
1546
  if (PixelFormat.isDepthFormat(pixelFormat)) {
1549
- throw new DeveloperError('description.pixelFormat cannot be DEPTH_COMPONENT or DEPTH_STENCIL.');
1547
+ throw new DeveloperError('options.pixelFormat cannot be DEPTH_COMPONENT or DEPTH_STENCIL.');
1550
1548
  }
1551
1549
 
1552
- var pixelDatatype = defaultValue(description.pixelDatatype, PixelDatatype.UNSIGNED_BYTE);
1550
+ var pixelDatatype = defaultValue(options.pixelDatatype, PixelDatatype.UNSIGNED_BYTE);
1553
1551
  if (!PixelDatatype.validate(pixelDatatype)) {
1554
- throw new DeveloperError('Invalid description.pixelDatatype.');
1552
+ throw new DeveloperError('Invalid options.pixelDatatype.');
1555
1553
  }
1556
1554
 
1557
1555
  if ((pixelDatatype === PixelDatatype.FLOAT) && !this.getFloatingPointTexture()) {
1558
- throw new RuntimeError('When description.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension.');
1556
+ throw new RuntimeError('When options.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension.');
1559
1557
  }
1560
1558
 
1561
1559
  // Use premultiplied alpha for opaque textures should perform better on Chrome:
1562
1560
  // http://media.tojicode.com/webglCamp4/#20
1563
- var preMultiplyAlpha = description.preMultiplyAlpha || ((pixelFormat === PixelFormat.RGB) || (pixelFormat === PixelFormat.LUMINANCE));
1564
- var flipY = defaultValue(description.flipY, true);
1561
+ var preMultiplyAlpha = options.preMultiplyAlpha || ((pixelFormat === PixelFormat.RGB) || (pixelFormat === PixelFormat.LUMINANCE));
1562
+ var flipY = defaultValue(options.flipY, true);
1565
1563
 
1566
1564
  var gl = this._gl;
1567
1565
  var textureTarget = gl.TEXTURE_CUBE_MAP;
@@ -1578,7 +1576,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
1578
1576
  }
1579
1577
  }
1580
1578
 
1581
- if (source) {
1579
+ if (defined(source)) {
1582
1580
  // TODO: _gl.pixelStorei(_gl._UNPACK_ALIGNMENT, 4);
1583
1581
  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, preMultiplyAlpha);
1584
1582
  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);
@@ -1609,7 +1607,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
1609
1607
  *
1610
1608
  * @memberof Context
1611
1609
  *
1612
- * @param {Object} [description] The initial framebuffer attachments as shown in Example 2. The possible properties are <code>colorTexture</code>, <code>colorRenderbuffer</code>, <code>depthTexture</code>, <code>depthRenderbuffer</code>, <code>stencilRenderbuffer</code>, <code>depthStencilTexture</code>, and <code>depthStencilRenderbuffer</code>.
1610
+ * @param {Object} [options] The initial framebuffer attachments as shown in Example 2. The possible properties are <code>colorTexture</code>, <code>colorRenderbuffer</code>, <code>depthTexture</code>, <code>depthRenderbuffer</code>, <code>stencilRenderbuffer</code>, <code>depthStencilTexture</code>, and <code>depthStencilRenderbuffer</code>.
1613
1611
  *
1614
1612
  * @returns {Framebuffer} The created framebuffer.
1615
1613
  *
@@ -1655,8 +1653,8 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
1655
1653
  * })
1656
1654
  * });
1657
1655
  */
1658
- Context.prototype.createFramebuffer = function(description) {
1659
- return new Framebuffer(this._gl, description);
1656
+ Context.prototype.createFramebuffer = function(options) {
1657
+ return new Framebuffer(this._gl, options);
1660
1658
  };
1661
1659
 
1662
1660
  /**
@@ -1664,7 +1662,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
1664
1662
  *
1665
1663
  * @memberof Context
1666
1664
  *
1667
- * @param {Object} [description] DOC_TBA.
1665
+ * @param {Object} [options] DOC_TBA.
1668
1666
  *
1669
1667
  * @returns {createRenderbuffer} DOC_TBA.
1670
1668
  *
@@ -1676,13 +1674,13 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
1676
1674
  *
1677
1675
  * @see Context#createFramebuffer
1678
1676
  */
1679
- Context.prototype.createRenderbuffer = function(description) {
1677
+ Context.prototype.createRenderbuffer = function(options) {
1680
1678
  var gl = this._gl;
1681
1679
 
1682
- description = defaultValue(description, defaultValue.EMPTY_OBJECT);
1683
- var format = defaultValue(description.format, RenderbufferFormat.RGBA4);
1684
- var width = defined(description.width) ? description.width : gl.drawingBufferWidth;
1685
- var height = defined(description.height) ? description.height : gl.drawingBufferHeight;
1680
+ options = defaultValue(options, defaultValue.EMPTY_OBJECT);
1681
+ var format = defaultValue(options.format, RenderbufferFormat.RGBA4);
1682
+ var width = defined(options.width) ? options.width : gl.drawingBufferWidth;
1683
+ var height = defined(options.height) ? options.height : gl.drawingBufferHeight;
1686
1684
 
1687
1685
  if (!RenderbufferFormat.validate(format)) {
1688
1686
  throw new DeveloperError('Invalid format.');
@@ -1872,10 +1870,10 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
1872
1870
  */
1873
1871
  Context.prototype.createSampler = function(sampler) {
1874
1872
  var s = {
1875
- wrapS : sampler.wrapS || TextureWrap.CLAMP_TO_EDGE,
1876
- wrapT : sampler.wrapT || TextureWrap.CLAMP_TO_EDGE,
1877
- minificationFilter : sampler.minificationFilter || TextureMinificationFilter.LINEAR,
1878
- magnificationFilter : sampler.magnificationFilter || TextureMagnificationFilter.LINEAR,
1873
+ wrapS : defaultValue(sampler.wrapS, TextureWrap.CLAMP_TO_EDGE),
1874
+ wrapT : defaultValue(sampler.wrapT, TextureWrap.CLAMP_TO_EDGE),
1875
+ minificationFilter : defaultValue(sampler.minificationFilter, TextureMinificationFilter.LINEAR),
1876
+ magnificationFilter : defaultValue(sampler.magnificationFilter, TextureMagnificationFilter.LINEAR),
1879
1877
  maximumAnisotropy : (defined(sampler.maximumAnisotropy)) ? sampler.maximumAnisotropy : 1.0
1880
1878
  };
1881
1879
 
@@ -1902,9 +1900,9 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
1902
1900
  return s;
1903
1901
  };
1904
1902
 
1905
- Context.prototype._validateFramebuffer = function(framebuffer) {
1906
- if (this._validateFB) {
1907
- var gl = this._gl;
1903
+ function validateFramebuffer(context, framebuffer) {
1904
+ if (context._validateFB) {
1905
+ var gl = context._gl;
1908
1906
  var status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
1909
1907
 
1910
1908
  if (status !== gl.FRAMEBUFFER_COMPLETE) {
@@ -1928,7 +1926,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
1928
1926
  throw new DeveloperError(message);
1929
1927
  }
1930
1928
  }
1931
- };
1929
+ }
1932
1930
 
1933
1931
  function applyRenderState(context, renderState, passState) {
1934
1932
  var previousState = context._currentRenderState;
@@ -1996,7 +1994,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
1996
1994
 
1997
1995
  if (defined(framebuffer)) {
1998
1996
  framebuffer._bind();
1999
- this._validateFramebuffer(framebuffer);
1997
+ validateFramebuffer(this, framebuffer);
2000
1998
  }
2001
1999
 
2002
2000
  gl.clear(bitmask);
@@ -2006,6 +2004,78 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
2006
2004
  }
2007
2005
  };
2008
2006
 
2007
+ function beginDraw(context, framebuffer, drawCommand, passState) {
2008
+ var rs = defined(drawCommand.renderState) ? drawCommand.renderState : context._defaultRenderState;
2009
+
2010
+ if (defined(framebuffer) && rs.depthTest) {
2011
+ if (rs.depthTest.enabled && !framebuffer.hasDepthAttachment()) {
2012
+ throw new DeveloperError('The depth test can not be enabled (drawCommand.renderState.depthTest.enabled) because the framebuffer (drawCommand.framebuffer) does not have a depth or depth-stencil renderbuffer.');
2013
+ }
2014
+ }
2015
+
2016
+ ///////////////////////////////////////////////////////////////////////
2017
+
2018
+ if (defined(framebuffer)) {
2019
+ framebuffer._bind();
2020
+ validateFramebuffer(context, framebuffer);
2021
+ }
2022
+
2023
+ var sp = drawCommand.shaderProgram;
2024
+ sp._bind();
2025
+ context._maxFrameTextureUnitIndex = Math.max(context._maxFrameTextureUnitIndex, sp.maximumTextureUnitIndex);
2026
+
2027
+ applyRenderState(context, rs, passState);
2028
+ }
2029
+
2030
+ function continueDraw(context, drawCommand) {
2031
+ var primitiveType = drawCommand.primitiveType;
2032
+ var va = drawCommand.vertexArray;
2033
+ var offset = drawCommand.offset;
2034
+ var count = drawCommand.count;
2035
+
2036
+ if (!PrimitiveType.validate(primitiveType)) {
2037
+ throw new DeveloperError('drawCommand.primitiveType is required and must be valid.');
2038
+ }
2039
+
2040
+ if (!defined(va)) {
2041
+ throw new DeveloperError('drawCommand.vertexArray is required.');
2042
+ }
2043
+
2044
+ if (offset < 0) {
2045
+ throw new DeveloperError('drawCommand.offset must be omitted or greater than or equal to zero.');
2046
+ }
2047
+
2048
+ if (count < 0) {
2049
+ throw new DeveloperError('drawCommand.count must be omitted or greater than or equal to zero.');
2050
+ }
2051
+
2052
+ context._us.setModel(defaultValue(drawCommand.modelMatrix, Matrix4.IDENTITY));
2053
+ drawCommand.shaderProgram._setUniforms(drawCommand.uniformMap, context._us, context._validateSP);
2054
+
2055
+ var indexBuffer = va.getIndexBuffer();
2056
+
2057
+ if (defined(indexBuffer)) {
2058
+ offset = offset * indexBuffer.getBytesPerIndex(); // offset in vertices to offset in bytes
2059
+ count = defaultValue(count, indexBuffer.getNumberOfIndices());
2060
+
2061
+ va._bind();
2062
+ context._gl.drawElements(primitiveType, count, indexBuffer.getIndexDatatype(), offset);
2063
+ va._unBind();
2064
+ } else {
2065
+ count = defaultValue(count, va.numberOfVertices);
2066
+
2067
+ va._bind();
2068
+ context._gl.drawArrays(primitiveType, offset, count);
2069
+ va._unBind();
2070
+ }
2071
+ }
2072
+
2073
+ function endDraw(framebuffer) {
2074
+ if (defined(framebuffer)) {
2075
+ framebuffer._unBind();
2076
+ }
2077
+ }
2078
+
2009
2079
  /**
2010
2080
  * Executes the specified draw command.
2011
2081
  *
@@ -2021,6 +2091,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
2021
2091
  * @exception {DeveloperError} drawCommand.shaderProgram is required.
2022
2092
  * @exception {DeveloperError} drawCommand.vertexArray is required.
2023
2093
  * @exception {DeveloperError} drawCommand.offset must be omitted or greater than or equal to zero.
2094
+ * @exception {DeveloperError} drawCommand.count must be omitted or greater than or equal to zero.
2024
2095
  * @exception {DeveloperError} Program validation failed.
2025
2096
  * @exception {DeveloperError} Framebuffer is not complete.
2026
2097
  *
@@ -2051,122 +2122,21 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
2051
2122
  * @see Context#createRenderState
2052
2123
  */
2053
2124
  Context.prototype.draw = function(drawCommand, passState) {
2054
- passState = defaultValue(passState, this._defaultPassState);
2055
- this.beginDraw(drawCommand, passState);
2056
- this.continueDraw(drawCommand);
2057
- this.endDraw();
2058
- };
2059
-
2060
- /**
2061
- * DOC_TBA
2062
- *
2063
- * @memberof Context
2064
- */
2065
- Context.prototype.beginDraw = function(command, passState) {
2066
- if (!defined(command)) {
2067
- throw new DeveloperError('command is required.');
2125
+ if (!defined(drawCommand)) {
2126
+ throw new DeveloperError('drawCommand is required.');
2068
2127
  }
2069
2128
 
2070
- if (!defined(command.shaderProgram)) {
2071
- throw new DeveloperError('command.shaderProgram is required.');
2129
+ if (!defined(drawCommand.shaderProgram)) {
2130
+ throw new DeveloperError('drawCommand.shaderProgram is required.');
2072
2131
  }
2073
2132
 
2133
+ passState = defaultValue(passState, this._defaultPassState);
2074
2134
  // The command's framebuffer takes presidence over the pass' framebuffer, e.g., for off-screen rendering.
2075
- var framebuffer = defaultValue(command.framebuffer, passState.framebuffer);
2076
- var sp = command.shaderProgram;
2077
- var rs = (defined(command.renderState)) ? command.renderState : this._defaultRenderState;
2078
-
2079
- if ((defined(framebuffer)) && rs.depthTest) {
2080
- if (rs.depthTest.enabled && !framebuffer.hasDepthAttachment()) {
2081
- throw new DeveloperError('The depth test can not be enabled (command.renderState.depthTest.enabled) because the framebuffer (command.framebuffer) does not have a depth or depth-stencil renderbuffer.');
2082
- }
2083
- }
2084
-
2085
- ///////////////////////////////////////////////////////////////////////
2086
-
2087
- applyRenderState(this, rs, passState);
2088
-
2089
- if (defined(framebuffer)) {
2090
- framebuffer._bind();
2091
- this._validateFramebuffer(framebuffer);
2092
- }
2093
- sp._bind();
2094
-
2095
- this._currentFramebuffer = framebuffer;
2096
- this._currentSp = sp;
2097
- this._maxFrameTextureUnitIndex = Math.max(this._maxFrameTextureUnitIndex, sp.maximumTextureUnitIndex);
2098
- };
2099
-
2100
- /**
2101
- * DOC_TBA
2102
- *
2103
- * @memberof Context
2104
- */
2105
- Context.prototype.continueDraw = function(command) {
2106
- var sp = this._currentSp;
2107
- if (!defined(sp)) {
2108
- throw new DeveloperError('beginDraw must be called before continueDraw.');
2109
- }
2110
-
2111
- if (!defined(command)) {
2112
- throw new DeveloperError('command is required.');
2113
- }
2114
-
2115
- var primitiveType = command.primitiveType;
2116
- if (!PrimitiveType.validate(primitiveType)) {
2117
- throw new DeveloperError('command.primitiveType is required and must be valid.');
2118
- }
2135
+ var framebuffer = defaultValue(drawCommand.framebuffer, passState.framebuffer);
2119
2136
 
2120
- if (!defined(command.vertexArray)) {
2121
- throw new DeveloperError('command.vertexArray is required.');
2122
- }
2123
-
2124
- var va = command.vertexArray;
2125
- var indexBuffer = va.getIndexBuffer();
2126
-
2127
- var offset = command.offset;
2128
- var count = command.count;
2129
- var hasIndexBuffer = defined(indexBuffer);
2130
-
2131
- if (hasIndexBuffer) {
2132
- offset = (offset || 0) * indexBuffer.getBytesPerIndex(); // in bytes
2133
- count = count || indexBuffer.getNumberOfIndices();
2134
- } else {
2135
- offset = offset || 0; // in vertices
2136
- count = count || va._getNumberOfVertices();
2137
- }
2138
-
2139
- if (offset < 0) {
2140
- throw new DeveloperError('command.offset must be omitted or greater than or equal to zero.');
2141
- }
2142
-
2143
- if (count > 0) {
2144
- this._us.setModel(defaultValue(command.modelMatrix, Matrix4.IDENTITY));
2145
- sp._setUniforms(command.uniformMap, this._us, this._validateSP);
2146
-
2147
- va._bind();
2148
-
2149
- if (hasIndexBuffer) {
2150
- this._gl.drawElements(primitiveType.value, count, indexBuffer.getIndexDatatype().value, offset);
2151
- } else {
2152
- this._gl.drawArrays(primitiveType.value, offset, count);
2153
- }
2154
-
2155
- va._unBind();
2156
- }
2157
- };
2158
-
2159
- /**
2160
- * DOC_TBA
2161
- *
2162
- * @memberof Context
2163
- */
2164
- Context.prototype.endDraw = function() {
2165
- if (defined(this._currentFramebuffer)) {
2166
- this._currentFramebuffer._unBind();
2167
- this._currentFramebuffer = undefined;
2168
- }
2169
- this._currentSp = undefined;
2137
+ beginDraw(this, framebuffer, drawCommand, passState);
2138
+ continueDraw(this, drawCommand);
2139
+ endDraw(framebuffer);
2170
2140
  };
2171
2141
 
2172
2142
  /**
@@ -2216,7 +2186,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/DeveloperError', 'Core/destro
2216
2186
 
2217
2187
  if (framebuffer) {
2218
2188
  framebuffer._bind();
2219
- this._validateFramebuffer(framebuffer);
2189
+ validateFramebuffer(this, framebuffer);
2220
2190
  }
2221
2191
 
2222
2192
  gl.readPixels(x, y, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);