MultiviewRenderTarget.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { RenderTargetTexture } from "../Textures/renderTargetTexture.js";
  2. /**
  3. * Renders to multiple views with a single draw call
  4. * Only for WebGL backends
  5. * @see https://www.khronos.org/registry/webgl/extensions/OVR_multiview2/
  6. */
  7. export class MultiviewRenderTarget extends RenderTargetTexture {
  8. set samples(value) {
  9. // We override this setter because multisampling is handled by framebufferTextureMultisampleMultiviewOVR
  10. this._samples = value;
  11. }
  12. get samples() {
  13. return this._samples;
  14. }
  15. /**
  16. * Creates a multiview render target
  17. * @param scene scene used with the render target
  18. * @param size the size of the render target (used for each view)
  19. */
  20. constructor(scene, size = 512) {
  21. super("multiview rtt", size, scene, false, true, 0, false, undefined, false, false, true, undefined, true);
  22. this._renderTarget = this.getScene().getEngine().createMultiviewRenderTargetTexture(this.getRenderWidth(), this.getRenderHeight());
  23. this._texture = this._renderTarget.texture;
  24. this._texture.isMultiview = true;
  25. this._texture.format = 5;
  26. this.samples = this._getEngine().getCaps().maxSamples || this.samples;
  27. this._texture.samples = this._samples;
  28. }
  29. /**
  30. * @internal
  31. */
  32. _bindFrameBuffer() {
  33. if (!this._renderTarget) {
  34. return;
  35. }
  36. this.getScene().getEngine().bindMultiviewFramebuffer(this._renderTarget);
  37. }
  38. /**
  39. * Gets the number of views the corresponding to the texture (eg. a MultiviewRenderTarget will have > 1)
  40. * @returns the view count
  41. */
  42. getViewCount() {
  43. return 2;
  44. }
  45. }
  46. //# sourceMappingURL=MultiviewRenderTarget.js.map