babylon.vertexBuffer.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. var BABYLON;
  2. (function (BABYLON) {
  3. var VertexBuffer = (function () {
  4. function VertexBuffer(engine, data, kind, updatable, postponeInternalCreation, stride) {
  5. if (engine instanceof BABYLON.Mesh) {
  6. this._engine = engine.getScene().getEngine();
  7. }
  8. else {
  9. this._engine = engine;
  10. }
  11. this._updatable = updatable;
  12. this._data = data;
  13. if (!postponeInternalCreation) {
  14. this.create();
  15. }
  16. this._kind = kind;
  17. if (stride) {
  18. this._strideSize = stride;
  19. return;
  20. }
  21. // Deduce stride from kind
  22. switch (kind) {
  23. case VertexBuffer.PositionKind:
  24. this._strideSize = 3;
  25. break;
  26. case VertexBuffer.NormalKind:
  27. this._strideSize = 3;
  28. break;
  29. case VertexBuffer.UVKind:
  30. case VertexBuffer.UV2Kind:
  31. case VertexBuffer.UV3Kind:
  32. case VertexBuffer.UV4Kind:
  33. case VertexBuffer.UV5Kind:
  34. case VertexBuffer.UV6Kind:
  35. this._strideSize = 2;
  36. break;
  37. case VertexBuffer.ColorKind:
  38. this._strideSize = 4;
  39. break;
  40. case VertexBuffer.MatricesIndicesKind:
  41. case VertexBuffer.MatricesIndicesExtraKind:
  42. this._strideSize = 4;
  43. break;
  44. case VertexBuffer.MatricesWeightsKind:
  45. case VertexBuffer.MatricesWeightsExtraKind:
  46. this._strideSize = 4;
  47. break;
  48. }
  49. }
  50. // Properties
  51. VertexBuffer.prototype.isUpdatable = function () {
  52. return this._updatable;
  53. };
  54. VertexBuffer.prototype.getData = function () {
  55. return this._data;
  56. };
  57. VertexBuffer.prototype.getBuffer = function () {
  58. return this._buffer;
  59. };
  60. VertexBuffer.prototype.getStrideSize = function () {
  61. return this._strideSize;
  62. };
  63. // Methods
  64. VertexBuffer.prototype.create = function (data) {
  65. if (!data && this._buffer) {
  66. return; // nothing to do
  67. }
  68. data = data || this._data;
  69. if (!this._buffer) {
  70. if (this._updatable) {
  71. this._buffer = this._engine.createDynamicVertexBuffer(data.length * 4);
  72. }
  73. else {
  74. this._buffer = this._engine.createVertexBuffer(data);
  75. }
  76. }
  77. if (this._updatable) {
  78. this._engine.updateDynamicVertexBuffer(this._buffer, data);
  79. this._data = data;
  80. }
  81. };
  82. VertexBuffer.prototype.update = function (data) {
  83. this.create(data);
  84. };
  85. VertexBuffer.prototype.updateDirectly = function (data, offset) {
  86. if (!this._buffer) {
  87. return;
  88. }
  89. if (this._updatable) {
  90. this._engine.updateDynamicVertexBuffer(this._buffer, data, offset);
  91. this._data = null;
  92. }
  93. };
  94. VertexBuffer.prototype.dispose = function () {
  95. if (!this._buffer) {
  96. return;
  97. }
  98. if (this._engine._releaseBuffer(this._buffer)) {
  99. this._buffer = null;
  100. }
  101. };
  102. Object.defineProperty(VertexBuffer, "PositionKind", {
  103. get: function () {
  104. return VertexBuffer._PositionKind;
  105. },
  106. enumerable: true,
  107. configurable: true
  108. });
  109. Object.defineProperty(VertexBuffer, "NormalKind", {
  110. get: function () {
  111. return VertexBuffer._NormalKind;
  112. },
  113. enumerable: true,
  114. configurable: true
  115. });
  116. Object.defineProperty(VertexBuffer, "UVKind", {
  117. get: function () {
  118. return VertexBuffer._UVKind;
  119. },
  120. enumerable: true,
  121. configurable: true
  122. });
  123. Object.defineProperty(VertexBuffer, "UV2Kind", {
  124. get: function () {
  125. return VertexBuffer._UV2Kind;
  126. },
  127. enumerable: true,
  128. configurable: true
  129. });
  130. Object.defineProperty(VertexBuffer, "UV3Kind", {
  131. get: function () {
  132. return VertexBuffer._UV3Kind;
  133. },
  134. enumerable: true,
  135. configurable: true
  136. });
  137. Object.defineProperty(VertexBuffer, "UV4Kind", {
  138. get: function () {
  139. return VertexBuffer._UV4Kind;
  140. },
  141. enumerable: true,
  142. configurable: true
  143. });
  144. Object.defineProperty(VertexBuffer, "UV5Kind", {
  145. get: function () {
  146. return VertexBuffer._UV5Kind;
  147. },
  148. enumerable: true,
  149. configurable: true
  150. });
  151. Object.defineProperty(VertexBuffer, "UV6Kind", {
  152. get: function () {
  153. return VertexBuffer._UV6Kind;
  154. },
  155. enumerable: true,
  156. configurable: true
  157. });
  158. Object.defineProperty(VertexBuffer, "ColorKind", {
  159. get: function () {
  160. return VertexBuffer._ColorKind;
  161. },
  162. enumerable: true,
  163. configurable: true
  164. });
  165. Object.defineProperty(VertexBuffer, "MatricesIndicesKind", {
  166. get: function () {
  167. return VertexBuffer._MatricesIndicesKind;
  168. },
  169. enumerable: true,
  170. configurable: true
  171. });
  172. Object.defineProperty(VertexBuffer, "MatricesWeightsKind", {
  173. get: function () {
  174. return VertexBuffer._MatricesWeightsKind;
  175. },
  176. enumerable: true,
  177. configurable: true
  178. });
  179. Object.defineProperty(VertexBuffer, "MatricesIndicesExtraKind", {
  180. get: function () {
  181. return VertexBuffer._MatricesIndicesExtraKind;
  182. },
  183. enumerable: true,
  184. configurable: true
  185. });
  186. Object.defineProperty(VertexBuffer, "MatricesWeightsExtraKind", {
  187. get: function () {
  188. return VertexBuffer._MatricesWeightsExtraKind;
  189. },
  190. enumerable: true,
  191. configurable: true
  192. });
  193. // Enums
  194. VertexBuffer._PositionKind = "position";
  195. VertexBuffer._NormalKind = "normal";
  196. VertexBuffer._UVKind = "uv";
  197. VertexBuffer._UV2Kind = "uv2";
  198. VertexBuffer._UV3Kind = "uv3";
  199. VertexBuffer._UV4Kind = "uv4";
  200. VertexBuffer._UV5Kind = "uv5";
  201. VertexBuffer._UV6Kind = "uv6";
  202. VertexBuffer._ColorKind = "color";
  203. VertexBuffer._MatricesIndicesKind = "matricesIndices";
  204. VertexBuffer._MatricesWeightsKind = "matricesWeights";
  205. VertexBuffer._MatricesIndicesExtraKind = "matricesIndicesExtra";
  206. VertexBuffer._MatricesWeightsExtraKind = "matricesWeightsExtra";
  207. return VertexBuffer;
  208. })();
  209. BABYLON.VertexBuffer = VertexBuffer;
  210. })(BABYLON || (BABYLON = {}));