NodeStorageBuffer.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import StorageBuffer from '../StorageBuffer.js';
  2. import { NodeAccess } from '../../../nodes/core/constants.js';
  3. let _id = 0;
  4. /**
  5. * A special form of storage buffer binding type.
  6. * It's buffer value is managed by a node object.
  7. *
  8. * @private
  9. * @augments StorageBuffer
  10. */
  11. class NodeStorageBuffer extends StorageBuffer {
  12. /**
  13. * Constructs a new node-based storage buffer.
  14. *
  15. * @param {StorageBufferNode} nodeUniform - The storage buffer node.
  16. * @param {UniformGroupNode} groupNode - The uniform group node.
  17. */
  18. constructor( nodeUniform, groupNode ) {
  19. super( 'StorageBuffer_' + _id ++, nodeUniform ? nodeUniform.value : null );
  20. /**
  21. * The node uniform.
  22. *
  23. * @type {StorageBufferNode}
  24. */
  25. this.nodeUniform = nodeUniform;
  26. /**
  27. * The access type.
  28. *
  29. * @type {string}
  30. */
  31. this.access = nodeUniform ? nodeUniform.access : NodeAccess.READ_WRITE;
  32. /**
  33. * The uniform group node.
  34. *
  35. * @type {UniformGroupNode}
  36. */
  37. this.groupNode = groupNode;
  38. }
  39. /**
  40. * The storage buffer attribute node.
  41. *
  42. * @type {StorageBufferAttribute}
  43. */
  44. get attribute() {
  45. return this.nodeUniform.value;
  46. }
  47. /**
  48. * The storage buffer.
  49. *
  50. * @type {Float32Array}
  51. */
  52. get buffer() {
  53. return this.nodeUniform.value.array;
  54. }
  55. }
  56. export default NodeStorageBuffer;
粤ICP备19079148号