expose setParameterBool/hasParameter on material + instance

This commit is contained in:
Nick Fisher
2025-03-08 12:17:06 +08:00
parent 72711ee64f
commit e4de0f3ae0
5 changed files with 52 additions and 10 deletions

View File

@@ -22,6 +22,12 @@ class FFIMaterial extends Material {
Engine_destroyMaterialRenderThread(engine, pointer, cb);
});
}
@override
Future<bool> hasParameter(String propertyName) async {
return Material_hasParameter(
pointer, propertyName.toNativeUtf8().cast<Char>());
}
}
class FFIMaterialInstance extends MaterialInstance {
@@ -154,7 +160,13 @@ class FFIMaterialInstance extends MaterialInstance {
@override
Future setParameterTexture(String name, covariant FFITexture texture,
covariant FFITextureSampler sampler) async {
MaterialInstance_setParameterTexture(
pointer, name.toNativeUtf8().cast<Char>(), texture.pointer, sampler.pointer);
MaterialInstance_setParameterTexture(pointer,
name.toNativeUtf8().cast<Char>(), texture.pointer, sampler.pointer);
}
@override
Future setParameterBool(String name, bool value) async {
MaterialInstance_setParameterBool(
pointer, name.toNativeUtf8().cast<Char>(), value);
}
}

View File

@@ -13,6 +13,13 @@ external ffi.Pointer<TMaterialInstance> Material_createInstance(
ffi.Pointer<TMaterial> tMaterial,
);
@ffi.Native<ffi.Bool Function(ffi.Pointer<TMaterial>, ffi.Pointer<ffi.Char>)>(
isLeaf: true)
external bool Material_hasParameter(
ffi.Pointer<TMaterial> tMaterial,
ffi.Pointer<ffi.Char> propertyName,
);
@ffi.Native<ffi.Bool Function(ffi.Pointer<TMaterialInstance>)>(isLeaf: true)
external bool MaterialInstance_isStencilWriteEnabled(
ffi.Pointer<TMaterialInstance> materialInstance,
@@ -60,7 +67,7 @@ external void MaterialInstance_setDepthCulling(
ffi.Double, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true)
external void MaterialInstance_setParameterFloat4(
ffi.Pointer<TMaterialInstance> materialInstance,
ffi.Pointer<ffi.Char> name,
ffi.Pointer<ffi.Char> propertyName,
double x,
double y,
double w,
@@ -72,7 +79,7 @@ external void MaterialInstance_setParameterFloat4(
ffi.Double, ffi.Double)>(isLeaf: true)
external void MaterialInstance_setParameterFloat2(
ffi.Pointer<TMaterialInstance> materialInstance,
ffi.Pointer<ffi.Char> name,
ffi.Pointer<ffi.Char> propertyName,
double x,
double y,
);
@@ -82,7 +89,7 @@ external void MaterialInstance_setParameterFloat2(
ffi.Double)>(isLeaf: true)
external void MaterialInstance_setParameterFloat(
ffi.Pointer<TMaterialInstance> materialInstance,
ffi.Pointer<ffi.Char> name,
ffi.Pointer<ffi.Char> propertyName,
double value,
);
@@ -91,10 +98,19 @@ external void MaterialInstance_setParameterFloat(
ffi.Int)>(isLeaf: true)
external void MaterialInstance_setParameterInt(
ffi.Pointer<TMaterialInstance> materialInstance,
ffi.Pointer<ffi.Char> name,
ffi.Pointer<ffi.Char> propertyName,
int value,
);
@ffi.Native<
ffi.Void Function(ffi.Pointer<TMaterialInstance>, ffi.Pointer<ffi.Char>,
ffi.Bool)>(isLeaf: true)
external void MaterialInstance_setParameterBool(
ffi.Pointer<TMaterialInstance> materialInstance,
ffi.Pointer<ffi.Char> propertyName,
bool value,
);
@ffi.Native<
ffi.Void Function(ffi.Pointer<TMaterialInstance>, ffi.Pointer<ffi.Char>,
ffi.Pointer<TTexture>, ffi.Pointer<TTextureSampler>)>(isLeaf: true)

View File

@@ -93,6 +93,7 @@ enum TransparencyMode {
abstract class Material {
Future<MaterialInstance> createInstance();
Future<bool> hasParameter(String propertyName);
Future dispose();
}
@@ -106,6 +107,7 @@ abstract class MaterialInstance {
Future setParameterFloat2(String name, double x, double y);
Future setParameterFloat(String name, double x);
Future setParameterInt(String name, int value);
Future setParameterBool(String name, bool value);
Future setParameterTexture(
String name, covariant Texture texture, covariant TextureSampler sampler);

View File

@@ -68,16 +68,18 @@ extern "C"
};
EMSCRIPTEN_KEEPALIVE TMaterialInstance *Material_createInstance(TMaterial *tMaterial);
EMSCRIPTEN_KEEPALIVE bool Material_hasParameter(TMaterial *tMaterial, const char *propertyName);
EMSCRIPTEN_KEEPALIVE bool MaterialInstance_isStencilWriteEnabled(TMaterialInstance *materialInstance);
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setStencilWrite(TMaterialInstance *materialInstance, bool enabled);
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setCullingMode(TMaterialInstance *materialInstance, TCullingMode culling);
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setDepthWrite(TMaterialInstance *materialInstance, bool enabled);
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setDepthCulling(TMaterialInstance *materialInstance, bool enabled);
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat4(TMaterialInstance *materialInstance, const char *name, double x, double y, double w, double z);
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat2(TMaterialInstance *materialInstance, const char *name, double x, double y);
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat(TMaterialInstance *materialInstance, const char *name, double value);
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterInt(TMaterialInstance *materialInstance, const char *name, int value);
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat4(TMaterialInstance *materialInstance, const char *propertyName, double x, double y, double w, double z);
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat2(TMaterialInstance *materialInstance, const char *propertyName, double x, double y);
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat(TMaterialInstance *materialInstance, const char *propertyName, double value);
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterInt(TMaterialInstance *materialInstance, const char *propertyName, int value);
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterBool(TMaterialInstance *materialInstance, const char *propertyName, bool value);
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterTexture(TMaterialInstance *materialInstance, const char *propertyName, TTexture *texture, TTextureSampler *sampler);
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setDepthFunc(TMaterialInstance *materialInstance, TSamplerCompareFunc depthFunc);

View File

@@ -21,6 +21,11 @@ namespace thermion
return reinterpret_cast<TMaterialInstance *>(instance);
}
EMSCRIPTEN_KEEPALIVE bool Material_hasParameter(TMaterial *tMaterial, const char *propertyName) {
auto *material = reinterpret_cast<filament::Material *>(tMaterial);
return material->hasParameter(propertyName);
}
EMSCRIPTEN_KEEPALIVE bool MaterialInstance_isStencilWriteEnabled(TMaterialInstance *tMaterialInstance)
{
return reinterpret_cast<::filament::MaterialInstance *>(tMaterialInstance)->isStencilWriteEnabled();
@@ -61,6 +66,11 @@ namespace thermion
reinterpret_cast<::filament::MaterialInstance *>(materialInstance)->setParameter(propertyName, value);
}
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterBool(TMaterialInstance *materialInstance, const char *propertyName, bool value)
{
reinterpret_cast<::filament::MaterialInstance *>(materialInstance)->setParameter(propertyName, value);
}
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterTexture(TMaterialInstance *tMaterialInstance, const char *propertyName, TTexture* tTexture, TTextureSampler* tSampler) {
auto *materialInstance = reinterpret_cast<::filament::MaterialInstance *>(tMaterialInstance);
auto texture = reinterpret_cast<::filament::Texture*>(tTexture);