threepipe
Version:
A modern 3D viewer framework built on top of three.js, written in TypeScript, designed to make creating high-quality, modular, and extensible 3D experiences on the web simple and enjoyable.
102 lines (91 loc) • 2.67 kB
text/typescript
import {
ColorSpace,
DepthFormat,
DepthStencilFormat,
DepthTexture,
FloatType,
MagnificationTextureFilter,
MinificationTextureFilter,
RenderTarget,
Texture,
TextureDataType,
UnsignedInt248Type,
UnsignedIntType,
UnsignedShortType,
Vector4,
Wrapping,
} from 'three'
import type {IRenderManager, IWebGLRenderer} from '../core'
export interface IRenderTarget extends RenderTarget<Texture> {
isWebGLRenderTarget?: true
width: number
height: number
depth: number
assetType?: 'renderTarget'
name?: string
// texture: ValOrArr<Texture&{_target?: IRenderTarget}>
uuid?: string
sizeMultiplier?: number
isTemporary?: boolean
targetKey?: string // for caching.
clone(trackTarget?: boolean): this
setSize(width: number, height: number, depth?: number): void;
copy(source: IRenderTarget|RenderTarget): this;
dispose(): void;
scissor: Vector4;
/**
* @default false
*/
scissorTest: boolean;
viewport: Vector4;
/**
* @default true
*/
depthBuffer: boolean;
/**
* @default true
*/
stencilBuffer: boolean;
/**
* @default null
*/
depthTexture: DepthTexture;
/**
* Defines the count of MSAA samples. Can only be used with WebGL 2. Default is **0**.
* @default 0
*/
samples: number;
isWebGLCubeRenderTarget?: boolean
// isWebGLMultipleRenderTargets?: boolean
clear?(renderer: IWebGLRenderer, color: boolean, depth: boolean, stencil: boolean): void
readonly renderManager?: IRenderManager
}
export interface CreateRenderTargetOptions {
sizeMultiplier?: number,
size?: {width: number, height: number},
generateMipmaps?: boolean,
samples?: number,
minFilter?: MinificationTextureFilter
magFilter?: MagnificationTextureFilter
colorSpace?: ColorSpace
type?: TextureDataType
format?: number
/**
* @default true
*/
depthBuffer?: boolean
/**
* @default false
*/
stencilBuffer?: boolean
depthTexture?: boolean
depthTextureType?: typeof UnsignedShortType | typeof UnsignedInt248Type | typeof UnsignedIntType | typeof FloatType
depthTextureFormat?: typeof DepthFormat | typeof DepthStencilFormat
textureCount?: number
wrapS?: Wrapping
wrapT?: Wrapping
}
export function createRenderTargetKey(op: CreateRenderTargetOptions = {}): string {
// colorSpace is in key because of ext_sRGB
return [op.sizeMultiplier, op.samples, op.colorSpace, op.type, op.format, op.depthBuffer, op.depthTexture, op.textureCount, op.size?.width, op.size?.height].join(';')
}