threepipe
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

RenderTarget.ts 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import {
  2. ColorSpace,
  3. EventDispatcher,
  4. MagnificationTextureFilter,
  5. MinificationTextureFilter,
  6. Texture,
  7. TextureDataType,
  8. Wrapping,
  9. } from 'three'
  10. import {Vector4} from 'three/src/math/Vector4'
  11. import {DepthTexture} from 'three/src/textures/DepthTexture'
  12. import type {IRenderManager} from '../core'
  13. import {ValOrArr} from 'ts-browser-helpers'
  14. export interface IRenderTarget extends EventDispatcher {
  15. isWebGLRenderTarget: boolean
  16. width: number
  17. height: number
  18. depth: number
  19. assetType?: 'renderTarget'
  20. name?: string
  21. texture: ValOrArr<Texture&{_target?: IRenderTarget}>
  22. uuid?: string
  23. sizeMultiplier?: number
  24. isTemporary?: boolean
  25. targetKey?: string // for caching.
  26. clone(trackTarget?: boolean): this
  27. setSize(width: number, height: number, depth?: number): void;
  28. copy(source: IRenderTarget): this;
  29. dispose(): void;
  30. scissor: Vector4;
  31. /**
  32. * @default false
  33. */
  34. scissorTest: boolean;
  35. viewport: Vector4;
  36. /**
  37. * @default true
  38. */
  39. depthBuffer: boolean;
  40. /**
  41. * @default true
  42. */
  43. stencilBuffer: boolean;
  44. /**
  45. * @default null
  46. */
  47. depthTexture: DepthTexture;
  48. /**
  49. * Defines the count of MSAA samples. Can only be used with WebGL 2. Default is **0**.
  50. * @default 0
  51. */
  52. samples: number;
  53. isWebGLCubeRenderTarget?: boolean
  54. isWebGLMultipleRenderTargets?: boolean
  55. readonly renderManager?: IRenderManager
  56. }
  57. export interface CreateRenderTargetOptions {
  58. sizeMultiplier?: number,
  59. size?: {width: number, height: number},
  60. generateMipmaps?: boolean,
  61. samples?: number,
  62. minFilter?: MinificationTextureFilter
  63. magFilter?: MagnificationTextureFilter
  64. colorSpace?: ColorSpace
  65. type?: TextureDataType
  66. format?: number
  67. depthBuffer?: boolean
  68. depthTexture?: boolean
  69. textureCount?: number
  70. wrapS?: Wrapping
  71. wrapT?: Wrapping
  72. }
  73. export function createRenderTargetKey(op: CreateRenderTargetOptions = {}): string {
  74. // colorSpace is in key because of ext_sRGB
  75. return [op.sizeMultiplier, op.samples, op.colorSpace, op.type, op.format, op.depthBuffer, op.depthTexture, op.textureCount, op.size?.width, op.size?.height].join(';')
  76. }