feat: add setTransparencyMode to Dart Material class
This commit is contained in:
@@ -139,7 +139,14 @@ class FFIMaterialInstance extends MaterialInstance {
|
||||
|
||||
Future dispose() async {
|
||||
await withVoidCallback((cb) {
|
||||
SceneManager_destroyMaterialInstanceRenderThread(sceneManager, pointer, cb);
|
||||
SceneManager_destroyMaterialInstanceRenderThread(
|
||||
sceneManager, pointer, cb);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Future setTransparencyMode(TransparencyMode mode) async {
|
||||
MaterialInstance_setTransparencyMode(
|
||||
pointer, TTransparencyMode.values[mode.index]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,7 +70,28 @@ enum StencilFace {
|
||||
FRONT_AND_BACK
|
||||
}
|
||||
|
||||
enum AlphaMode { OPAQUE, MASK, BLEND }
|
||||
enum AlphaMode {
|
||||
OPAQUE,
|
||||
MASK,
|
||||
BLEND
|
||||
}
|
||||
|
||||
enum TransparencyMode {
|
||||
//! the transparent object is drawn honoring the raster state
|
||||
DEFAULT,
|
||||
/**
|
||||
* the transparent object is first drawn in the depth buffer,
|
||||
* then in the color buffer, honoring the culling mode, but ignoring the depth test function
|
||||
*/
|
||||
TWO_PASSES_ONE_SIDE,
|
||||
|
||||
/**
|
||||
* the transparent object is drawn twice in the color buffer,
|
||||
* first with back faces only, then with front faces; the culling
|
||||
* mode is ignored. Can be combined with two-sided lighting
|
||||
*/
|
||||
TWO_PASSES_TWO_SIDES
|
||||
}
|
||||
|
||||
abstract class Material {
|
||||
Future<MaterialInstance> createInstance();
|
||||
@@ -115,6 +136,7 @@ abstract class MaterialInstance {
|
||||
Future setStencilReadMask(int mask);
|
||||
Future setStencilWriteMask(int mask);
|
||||
|
||||
Future dispose();
|
||||
Future setTransparencyMode(TransparencyMode mode);
|
||||
|
||||
Future dispose();
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@ extern "C"
|
||||
INVERT // Invert the current value
|
||||
};
|
||||
|
||||
// StencilFace equivalent
|
||||
enum TStencilFace
|
||||
{
|
||||
STENCIL_FACE_FRONT = 1,
|
||||
@@ -43,7 +42,6 @@ extern "C"
|
||||
STENCIL_FACE_FRONT_AND_BACK = 3
|
||||
};
|
||||
|
||||
// Add these enum definitions at the top with the other enums
|
||||
enum TCullingMode
|
||||
{
|
||||
CULLING_MODE_NONE = 0,
|
||||
@@ -52,6 +50,23 @@ extern "C"
|
||||
CULLING_MODE_FRONT_AND_BACK
|
||||
};
|
||||
|
||||
enum TTransparencyMode {
|
||||
//! the transparent object is drawn honoring the raster state
|
||||
DEFAULT,
|
||||
/**
|
||||
* the transparent object is first drawn in the depth buffer,
|
||||
* then in the color buffer, honoring the culling mode, but ignoring the depth test function
|
||||
*/
|
||||
TWO_PASSES_ONE_SIDE,
|
||||
|
||||
/**
|
||||
* the transparent object is drawn twice in the color buffer,
|
||||
* first with back faces only, then with front faces; the culling
|
||||
* mode is ignored. Can be combined with two-sided lighting
|
||||
*/
|
||||
TWO_PASSES_TWO_SIDES
|
||||
};
|
||||
|
||||
EMSCRIPTEN_KEEPALIVE TMaterialInstance *Material_createInstance(TMaterial *tMaterial);
|
||||
EMSCRIPTEN_KEEPALIVE bool MaterialInstance_isStencilWriteEnabled(TMaterialInstance *materialInstance);
|
||||
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setStencilWrite(TMaterialInstance *materialInstance, bool enabled);
|
||||
@@ -98,6 +113,10 @@ extern "C"
|
||||
TMaterialInstance *materialInstance,
|
||||
uint8_t mask);
|
||||
|
||||
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setTransparencyMode(
|
||||
TMaterialInstance *materialInstance,
|
||||
TTransparencyMode transparencyMode);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -139,6 +139,14 @@ namespace thermion
|
||||
auto *instance = reinterpret_cast<::filament::MaterialInstance *>(materialInstance);
|
||||
instance->setStencilWriteMask(mask);
|
||||
}
|
||||
|
||||
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setTransparencyMode(
|
||||
TMaterialInstance *materialInstance,
|
||||
TTransparencyMode transparencyMode)
|
||||
{
|
||||
auto *instance = reinterpret_cast<::filament::MaterialInstance *>(materialInstance);
|
||||
instance->setTransparencyMode((filament::TransparencyMode)transparencyMode);
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user