You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
5.5 KiB
163 lines
5.5 KiB
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: number;
|
|
/**
|
|
* 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<string,import("./Helper").UniformValue>} [uniforms] Uniform definitions for the post process step
|
|
*/
|
|
/**
|
|
* @typedef {Object} UniformInternalDescription
|
|
* @property {import("./Helper").UniformValue} value Value
|
|
* @property {number} 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;
|
|
* }
|
|
* ```
|
|
*
|
|
* @api
|
|
*/
|
|
declare class WebGLPostProcessingPass {
|
|
/**
|
|
* @param {Options} options Options.
|
|
*/
|
|
constructor(options: Options);
|
|
gl_: WebGLRenderingContext;
|
|
scaleRatio_: number;
|
|
renderTargetTexture_: WebGLTexture | null;
|
|
renderTargetTextureSize_: number[] | null;
|
|
frameBuffer_: WebGLFramebuffer | null;
|
|
renderTargetProgram_: WebGLProgram | null;
|
|
renderTargetVerticesBuffer_: WebGLBuffer | null;
|
|
renderTargetAttribLocation_: number;
|
|
renderTargetUniformLocation_: WebGLUniformLocation | null;
|
|
renderTargetOpacityLocation_: WebGLUniformLocation | null;
|
|
renderTargetTextureLocation_: WebGLUniformLocation | null;
|
|
/**
|
|
* Holds info about custom uniforms used in the post processing pass
|
|
* @type {Array<UniformInternalDescription>}
|
|
* @private
|
|
*/
|
|
private uniforms_;
|
|
/**
|
|
* Get the WebGL rendering context
|
|
* @return {WebGLRenderingContext} The rendering context.
|
|
* @api
|
|
*/
|
|
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
|
|
* @api
|
|
*/
|
|
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.
|
|
* @api
|
|
*/
|
|
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
|
|
* @api
|
|
*/
|
|
getFrameBuffer(): WebGLFramebuffer;
|
|
/**
|
|
* 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
|