package.webgl.PostProcessingPass.d.ts Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ol Show documentation
Show all versions of ol Show documentation
OpenLayers mapping library
The newest version!
export default WebGLPostProcessingPass;
export type Options = {
/**
* WebGL context; mandatory.
*/
webGlContext: WebGLRenderingContext;
/**
* Scale ratio; if < 1, the post process will render to a texture smaller than
* the main canvas that will then be sampled up (useful for saving resource on blur steps).
*/
scaleRatio?: number | undefined;
/**
* Vertex shader source
*/
vertexShader?: string | undefined;
/**
* Fragment shader source
*/
fragmentShader?: string | undefined;
/**
* Uniform definitions for the post process step
*/
uniforms?: {
[x: string]: import("./Helper").UniformValue;
} | undefined;
};
export type UniformInternalDescription = {
/**
* Value
*/
value: import("./Helper").UniformValue;
/**
* Location
*/
location: WebGLUniformLocation;
/**
* Texture
*/
texture?: WebGLTexture | undefined;
};
/**
* @typedef {Object} Options
* @property {WebGLRenderingContext} webGlContext WebGL context; mandatory.
* @property {number} [scaleRatio] Scale ratio; if < 1, the post process will render to a texture smaller than
* the main canvas that will then be sampled up (useful for saving resource on blur steps).
* @property {string} [vertexShader] Vertex shader source
* @property {string} [fragmentShader] Fragment shader source
* @property {Object} [uniforms] Uniform definitions for the post process step
*/
/**
* @typedef {Object} UniformInternalDescription
* @property {import("./Helper").UniformValue} value Value
* @property {WebGLUniformLocation} location Location
* @property {WebGLTexture} [texture] Texture
* @private
*/
/**
* @classdesc
* This class is used to define Post Processing passes with custom shaders and uniforms.
* This is used internally by {@link module:ol/webgl/Helper~WebGLHelper}.
*
* Please note that the final output on the DOM canvas is expected to have premultiplied alpha, which means that
* a pixel which is 100% red with an opacity of 50% must have a color of (r=0.5, g=0, b=0, a=0.5).
* Failing to provide pixel colors with premultiplied alpha will result in render anomalies.
*
* The default post-processing pass does *not* multiply color values with alpha value, it expects color values to be
* premultiplied.
*
* Default shaders are shown hereafter:
*
* * Vertex shader:
*
* ```
* precision mediump float;
*
* attribute vec2 a_position;
* varying vec2 v_texCoord;
* varying vec2 v_screenCoord;
*
* uniform vec2 u_screenSize;
*
* void main() {
* v_texCoord = a_position * 0.5 + 0.5;
* v_screenCoord = v_texCoord * u_screenSize;
* gl_Position = vec4(a_position, 0.0, 1.0);
* }
* ```
*
* * Fragment shader:
*
* ```
* precision mediump float;
*
* uniform sampler2D u_image;
* uniform float u_opacity;
*
* varying vec2 v_texCoord;
*
* void main() {
* gl_FragColor = texture2D(u_image, v_texCoord) * u_opacity;
* }
* ```
*/
declare class WebGLPostProcessingPass {
/**
* @param {Options} options Options.
*/
constructor(options: Options);
/**
* @private
*/
private gl_;
/**
* @private
*/
private scaleRatio_;
/**
* @type {WebGLTexture}
* @private
*/
private renderTargetTexture_;
/**
* @type {import('../size.js').Size|null}
* @private
*/
private renderTargetTextureSize_;
/**
* @private
*/
private frameBuffer_;
/**
* @private
*/
private depthBuffer_;
/**
* @private
*/
private renderTargetProgram_;
/**
* @private
*/
private renderTargetVerticesBuffer_;
/**
* @private
*/
private renderTargetAttribLocation_;
/**
* @private
*/
private renderTargetUniformLocation_;
/**
* @private
*/
private renderTargetOpacityLocation_;
/**
* @private
*/
private renderTargetTextureLocation_;
/**
* Holds info about custom uniforms used in the post processing pass
* @type {Array}
* @private
*/
private uniforms_;
getRenderTargetTexture(): WebGLTexture;
/**
* Get the WebGL rendering context
* @return {WebGLRenderingContext} The rendering context.
*/
getGL(): WebGLRenderingContext;
/**
* Initialize the render target texture of the post process, make sure it is at the
* right size and bind it as a render target for the next draw calls.
* The last step to be initialized will be the one where the primitives are rendered.
* @param {import("../Map.js").FrameState} frameState current frame state
*/
init(frameState: import("../Map.js").FrameState): void;
/**
* Render to the next postprocessing pass (or to the canvas if final pass).
* @param {import("../Map.js").FrameState} frameState current frame state
* @param {WebGLPostProcessingPass} [nextPass] Next pass, optional
* @param {function(WebGLRenderingContext, import("../Map.js").FrameState):void} [preCompose] Called before composing.
* @param {function(WebGLRenderingContext, import("../Map.js").FrameState):void} [postCompose] Called before composing.
*/
apply(frameState: import("../Map.js").FrameState, nextPass?: WebGLPostProcessingPass | undefined, preCompose?: ((arg0: WebGLRenderingContext, arg1: import("../Map.js").FrameState) => void) | undefined, postCompose?: ((arg0: WebGLRenderingContext, arg1: import("../Map.js").FrameState) => void) | undefined): void;
/**
* @return {WebGLFramebuffer} Frame buffer
*/
getFrameBuffer(): WebGLFramebuffer;
/**
* @return {WebGLRenderbuffer} Depth buffer
*/
getDepthBuffer(): WebGLRenderbuffer;
/**
* Sets the custom uniforms based on what was given in the constructor.
* @param {import("../Map.js").FrameState} frameState Frame state.
* @private
*/
private applyUniforms;
}
//# sourceMappingURL=PostProcessingPass.d.ts.map