Skip to content

Commit

Permalink
change: Add new render target types for 3D and array textures
Browse files Browse the repository at this point in the history
See: mrdoob/three.js#23498

### Description

- Add new classes:
  - `WebGL3DRenderTarget`
  - `WebGLArrayRenderTarget`
  - `Data3DTexture`
  - `DataArrayTexture`
- Made them deprecated:
  - `DataTexture2DArray`
  - `DataTexture3D`
- Removed `WebGLRenderTarget.setTexture`
- Fixed related classes
- Fixed related examples

### What I didn't do

- changes applied to `examples/jsm/renderers/webgpu/WebGPUTextures` , since it does not exist in this repository.
  • Loading branch information
0b5vr committed Mar 1, 2022
1 parent 2db9be4 commit 62862dd
Show file tree
Hide file tree
Showing 16 changed files with 160 additions and 90 deletions.
4 changes: 2 additions & 2 deletions types/three/examples/jsm/loaders/LUT3dlLoader.d.ts
@@ -1,9 +1,9 @@
import { Loader, LoadingManager, DataTexture, DataTexture3D } from '../../../src/Three';
import { Loader, LoadingManager, DataTexture, Data3DTexture } from '../../../src/Three';

export interface LUT3dlResult {
size: number;
texture: DataTexture;
texture3D: DataTexture3D;
texture3D: Data3DTexture;
}

