import { StringKeyList } from "../longan/gs.collections"; import { IPersistenceManager } from "../interfaces"; import { ShaderProgram, ivec2, ivec3, ivec4, mat2, mat3, mat4, vec2, vec3, vec4, Geometry, Mesh, UniformBlock } from "../rendering/renderContext"; import { AssetBase } from "./assetBase"; import systemDeclaration from "../shaders/includes/systemDeclaration.fx"; import { ShaderDefineType } from "../longan/gs.types"; export declare enum ShaderPropertyType { float = 1, vec2 = 2, vec3 = 3, vec4 = 4, double = 5, dvec2 = 6, dvec3 = 7, dvec4 = 8, int = 9, ivec2 = 10, ivec3 = 11, ivec4 = 12, uint = 13, uvec2 = 14, uvec3 = 15, uvec4 = 16, bool = 17, bvec2 = 18, bvec3 = 19, bvec4 = 20, mat2 = 21, mat3 = 22, mat4 = 23, floatArray = 24, intArray = 25, boolArray = 26, vec3Array = 27, vec4Array = 28, texture = 29, textureArray = 30, sampler2D = 31, sampler2DArray = 32, samplerCube = 33, loading = 34, sphericalHarmonics = 35, ubo = 36 } export declare enum ShaderStateType { /** [0, 0, width, height] 设置视图 */ Viewport = 1, /** Back | Front | On | Off 设置剔除模式:剔除背面 | 正面 | 关闭剔除 */ Cull = 2, /** CCW | CW 设置正面绕向: 逆时针 | 顺时针 */ FrontFace = 3, /** Never | Less | Greater | LessEqual | GeaterEqual | Equal | NotEqual | Always 开启深度测试,设置深度测试的比较函数 */ ZTest = 4, /** On | Off 开启 | 关闭深度写入 */ ZWrite = 5, /** On | Off | SrcFactor | DstFactor 开启并设置混合模式,生成的颜色乘以SrcFactor。屏幕上已有的颜色乘以DstFactor,两者相加 */ Blend = 6, /** [0, 1] 设置深度范围*/ ZRange = 7 } export declare class ShaderProperty { name: string; type: ShaderPropertyType; value: boolean | number | vec2 | vec3 | vec4 | mat2 | mat3 | mat4 | ivec2 | ivec3 | ivec4 | WebGLTexture; slot?: number; propertyName?: string; ubo?: UniformBlock; } export declare class ShaderState { type: ShaderStateType; value: any; propertyName?: string; } export interface IShaderProperties { get viewer(): any; get properties(): any; } export declare class PropertyCollection { private owner; _items: ShaderProperty[]; _itemNames: StringKeyList; _setItems: ShaderProperty[]; get count(): number; get setCount(): number; constructor(owner: IShaderProperties); private getValue; private convertProperty; add(...value: ShaderProperty[]): void; addRange(values: ShaderProperty[]): void; insert(index: number, value: ShaderProperty): void; remove(value: ShaderProperty | string): boolean; clear(): void; get(name: string): ShaderProperty; has(name: string): boolean; cloneProperty(prop: ShaderProperty): ShaderProperty; set(name: string, type: ShaderPropertyType, value?: boolean | number | vec2 | vec3 | vec4 | mat2 | mat3 | mat4 | ivec2 | ivec3 | ivec4 | WebGLTexture, slot?: number): void; } export interface IShaderStates { get viewer(): any; get properties(): any; } export declare class StateCollection { private owner; _items: ShaderState[]; get count(): number; constructor(owner: IShaderProperties); private getValue; private convertState; add(...value: ShaderState[]): void; addRange(values: ShaderState[]): void; insert(index: number, value: ShaderState): void; remove(value: ShaderState): boolean; clear(): void; get(type: ShaderStateType): ShaderState; has(type: ShaderStateType): boolean; cloneState(state: ShaderState): ShaderState; } export declare class DefineCollection { private _shader; _items: StringKeyList; get count(): number; constructor(shader: Shader); add(name: string, value?: ShaderDefineType): void; addRange(values: any): void; remove(value: string): boolean; clear(): void; has(define: string): boolean; } export declare class ProcessingCollection { private _shader; _items: StringKeyList; get count(): number; constructor(shader: Shader); add(name: string, value: string): void; addRange(values: any): void; remove(value: string): boolean; clear(): void; has(name: string): boolean; } export declare class Shader extends AssetBase implements IShaderProperties { typeName: string; static includes: Record; protected _name: string; protected _shaderProgram: ShaderProgram; protected _properties: PropertyCollection; protected _defaultProperties: PropertyCollection; protected _states: StateCollection; protected _defines: DefineCollection; protected _vertex: string; protected _fragment: string; protected _vertexPreProcessing: ProcessingCollection; protected _vertexPostProcessing: ProcessingCollection; protected _fragmentPreProcessing: ProcessingCollection; protected _fragmentPostProcessing: ProcessingCollection; get name(): string; set name(value: string); get properties(): PropertyCollection; get states(): StateCollection; get defines(): DefineCollection; get vertex(): string; set vertex(value: string); get fragment(): string; set fragment(value: string); get program(): ShaderProgram; get vertexPreProcessing(): ProcessingCollection; get vertexPostProcessing(): ProcessingCollection; get fragmentPreProcessing(): ProcessingCollection; get fragmentPostProcessing(): ProcessingCollection; constructor(); setDefaultProperties(): void; setProperties(props: PropertyCollection): void; setStates(): void; unsetStates(): void; createShaderProgram(feedbackVars?: string[]): void; setProgram(): this; destroyProgram(): void; createGeometry(mesh: Mesh): Geometry; destoryGeometry(geometry: Geometry): void; setVariableFloat(name: string, value: number): this; setVariableVec2(name: string, value: vec2): this; setVariableVec3(name: string, value: vec3): this; setVariableVec4(name: string, value: vec4): this; setVariableMat4(name: string, value: mat4): this; drawGeometry(geometry: Geometry): this; static from(obj: any): Shader; serialize(pm?: IPersistenceManager): any; deserialize(obj: any, pm?: IPersistenceManager): void; private processIncludes; private replaceMultiple; static initIncludes(): void; static GetIncludeSource(name: string): typeof systemDeclaration; }