Renderbuffer.js 2.9 KB

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