Skip to content

Commit

Permalink
WebGLRenderer: Support "Linear Display P3" working color space and "D…
Browse files Browse the repository at this point in the history
…isplay P3" unlit rendering (#608)
  • Loading branch information
Methuselah96 committed Sep 19, 2023
1 parent 0a221be commit 1572c35
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 26 deletions.
1 change: 1 addition & 0 deletions types/three/examples/jsm/capabilities/WebGL.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
export default class WebGL {
static isWebGLAvailable(): boolean;
static isWebGL2Available(): boolean;
static isColorSpaceAvailable(colorSpace: PredefinedColorSpace): boolean;
static getWebGLErrorMessage(): HTMLElement;
static getWebGL2ErrorMessage(): HTMLElement;
static getErrorMessage(version: number): HTMLElement;
Expand Down
2 changes: 1 addition & 1 deletion types/three/src/Three.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ export * from './math/Vector2.js';
export * from './math/Quaternion.js';
export * from './math/Color.js';
export * from './math/SphericalHarmonics3.js';
export { ColorManagement } from './math/ColorManagement.js';
export { ColorManagement, WorkingColorSpace, DefinedColorSpace } from './math/ColorManagement.js';
import * as MathUtils from './math/MathUtils.js';
export { MathUtils };
/**
Expand Down
8 changes: 8 additions & 0 deletions types/three/src/constants.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -724,6 +724,14 @@ export type ColorSpace =
| typeof DisplayP3ColorSpace
| typeof LinearDisplayP3ColorSpace;

export const LinearTransfer: 'linear';
export const SRGBTransfer: 'srgb';
export type ColorSpaceTransfer = typeof LinearTransfer | typeof SRGBTransfer;

export const Rec709Primaries: 'rec709';
export const P3Primaries: 'p3';
export type ColorSpacePrimaries = typeof Rec709Primaries | typeof P3Primaries;

// Stencil Op types
export const ZeroStencilOp: 0;
export const KeepStencilOp: 7680;
Expand Down
58 changes: 35 additions & 23 deletions types/three/src/math/ColorManagement.d.ts
Original file line number Diff line number Diff line change
@@ -1,34 +1,46 @@
import { ColorSpace, DisplayP3ColorSpace, LinearSRGBColorSpace, SRGBColorSpace } from '../constants.js';
import {
ColorSpace,
ColorSpacePrimaries,
ColorSpaceTransfer,
DisplayP3ColorSpace,
LinearDisplayP3ColorSpace,
LinearSRGBColorSpace,
SRGBColorSpace,
} from '../constants.js';
import { Color } from './Color.js';

export function SRGBToLinear(c: number): number;

export function LinearToSRGB(c: number): number;
export type WorkingColorSpace = typeof LinearSRGBColorSpace | typeof LinearDisplayP3ColorSpace;
export type DefinedColorSpace =
| typeof LinearSRGBColorSpace
| typeof SRGBColorSpace
| typeof LinearDisplayP3ColorSpace
| typeof DisplayP3ColorSpace;

export namespace ColorManagement {
export interface ColorManagement {
/**
* @default false
*/
let enabled: boolean;
enabled: boolean;

/**
* @default LinearSRGBColorSpace
*/
let workingColorSpace: ColorSpace;

function convert(
color: Color,
sourceColorSpace: typeof SRGBColorSpace | typeof LinearSRGBColorSpace | typeof DisplayP3ColorSpace,
targetColorSpace: typeof SRGBColorSpace | typeof LinearSRGBColorSpace | typeof DisplayP3ColorSpace,
): Color;

function fromWorkingColorSpace(
color: Color,
targetColorSpace: typeof SRGBColorSpace | typeof LinearSRGBColorSpace | typeof DisplayP3ColorSpace,
): Color;

function toWorkingColorSpace(
color: Color,
sourceColorSpace: typeof SRGBColorSpace | typeof LinearSRGBColorSpace | typeof DisplayP3ColorSpace,
): Color;
get workingColorSpace(): WorkingColorSpace;
set workingSpaceColor(colorSpace: WorkingColorSpace);

convert: (color: Color, sourceColorSpace: DefinedColorSpace, targetColorSpace: DefinedColorSpace) => Color;

fromWorkingColorSpace: (color: Color, targetColorSpace: DefinedColorSpace) => Color;

toWorkingColorSpace: (color: Color, sourceColorSpace: DefinedColorSpace) => Color;

getPrimaries: (colorSpace: DefinedColorSpace) => ColorSpacePrimaries;

getTransfer: (colorSpace: ColorSpace) => ColorSpaceTransfer;
}

export const ColorManagement: ColorManagement;

export function SRGBToLinear(c: number): number;

export function LinearToSRGB(c: number): number;
3 changes: 2 additions & 1 deletion types/three/src/renderers/WebGLRenderer.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,8 @@ export class WebGLRenderer implements Renderer {
* {@link SRGBColorSpace} and {@link LinearSRGBColorSpace}.
* @default THREE.SRGBColorSpace.
*/
outputColorSpace: ColorSpace;
get outputColorSpace(): ColorSpace;
set outputColorSpace(colorSpace: ColorSpace);

get coordinateSystem(): typeof WebGLCoordinateSystem;

Expand Down
2 changes: 1 addition & 1 deletion types/three/src/renderers/webgl/WebGLProgram.d.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { WebGLRenderer } from './../WebGLRenderer.js';
import { WebGLRenderer } from '../WebGLRenderer.js';
import { WebGLShader } from './WebGLShader.js';
import { WebGLUniforms } from './WebGLUniforms.js';

Expand Down

0 comments on commit 1572c35

Please sign in to comment.