import { Shader } from "./shader"; import "reflect-metadata"; import { MaterialType, SimpleTexturedMaterialClass } from "./material-type"; import "reflect-metadata"; import { BindingData, NumericUnifromTypes, TextureUniformTypes, UniformValueType } from "./types"; import { UniformType } from "./types"; import { Asset } from "./asset"; interface FieldProperty { key: string; value?: never; } interface DynamicProperty { key?: never; value: UniformValueType; } declare type PropertyReference = FieldProperty | DynamicProperty; declare type NumericProperty = PropertyReference & { type: T; location: WebGLUniformLocation | null; uploaded?: UniformValueType; }; declare type TextureProperty = PropertyReference & { type: T; location: WebGLUniformLocation | null; textureUnit: number; uploaded?: UniformValueType | null; uniformSet?: true; }; declare type PropertyInfo = NumericProperty | TextureProperty; export interface MaterialProperties { [uniformName: string]: PropertyInfo; } export declare class Material extends Asset { [key: string]: any; private _shader; properties: MaterialProperties; gl: WebGL2RenderingContext; private textureCount; 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; private uploadUniform; } export declare function shaderProp(name: string, type: UniformType): { (target: Function): void; (target: Object, propertyKey: string | symbol): void; }; export declare function MaterialFromShader(shader: Shader): typeof MaterialType; export declare function SimpleTexturedMaterial(shader: Shader): typeof SimpleTexturedMaterialClass; /** * * @deprecated */ export declare function materialDefine(constructor: T): T; export {};