export class LUT3dlLoader extends Loader {
Expand Down
4 changes: 2 additions & 2 deletions types/three/examples/jsm/loaders/LUTCubeLoader.d.ts
@@ -1,12 +1,12 @@
import { Loader, LoadingManager, Vector3, DataTexture, DataTexture3D } from '../../../src/Three';
import { Loader, LoadingManager, Vector3, DataTexture, Data3DTexture } from '../../../src/Three';

export interface LUTCubeResult {
title: string;
size: number;
domainMin: Vector3;
domainMax: Vector3;
texture: DataTexture;
texture3D: DataTexture3D;
texture3D: Data3DTexture;
}

export class LUTCubeLoader extends Loader {
Expand Down
4 changes: 2 additions & 2 deletions types/three/examples/jsm/loaders/VOXLoader.d.ts
@@ -1,4 +1,4 @@
import { DataTexture3D, Mesh, Loader, LoadingManager } from '../../../src/Three';
import { Data3DTexture, Mesh, Loader, LoadingManager } from '../../../src/Three';

export interface Chunk {
palette: number[];
Expand All @@ -23,6 +23,6 @@ export class VOXMesh extends Mesh {
constructor(chunk: Chunk);
}

export class VOXDataTexture3D extends DataTexture3D {
export class VOXData3DTexture extends Data3DTexture {
constructor(chunk: Chunk);
}
6 changes: 3 additions & 3 deletions types/three/examples/jsm/postprocessing/LUTPass.d.ts
@@ -1,13 +1,13 @@
import { DataTexture, DataTexture3D } from '../../../src/Three';
import { DataTexture, Data3DTexture } from '../../../src/Three';
import { ShaderPass } from './ShaderPass';

export interface LUTPassParameters {
lut?: DataTexture | DataTexture3D;
lut?: DataTexture | Data3DTexture;
intensity?: number;
}

export class LUTPass extends ShaderPass {
lut?: DataTexture | DataTexture3D;
lut?: DataTexture | Data3DTexture;
intensity?: number;
constructor(params: LUTPassParameters);
}
4 changes: 4 additions & 0 deletions types/three/src/Three.d.ts
Expand Up @@ -181,6 +181,8 @@ export * from './renderers/WebGLMultipleRenderTargets';
export * from './renderers/WebGLRenderTarget';
export * from './renderers/WebGLRenderer';
export * from './renderers/WebGL1Renderer';
export * from './renderers/WebGL3DRenderTarget';
export * from './renderers/WebGLArrayRenderTarget';
export * from './renderers/shaders/ShaderLib';
export * from './renderers/shaders/UniformsLib';
export * from './renderers/shaders/UniformsUtils';
Expand Down Expand Up @@ -222,6 +224,8 @@ export * from './textures/DataTexture2DArray';
export * from './textures/DataTexture3D';
export * from './textures/CompressedTexture';
export * from './textures/CubeTexture';
export * from './textures/Data3DTexture';
export * from './textures/DataArrayTexture';
export * from './textures/CanvasTexture';
export * from './textures/DepthTexture';
export * from './textures/FramebufferTexture';
Expand Down
28 changes: 28 additions & 0 deletions types/three/src/renderers/WebGL3DRenderTarget.d.ts
@@ -0,0 +1,28 @@
import { Data3DTexture } from '../textures/Data3DTexture';
import { WebGLRenderTarget } from './WebGLRenderTarget';

/**
* Represents a three-dimensional render target.
*/
export class WebGL3DRenderTarget extends WebGLRenderTarget {
/**
* Creates a new WebGL3DRenderTarget.
*
* @param width the width of the render target, in pixels.
* @param height the height of the render target, in pixels.
* @param depth the depth of the render target.
*/
constructor(width: number, height: number, depth: number);

/**
* The depth of the render target.
*/
depth: number;

/**
* The texture property is overwritten with an instance of {@link Data3DTexture}.
*/
texture: Data3DTexture;

readonly isWebGL3DRenderTarget: true;
}
28 changes: 28 additions & 0 deletions types/three/src/renderers/WebGLArrayRenderTarget.d.ts
@@ -0,0 +1,28 @@
import { DataArrayTexture } from '../textures/DataArrayTexture';
import { WebGLRenderTarget } from './WebGLRenderTarget';

/**
* This type of render target represents an array of textures.
*/
export class WebGLArrayRenderTarget extends WebGLRenderTarget {
/**
* Creates a new WebGLArrayRenderTarget.
*
* @param width the width of the render target, in pixels.
* @param height the height of the render target, in pixels.
* @param depth the depth/layer count of the render target.
*/
constructor(width: number, height: number, depth: number);

/**
* The depth of the render target.
*/
depth: number;

/**
* The texture property is overwritten with an instance of {@link DataArrayTexture}.
*/
texture: DataArrayTexture;

readonly isWebGLArrayRenderTarget: true;
}
1 change: 0 additions & 1 deletion types/three/src/renderers/WebGLRenderTarget.d.ts
Expand Up @@ -92,7 +92,6 @@ export class WebGLRenderTarget extends EventDispatcher {
*/
generateMipmaps: any;

setTexture(texture: Texture): void;
setSize(width: number, height: number, depth?: number): void;
clone(): this;
copy(source: WebGLRenderTarget): this;
Expand Down
7 changes: 3 additions & 4 deletions types/three/src/renderers/WebGLRenderer.d.ts
Expand Up @@ -5,7 +5,6 @@ import { WebGLInfo } from './webgl/WebGLInfo';
import { WebGLShadowMap } from './webgl/WebGLShadowMap';
import { WebGLCapabilities } from './webgl/WebGLCapabilities';
import { WebGLProperties } from './webgl/WebGLProperties';
import { WebGLProgram } from './webgl/WebGLProgram';
import { WebGLRenderLists } from './webgl/WebGLRenderLists';
import { WebGLState } from './webgl/WebGLState';
import { Vector2 } from './../math/Vector2';
Expand All @@ -19,11 +18,11 @@ import { ToneMapping, ShadowMapType, CullFace, TextureEncoding } from '../consta
import { WebXRManager } from '../renderers/webxr/WebXRManager';
import { BufferGeometry } from './../core/BufferGeometry';
import { Texture } from '../textures/Texture';
import { DataTexture3D } from '../textures/DataTexture3D';
import { Data3DTexture } from '../textures/Data3DTexture';
import { XRAnimationLoopCallback } from './webxr/WebXR';
import { Vector3 } from '../math/Vector3';
import { Box3 } from '../math/Box3';
import { DataTexture2DArray } from '../textures/DataTexture2DArray';
import { DataArrayTexture } from '../textures/DataArrayTexture';
import { ColorRepresentation } from '../utils';

export interface Renderer {
Expand Down Expand Up @@ -437,7 +436,7 @@ export class WebGLRenderer implements Renderer {
sourceBox: Box3,
position: Vector3,
srcTexture: Texture,
dstTexture: DataTexture3D | DataTexture2DArray,
dstTexture: Data3DTexture | DataArrayTexture,
level?: number,
): void;

Expand Down
33 changes: 33 additions & 0 deletions types/three/src/textures/Data3DTexture.d.ts
@@ -0,0 +1,33 @@
import { Texture } from './Texture';
import { TextureFilter } from '../constants';

export class Data3DTexture extends Texture {
constructor(data: BufferSource, width: number, height: number, depth: number);

/**
* @default THREE.NearestFilter
*/
magFilter: TextureFilter;

/**
* @default THREE.NearestFilter
*/
minFilter: TextureFilter;

/**
* @default THREE.ClampToEdgeWrapping
*/
wrapR: boolean;

/**
* @default false
*/
flipY: boolean;

/**
* @default false
*/
generateMipmaps: boolean;

readonly isData3DTexture: true;
}
33 changes: 33 additions & 0 deletions types/three/src/textures/DataArrayTexture.d.ts
@@ -0,0 +1,33 @@
import { Texture } from './Texture';
import { TextureFilter } from '../constants';

export class DataArrayTexture extends Texture {
constructor(data?: BufferSource, width?: number, height?: number, depth?: number);

/**
* @default THREE.NearestFilter
*/
magFilter: TextureFilter;

/**
* @default THREE.NearestFilter
*/
minFilter: TextureFilter;

/**
* @default THREE.ClampToEdgeWrapping
*/
wrapR: boolean;

/**
* @default false
*/
flipY: boolean;

/**
* @default false
*/
generateMipmaps: boolean;

readonly isDataArrayTexture: true;
}
37 changes: 5 additions & 32 deletions types/three/src/textures/DataTexture2DArray.d.ts
@@ -1,33 +1,6 @@
import { Texture } from './Texture';
import { TextureFilter } from '../constants';
import { DataArrayTexture } from './DataArrayTexture';

export class DataTexture2DArray extends Texture {
constructor(data?: BufferSource, width?: number, height?: number, depth?: number);

/**
* @default THREE.NearestFilter
*/
magFilter: TextureFilter;

/**
* @default THREE.NearestFilter
*/
minFilter: TextureFilter;

/**
* @default THREE.ClampToEdgeWrapping
*/
wrapR: boolean;

/**
* @default false
*/
flipY: boolean;

/**
* @default false
*/
generateMipmaps: boolean;

readonly isDataTexture2DArray: true;
}
/**
* @deprecated THREE.DataTexture2DArray has been renamed to DataArrayTexture.
*/
export class DataTexture2DArray extends DataArrayTexture {}
37 changes: 5 additions & 32 deletions types/three/src/textures/DataTexture3D.d.ts
@@ -1,33 +1,6 @@
import { Texture } from './Texture';
import { TextureFilter } from '../constants';
import { Data3DTexture } from './Data3DTexture';

export class DataTexture3D extends Texture {
constructor(data: BufferSource, width: number, height: number, depth: number);

/**
* @default THREE.NearestFilter
*/
magFilter: TextureFilter;

/**
* @default THREE.NearestFilter
*/
minFilter: TextureFilter;

/**
* @default THREE.ClampToEdgeWrapping
*/
wrapR: boolean;

/**
* @default false
*/
flipY: boolean;

/**
* @default false
*/
generateMipmaps: boolean;

readonly isDataTexture3D: true;
}
/**
* @deprecated THREE.DataTexture3D has been renamed to Data3DTexture.
*/
export class DataTexture3D extends Data3DTexture {}
4 changes: 2 additions & 2 deletions types/three/test/loaders/loaders-voxloader.ts
@@ -1,6 +1,6 @@
import * as THREE from 'three';
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
import { VOXLoader, VOXDataTexture3D } from 'three/examples/jsm/loaders/VOXLoader';
import { VOXLoader, VOXData3DTexture } from 'three/examples/jsm/loaders/VOXLoader';

import { WEBGL } from 'three/examples/jsm/WebGL';

Expand Down Expand Up @@ -150,7 +150,7 @@ function init() {
const material = new THREE.RawShaderMaterial({
glslVersion: THREE.GLSL3,
uniforms: {
map: { value: new VOXDataTexture3D(chunk) },
map: { value: new VOXData3DTexture(chunk) },
cameraPos: { value: new THREE.Vector3() },
},
vertexShader,
Expand Down
Expand Up @@ -15,7 +15,7 @@ let scene: THREE.Scene;
let camera: THREE.PerspectiveCamera;
let mesh: THREE.Mesh;
let prevTime = performance.now();
let cloudTexture: THREE.DataTexture3D | null = null;
let cloudTexture: THREE.Data3DTexture | null = null;

init();
animate();
Expand Down Expand Up @@ -44,7 +44,7 @@ function generateCloudTexture(size: number, scaleFactor = 1.0) {
}
}

return new THREE.DataTexture3D(data, size, size, size);
return new THREE.Data3DTexture(data, size, size, size);
}

function init() {
Expand Down Expand Up @@ -82,7 +82,7 @@ function init() {

// Texture

const texture = new THREE.DataTexture3D(
const texture = new THREE.Data3DTexture(
new Uint8Array(INITIAL_CLOUD_SIZE * INITIAL_CLOUD_SIZE * INITIAL_CLOUD_SIZE).fill(0),
INITIAL_CLOUD_SIZE,
INITIAL_CLOUD_SIZE,
Expand Down Expand Up @@ -290,7 +290,7 @@ function animate() {
const scaleFactor = (Math.random() + 0.5) * 0.5;
const source = generateCloudTexture(perElementPaddedSize, scaleFactor);

renderer.copyTextureToTexture3D(box, position, source, cloudTexture as THREE.DataTexture3D);
renderer.copyTextureToTexture3D(box, position, source, cloudTexture as THREE.Data3DTexture);

prevTime = time;

Expand Down

0 comments on commit 62862dd

Please sign in to comment.