Skip to main content

Class: MaterialFactory<TModuleProps, TBindings>

Defined in: modules/engine/src/material/material-factory.ts:66

Creates typed Material instances for a stable material binding schema.

Examples​

const pbrFactory = new MaterialFactory<
{pbrMaterial: PBRMaterialUniforms},
PBRMaterialBindings
>(device, {modules: [pbrMaterial]});
const pbr = pbrFactory.createMaterial();
pbr.setProps({pbrMaterial: {baseColorFactor: [1, 0, 0, 1]}});
const pbrVariant = pbr.clone({bindings: {pbr_baseColorSampler: texture}});
const phongFactory = new MaterialFactory<
{phongMaterial: PhongMaterialProps},
{}
>(device, {modules: [phongMaterial]});
const phong = phongFactory.createMaterial();
phong.setProps({phongMaterial: {ambient: 0.4, diffuse: 0.7}});
const phongVariant = phong.clone({moduleProps: {phongMaterial: {shininess: 64}}});
const gouraudFactory = new MaterialFactory<
{gouraudMaterial: GouraudMaterialProps},
{}
>(device, {modules: [gouraudMaterial]});
const gouraud = gouraudFactory.createMaterial();
gouraud.setProps({gouraudMaterial: {ambient: 0.25}});
const gouraudVariant = gouraud.clone({moduleProps: {gouraudMaterial: {diffuse: 0.8}}});

Type Parameters​

TModuleProps​

TModuleProps extends MaterialModuleProps = MaterialModuleProps

TBindings​

TBindings extends MaterialBindings = MaterialBindings

Constructors​

Constructor​

new MaterialFactory<TModuleProps, TBindings>(device, props?): MaterialFactory<TModuleProps, TBindings>

Defined in: modules/engine/src/material/material-factory.ts:78

Parameters​

device​

Device

props?​

MaterialFactoryProps = {}

Returns​

MaterialFactory<TModuleProps, TBindings>

Properties​

device​

readonly device: Device

Defined in: modules/engine/src/material/material-factory.ts:71

Device that creates materials for this schema.


modules​

readonly modules: ShaderModule[]

Defined in: modules/engine/src/material/material-factory.ts:73

Shader modules that define the material schema.

Methods​

createMaterial()​

createMaterial(props?): Material<TModuleProps, TBindings>

Defined in: modules/engine/src/material/material-factory.ts:90

Creates one typed material instance for this factory's schema.

Parameters​

props?​

Omit<MaterialProps<TModuleProps, TBindings>, "factory" | "modules"> = {}

Returns​

Material<TModuleProps, TBindings>


getBindingNames()​

getBindingNames(): string[]

Defined in: modules/engine/src/material/material-factory.ts:100

Returns the logical material-owned resource binding names.

Returns​

string[]


getBindingsByGroup()​

getBindingsByGroup(bindings): BindingsByGroup

Defined in: modules/engine/src/material/material-factory.ts:120

Packages resolved material bindings into bind group 3.

Parameters​

bindings​

Partial<{ [K in string | number | symbol]: Binding }> & Record<string, Binding>

Returns​

BindingsByGroup


ownsBinding()​

ownsBinding(bindingName): boolean

Defined in: modules/engine/src/material/material-factory.ts:105

Returns true when the supplied binding belongs to this material schema.

Parameters​

bindingName​

string

Returns​

boolean


ownsModule()​

ownsModule(moduleName): boolean

Defined in: modules/engine/src/material/material-factory.ts:115

Returns true when the supplied shader module is owned by this material schema.

Parameters​

moduleName​

string

Returns​

boolean