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.6KB

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