@novorender/api / RenderContext
Class: RenderContext
Defined in: @novorender/src/core3d/context.ts:66
The view specific context for rendering and picking.
Remarks
A render context describes a view into which a RenderState can be rendered. It is tightly bound to a HTML canvas and WebGL2RenderingContext. Consequently, it will be disposed if the gl context is lost and recreated when the gl context is restored.
The render context must be initialized with an array of render modules. Unused modules may be removed and custom ones inserted here. Ordering the modules correctly is important as they are rendered in order. The TonemapModule should be last, as it will copy the HDR render buffers into the output canvas to make things visible.
Features such as async picking and shader linking requires poll to be called at regular intervals, e.g. at the start of each frame. Otherwise the promises will never be resolved.
Accessors
height
Get Signature
get height(): number;
Defined in: @novorender/src/core3d/context.ts:432
Return the current pixel height of the drawing buffer.
Returns
number
width
Get Signature
get width(): number;
Defined in: @novorender/src/core3d/context.ts:427
Return the current pixel width of the drawing buffer.
Returns
number
Methods
clearPickBuffers()
clearPickBuffers(): void;
Defined in: @novorender/src/core3d/context.ts:938
Returns
void
dispose()
dispose(): void;
Defined in: @novorender/src/core3d/context.ts:401
Dispose of the GPU resources used by this context, effectively destroying it and freeing up memory.
Returns
void
Remarks
Calling this method is optional as the garbage collection of the underlying WebGL render context will do the same thing. This may take some time, however, so calling this function is recommended if you plan to create a new context shortly thereafter.
getDeviations()
getDeviations(): Promise<DeviationSample[]>;
Defined in: @novorender/src/core3d/context.ts:1010
scan the pick buffer for deviation values
Returns
Promise
<DeviationSample
[]>
Return pixel coordinates and deviation values for any deviation on screen
getLinearDepths()
getLinearDepths(pick): IterableIterator<number>;
Defined in: @novorender/src/core3d/context.ts:999
Parameters
Parameter | Type |
---|---|
pick | Uint32Array |
Returns
IterableIterator
<number
>
getNonParametricEdgeDirAtPoints()
getNonParametricEdgeDirAtPoints(points, tolerance): Promise<undefined | (null | ReadonlyVec3)[]>;
Defined in: @novorender/src/core3d/context.ts:1642
Parameters
Parameter | Type |
---|---|
points | object [] |
tolerance | number |
Returns
Promise
<undefined
| (null
| ReadonlyVec3
)[]>
getOutlines()
getOutlines(): Promise<OutlineSample[]>;
Defined in: @novorender/src/core3d/context.ts:1066
scan the pick buffer for pixels from clipping outline
Returns
Promise
<OutlineSample
[]>
Return pixel coordinates and world position for any clipping outline on screen
hasStateChanged()
hasStateChanged(state): boolean;
Defined in: @novorender/src/core3d/context.ts:554
Helper function to check for changes in render state.
Parameters
Parameter | Type | Description |
---|---|---|
state | Partial <DerivedRenderState > | The parts of the render state to check for changes. |
Returns
boolean
True if any of the specified parts has changed since last frame.
Remarks
Since the render state is immutable, any changes will automatically trickle up to the container object as well. Thus, this function does a shallow strict equality of the parts of the renderstate specified in the state parameter.
Example
Example of how to check for changes in either camera or output render state.
const {camera, output} = renderState;
if(renderContext.hasStateChanged({camera, output})) {
// update related GPU state here...
}
init()
init(modules?, showWatermark?): Promise<void>;
Defined in: @novorender/src/core3d/context.ts:344
Initialize render context with specified render modules.
Parameters
Parameter | Type | Default value | Description |
---|---|---|---|
modules? | readonly RenderModule [] | undefined | - |
showWatermark? | boolean | true | false filters out the watermark module regardless if the modules are provided or not. |
Returns
Promise
<void
>
Remarks
The default/built-in render modules can be retrieved using createDefaultModules. These will be used if no modules are specified. Developers may introduce their own render modules here. Note that the order of the modules matters, as this is the order by which they will be rendered.
isContextLost()
isContextLost(): boolean;
Defined in: @novorender/src/core3d/context.ts:477
Query whether the underlying WebGL render context is currently lost.
Returns
boolean
Remarks
This could occur when too many resources are allocated or when browser window is dragged across screens. Loss and restoration of WebGL contexts is supported by this API automatically.
isPickBuffersRendered()
isPickBuffersRendered(): boolean;
Defined in: @novorender/src/core3d/context.ts:448
Query if pick buffers are rendered. Means pick buffer is rendered, but not yet copied to CPU.
Returns
boolean
Remarks
This could be useful for optimistic/non-async picking.
isPickBuffersUpToDate()
isPickBuffersUpToDate(): boolean;
Defined in: @novorender/src/core3d/context.ts:456
Query if pick buffers are up to date. Means it's valid and it represents current (latest) frame.
Returns
boolean
Remarks
This could be useful for optimistic/non-async picking.
isPickBuffersValid()
isPickBuffersValid(): boolean;
Defined in: @novorender/src/core3d/context.ts:440
Query if pick buffers are valid. Valid means that the buffer is filled (not just arrays with zeros) and represents correct resolution.
Returns
boolean
Remarks
This could be useful for optimistic/non-async picking.
isSceneResolved()
isSceneResolved(): boolean;
Defined in: @novorender/src/core3d/context.ts:463
The scene is considered resolved when all currently split nodes are done downloading.
Returns
boolean
makeProgramAsync()
makeProgramAsync(resourceBin, params): Promise<WebGLProgram>;
Defined in: @novorender/src/core3d/context.ts:574
Compile WebGL/GLSL shader program asynchronously.
Parameters
Parameter | Type |
---|---|
resourceBin | ResourceBin |
params | AsyncProgramParams |
Returns
Promise
<WebGLProgram
>
pick()
pick(
x,
y,
options?): Promise<PickSample[]>;
Defined in: @novorender/src/core3d/context.ts:1585
Pick information about underlying object and geometry.
Parameters
Parameter | Type | Description |
---|---|---|
x | number | Center x coordinate in CSS pixels. |
y | number | Center y coordinate in CSS pixels. |
options? | PickOptions | More details of pick operation. |
Returns
Promise
<PickSample
[]>
A set of pick samples of the specified sample disc.
poll()
poll(): void;
Defined in: @novorender/src/core3d/context.ts:694
Poll the status of WebGL pick fences and timers and resolve associated promises when possible.
Returns
void
render()
render(state): Promise<RenderStatistics>;
Defined in: @novorender/src/core3d/context.ts:746
Render a new frame using the specified render state.
Parameters
Parameter | Type | Description |
---|---|---|
state | RenderState | An object describing what the frame should look like. |
Returns
Promise
<RenderStatistics
>
A promise to the performance related statistics involved in rendering this frame.
renderPickBuffers()
renderPickBuffers(): void;
Defined in: @novorender/src/core3d/context.ts:948
Returns
void
resourceBin()
resourceBin(name): ResourceBin;
Defined in: @novorender/src/core3d/context.ts:569
Create a new named resource bin.
Parameters
Parameter | Type |
---|---|
name | string |
Returns
ResourceBin
setPolygonFillMode()
setPolygonFillMode(mode): void;
Defined in: @novorender/src/core3d/context.ts:1634
Parameters
Parameter | Type |
---|---|
mode | "FILL" | "LINE" |
Returns
void
updateIBLTextures()
updateIBLTextures(params): void;
Defined in: @novorender/src/core3d/context.ts:509
Explicitly update WebGL IBL textures from specified parameters.
Parameters
Parameter | Type |
---|---|
params | | null | { diffuse : TextureParamsCubeUncompressed ; specular : TextureParamsCubeUncompressedMipMapped ; } |
Returns
void
updateUniformBuffer()
updateUniformBuffer(uniformBuffer, proxy): void;
Defined in: @novorender/src/core3d/context.ts:493
Helper function to update WebGL uniform buffer from proxies.
Parameters
Parameter | Type |
---|---|
uniformBuffer | WebGLBuffer |
proxy | UniformsProxy |
Returns
void
nextFrame()
static nextFrame(context): Promise<number>;
Defined in: @novorender/src/core3d/context.ts:725
Wait for the next frame to be ready for rendering.
Parameters
Parameter | Type | Description |
---|---|---|
context | undefined | RenderContext | render context to wait for, if any. |
Returns
Promise
<number
>
Remarks
Use this function instead of requestAnimationFrame()!
Properties
buffers
buffers: RenderBuffers;
Defined in: @novorender/src/core3d/context.ts:173
WebGL render and pick buffers
Remarks
Note that these buffers will be recreated whenever the RenderState.output size changes.
cameraUniforms
readonly cameraUniforms: WebGLBuffer;
Defined in: @novorender/src/core3d/context.ts:132
WebGL uniform buffer for camera related uniforms.
canvas
readonly canvas: HTMLCanvasElement;
Defined in: @novorender/src/core3d/context.ts:204
The HTML canvas used for this context.
changed
changed: boolean = true;
Defined in: @novorender/src/core3d/context.ts:166
Set to true to force a re-render when state not contained in RenderState has changed, e.g. download complete etc.
clippingUniforms
readonly clippingUniforms: WebGLBuffer;
Defined in: @novorender/src/core3d/context.ts:134
WebGL uniform buffer for clipping related uniforms.
commonChunk
readonly commonChunk: string;
Defined in: @novorender/src/core3d/context.ts:70
WebGL common GLSL code header used across shaders.
currentState
currentState: undefined | DerivedRenderState;
Defined in: @novorender/src/core3d/context.ts:163
RenderState used to make the newest state available during render.
defaultIBLTextureParams
readonly defaultIBLTextureParams: TextureParamsCubeUncompressed;
Defined in: @novorender/src/core3d/context.ts:72
WebGL basic fallback IBL textures to use while loading proper IBL textures.
deviceProfile
readonly deviceProfile: DeviceProfile;
Defined in: @novorender/src/core3d/context.ts:202
The device profile use for this context.
gl
readonly gl: WebGL2RenderingContext;
Defined in: @novorender/src/core3d/context.ts:68
WebGL2 render context associated with this object.
iblTextures
iblTextures: object;
Defined in: @novorender/src/core3d/context.ts:181
WebGL textures used for image based lighting (IBL).
default
readonly default: boolean;
True if these are the default IBL textures.
diffuse
readonly diffuse: WebGLTexture;
WebGL cubemap texture containing the irradiance/diffuse values of current IBL environment.
numMipMaps
readonly numMipMaps: number;
mip maps in current specular texture.
specular
readonly specular: WebGLTexture;
WebGL cubemap texture containing the radiance/specular values of current IBL environment.
Remarks
Note that these buffers will be changed by the background module when download of the specified RenderState.background.url IBL textures completes.
The process to create the textures are similar to that of https://github.com/KhronosGroup/glTF-IBL-Sampler/
loaderWorker
readonly loaderWorker: Worker;
Defined in: @novorender/src/core3d/context.ts:193
lut_ggx
readonly lut_ggx: WebGLTexture;
Defined in: @novorender/src/core3d/context.ts:138
WebGL GGX/PBR shading lookup table texture.
lutGGXImage
readonly lutGGXImage: ImageBitmap;
Defined in: @novorender/src/core3d/context.ts:206
The lutGGX file.
outlineRenderers
outlineRenderers: WeakMap<ReadonlyVec4, OutlineRenderer>;
Defined in: @novorender/src/core3d/context.ts:153
outlineUniforms
readonly outlineUniforms: WebGLBuffer;
Defined in: @novorender/src/core3d/context.ts:136
WebGL uniform buffer for outline related uniforms.
prevState
prevState: undefined | DerivedRenderState;
Defined in: @novorender/src/core3d/context.ts:159
RenderState used to render the previous frame, if any.
samplerEnvMip
readonly samplerEnvMip: WebGLSampler;
Defined in: @novorender/src/core3d/context.ts:140
WebGL Sampler used to sample mip mapped IBL texture trilinear.
samplerMip
readonly samplerMip: WebGLSampler;
Defined in: @novorender/src/core3d/context.ts:142
WebGL Sampler used to sample mipmapped texture trilinear.
samplerMipRepeat
readonly samplerMipRepeat: WebGLSampler;
Defined in: @novorender/src/core3d/context.ts:144
WebGL Sampler used to sample mipmapped texture trilinear repeating UV.
samplerSingle
readonly samplerSingle: WebGLSampler;
Defined in: @novorender/src/core3d/context.ts:146
WebGL Sampler used to sample other, non-mipmapped IBL textures bilinear.
usePrepass
readonly usePrepass: false = false;
Defined in: @novorender/src/core3d/context.ts:119