UNPKG

@lightningjs/renderer

Version:
79 lines (78 loc) 3.1 kB
import type { Dimensions } from '../../../common/CommonTypes.js'; import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js'; import { CoreShader } from '../CoreShader.js'; import type { WebGlCoreCtxTexture } from './WebGlCoreCtxTexture.js'; import type { WebGlCoreRenderOp } from './WebGlCoreRenderOp.js'; import type { WebGlCoreRenderer } from './WebGlCoreRenderer.js'; import type { BufferCollection } from './internal/BufferCollection.js'; import { type ShaderOptions, type ShaderProgramSources } from './internal/ShaderUtils.js'; /** * Automatic shader prop for the dimensions of the Node being rendered * * @remarks * Shader's who's rendering depends on the dimensions of the Node being rendered * should extend this interface from their Prop interface type. */ export interface DimensionsShaderProp { /** * Dimensions of the Node being rendered (Auto-set by the renderer) * * @remarks * DO NOT SET THIS. It is set automatically by the renderer. * Any values set here will be ignored. */ $dimensions?: Dimensions; } export interface AlphaShaderProp { /** * Alpha of the Node being rendered (Auto-set by the renderer) * * @remarks * DO NOT SET THIS. It is set automatically by the renderer. * Any values set here will be ignored. */ $alpha?: number; } export declare abstract class WebGlCoreShader extends CoreShader { protected buffersBound: boolean; protected program: WebGLProgram; /** * Vertex Array Object * * @remarks * Used by WebGL2 Only */ protected vao: WebGLVertexArrayObject | undefined; protected renderer: WebGlCoreRenderer; protected glw: WebGlContextWrapper; protected attributeLocations: string[]; protected uniformLocations: Record<string, WebGLUniformLocation>; readonly supportsIndexedTextures: boolean; constructor(options: ShaderOptions); disableAttribute(location: number): void; disableAttributes(): void; /** * Given two sets of Shader props destined for this Shader, determine if they can be batched together * to reduce the number of draw calls. * * @remarks * This is used by the {@link WebGlCoreRenderer} to determine if it can batch multiple consecutive draw * calls into a single draw call. * * By default, this returns false (meaning no batching is allowed), but can be * overridden by child classes to provide more efficient batching. * * @param propsA * @param propsB * @returns */ canBatchShaderProps(propsA: Record<string, unknown>, propsB: Record<string, unknown>): boolean; bindRenderOp(renderOp: WebGlCoreRenderOp, props: Record<string, unknown> | null): void; getUniformLocation(name: string): WebGLUniformLocation | null; bindBufferCollection(buffer: BufferCollection): void; protected bindProps(props: Record<string, unknown>): void; bindTextures(textures: WebGlCoreCtxTexture[]): void; attach(): void; detach(): void; protected static shaderSources?: ShaderProgramSources; }