import { Shader, ShaderPipelineStateSettinsOptional, StateSettings } from "./shader"; import "reflect-metadata"; import { SimpleTexturedMaterialClass } from "./material-type"; import "reflect-metadata"; import { BindingData, NumericUniformArrayTypes, NumericUnifromTypes, TextureArrayUniformTypes, TextureUniformTypes, UniformValueType } from "./types"; import { UniformType } from "./types"; import { Asset } from "./asset"; import { BufferStructure } from "./array-buffer"; import { DefaultVertexData } from "./mesh"; declare type UniformPropertyStorageType = T extends TextureUniformTypes | NumericUnifromTypes ? UniformValueType : T extends NumericUniformArrayTypes ? Float32Array : never; interface FieldProperty { key: string; value?: never; } interface DynamicProperty { key?: never; value: UniformValueType; } declare type PropertyReference = FieldProperty | DynamicProperty; declare type PropertyBase = PropertyReference & { type: T; location: WebGLUniformLocation | null; }; declare type NumericProperty = PropertyBase & { uploaded?: UniformPropertyStorageType; }; declare type VectorArrayProperty = PropertyBase & { uploaded?: UniformValueType; buffer: Float32Array; }; declare type TextureProperty = PropertyBase & { uploaded?: number; }; declare type TextureArrayProperty = PropertyBase & { uploaded?: number[]; }; declare type PropertyInfo = T extends NumericUnifromTypes ? NumericProperty : T extends NumericUniformArrayTypes ? VectorArrayProperty : T extends TextureUniformTypes ? TextureProperty : T extends TextureArrayUniformTypes ? TextureArrayProperty : never; export interface MaterialProperties { [uniformName: string]: PropertyInfo; } export declare class Material extends Asset { [key: string]: any; private _shader; properties: MaterialProperties; gl: WebGL2RenderingContext; pipelineStateOverride: StateSettings; private textureCount; private boundTextures; protected initialized: boolean; constructor(shader: Shader, gl?: WebGL2RenderingContext); get shader(): Shader; upload(data: BindingData): void; setProp(uniformName: string, type: T, value: UniformValueType): void; /** * Unbind all render textures from active texture slot due to avoid * 'Feedback loop formed between Framebuffer and active Texture' in chrome since version 83 */ unbindRenderTextures(): void; protected tryInit(required?: boolean): boolean; setUniformDirectly(uniformName: string, type: T, value: UniformValueType): void; private getOrCreatePropInfo; setPipelineStateOverride(settings: ShaderPipelineStateSettinsOptional): void; private setupPipelineStateOverride; private uploadUniform; private bindNextTexture; private setVectorUniformBuffer; } export declare function shaderProp(name: string, type: UniformType): { (target: Function): void; (target: Object, propertyKey: string | symbol): void; }; export declare function MaterialFromShader(base_shader: Shader): new (gl?: WebGL2RenderingContext) => Material; export declare function SimpleTexturedMaterial(shader: Shader): typeof SimpleTexturedMaterialClass; /** * * @deprecated */ export declare function materialDefine(constructor: T): T; export {};