MultiviewRenderTarget.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { RenderTargetTexture } from '../Textures/renderTargetTexture';
  2. import { Scene } from '../../scene';
  3. import { InternalTextureSource } from '../Textures/internalTexture';
  4. import { Constants } from '../../Engines/constants';
  5. /**
  6. * Renders to multiple views with a single draw call
  7. * @see https://www.khronos.org/registry/webgl/extensions/WEBGL_multiview/
  8. */
  9. export class MultiviewRenderTarget extends RenderTargetTexture {
  10. /**
  11. * Creates a multiview render target
  12. * @param scene scene used with the render target
  13. * @param size the size of the render target (used for each view)
  14. */
  15. constructor(scene: Scene, size: number | { width: number, height: number } | { ratio: number } = 512) {
  16. super("multiview rtt", size, scene, false, true, InternalTextureSource.Unknown, false, undefined, false, false, true, undefined, true);
  17. var internalTexture = scene.getEngine().createMultiviewRenderTargetTexture(this.getRenderWidth(), this.getRenderHeight());
  18. internalTexture.isMultiview = true;
  19. internalTexture.format = Constants.TEXTUREFORMAT_RGBA;
  20. this._texture = internalTexture;
  21. this.samples = this._getEngine()!.getCaps().maxSamples || this.samples;
  22. }
  23. /**
  24. * @hidden
  25. * @param faceIndex the face index, if its a cube texture
  26. */
  27. public _bindFrameBuffer(faceIndex: number = 0) {
  28. if (!this._texture) {
  29. return;
  30. }
  31. this.getScene()!.getEngine().bindMultiviewFramebuffer(this._texture);
  32. }
  33. /**
  34. * Gets the number of views the corresponding to the texture (eg. a MultiviewRenderTarget will have > 1)
  35. * @returns the view count
  36. */
  37. public getViewCount() {
  38. return 2;
  39. }
  40. }