Renderbuffer.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import Check from "../Core/Check.js";
  2. import defaultValue from "../Core/defaultValue.js";
  3. import defined from "../Core/defined.js";
  4. import destroyObject from "../Core/destroyObject.js";
  5. import DeveloperError from "../Core/DeveloperError.js";
  6. import ContextLimits from "./ContextLimits.js";
  7. import RenderbufferFormat from "./RenderbufferFormat.js";
  8. /**
  9. * @private
  10. */
  11. function Renderbuffer(options) {
  12. options = defaultValue(options, defaultValue.EMPTY_OBJECT);
  13. //>>includeStart('debug', pragmas.debug);
  14. Check.defined("options.context", options.context);
  15. //>>includeEnd('debug');
  16. var context = options.context;
  17. var gl = context._gl;
  18. var maximumRenderbufferSize = ContextLimits.maximumRenderbufferSize;
  19. var format = defaultValue(options.format, RenderbufferFormat.RGBA4);
  20. var width = defined(options.width) ? options.width : gl.drawingBufferWidth;
  21. var height = defined(options.height)
  22. ? options.height
  23. : gl.drawingBufferHeight;
  24. //>>includeStart('debug', pragmas.debug);
  25. if (!RenderbufferFormat.validate(format)) {
  26. throw new DeveloperError("Invalid format.");
  27. }
  28. Check.typeOf.number.greaterThan("width", width, 0);
  29. if (width > maximumRenderbufferSize) {
  30. throw new DeveloperError(
  31. "Width must be less than or equal to the maximum renderbuffer size (" +
  32. maximumRenderbufferSize +
  33. "). Check maximumRenderbufferSize."
  34. );
  35. }
  36. Check.typeOf.number.greaterThan("height", height, 0);
  37. if (height > maximumRenderbufferSize) {
  38. throw new DeveloperError(
  39. "Height must be less than or equal to the maximum renderbuffer size (" +
  40. maximumRenderbufferSize +
  41. "). Check maximumRenderbufferSize."
  42. );
  43. }
  44. //>>includeEnd('debug');
  45. this._gl = gl;
  46. this._format = format;
  47. this._width = width;
  48. this._height = height;
  49. this._renderbuffer = this._gl.createRenderbuffer();
  50. gl.bindRenderbuffer(gl.RENDERBUFFER, this._renderbuffer);
  51. gl.renderbufferStorage(gl.RENDERBUFFER, format, width, height);
  52. gl.bindRenderbuffer(gl.RENDERBUFFER, null);
  53. }
  54. Object.defineProperties(Renderbuffer.prototype, {
  55. format: {
  56. get: function () {
  57. return this._format;
  58. },
  59. },
  60. width: {
  61. get: function () {
  62. return this._width;
  63. },
  64. },
  65. height: {
  66. get: function () {
  67. return this._height;
  68. },
  69. },
  70. });
  71. Renderbuffer.prototype._getRenderbuffer = function () {
  72. return this._renderbuffer;
  73. };
  74. Renderbuffer.prototype.isDestroyed = function () {
  75. return false;
  76. };
  77. Renderbuffer.prototype.destroy = function () {
  78. this._gl.deleteRenderbuffer(this._renderbuffer);
  79. return destroyObject(this);
  80. };
  81. export default Renderbuffer;