diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index a85a96b430..df48dfe374 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -10,6 +10,7 @@ A new header is inserted each time a *tag* is created. - gltfio: fix glTF breaking issue - gltfio: recompute bounding boxes with morph targets - engine: primitives with `CullingMode::FRONT_AND_BACK` are now skipped. +- engine: add missing getters on `MaterialInstance` ## v1.28.2 diff --git a/android/filament-android/src/main/cpp/MaterialInstance.cpp b/android/filament-android/src/main/cpp/MaterialInstance.cpp index 458e458131..13561e0f50 100644 --- a/android/filament-android/src/main/cpp/MaterialInstance.cpp +++ b/android/filament-android/src/main/cpp/MaterialInstance.cpp @@ -452,3 +452,84 @@ Java_com_google_android_filament_MaterialInstance_nDuplicate(JNIEnv* env, jclass } return (jlong)mi; } + +extern "C" +JNIEXPORT jfloat JNICALL +Java_com_google_android_filament_MaterialInstance_nGetMaskThreshold(JNIEnv* env, jclass clazz, + jlong nativeMaterialInstance) { + // TODO: implement nGetMaskThreshold() + MaterialInstance* instance = (MaterialInstance*)nativeMaterialInstance; + return instance->getMaskThreshold(); +} + +extern "C" +JNIEXPORT jfloat JNICALL +Java_com_google_android_filament_MaterialInstance_nGetSpecularAntiAliasingVariance(JNIEnv* env, + jclass clazz, jlong nativeMaterialInstance) { + // TODO: implement nGetSpecularAntiAliasingVariance() + MaterialInstance* instance = (MaterialInstance*)nativeMaterialInstance; + return instance->getSpecularAntiAliasingVariance(); +} + +extern "C" +JNIEXPORT jfloat JNICALL +Java_com_google_android_filament_MaterialInstance_nGetSpecularAntiAliasingThreshold(JNIEnv* env, + jclass clazz, jlong nativeMaterialInstance) { + // TODO: implement nGetSpecularAntiAliasingThreshold() + MaterialInstance* instance = (MaterialInstance*)nativeMaterialInstance; + return instance->getSpecularAntiAliasingThreshold(); +} + +extern "C" +JNIEXPORT jboolean JNICALL +Java_com_google_android_filament_MaterialInstance_nIsDoubleSided(JNIEnv* env, jclass clazz, + jlong nativeMaterialInstance) { + // TODO: implement nIsDoubleSided() + MaterialInstance* instance = (MaterialInstance*)nativeMaterialInstance; + return instance->isDoubleSided(); +} + +extern "C" +JNIEXPORT jint JNICALL +Java_com_google_android_filament_MaterialInstance_nGetCullingMode(JNIEnv* env, jclass clazz, + jlong nativeMaterialInstance) { + // TODO: implement nGetCullingMode() + MaterialInstance* instance = (MaterialInstance*)nativeMaterialInstance; + return (jint)instance->getCullingMode(); +} + +extern "C" +JNIEXPORT jboolean JNICALL +Java_com_google_android_filament_MaterialInstance_nIsColorWriteEnabled(JNIEnv* env, jclass clazz, + jlong nativeMaterialInstance) { + // TODO: implement nIsColorWriteEnabled() + MaterialInstance* instance = (MaterialInstance*)nativeMaterialInstance; + return instance->isColorWriteEnabled(); +} + +extern "C" +JNIEXPORT jboolean JNICALL +Java_com_google_android_filament_MaterialInstance_nIsDepthWriteEnabled(JNIEnv* env, jclass clazz, + jlong nativeMaterialInstance) { + // TODO: implement nIsDepthWriteEnabled() + MaterialInstance* instance = (MaterialInstance*)nativeMaterialInstance; + return instance->isDepthWriteEnabled(); +} + +extern "C" +JNIEXPORT jboolean JNICALL +Java_com_google_android_filament_MaterialInstance_nIsStencilWriteEnabled(JNIEnv* env, jclass clazz, + jlong nativeMaterialInstance) { + // TODO: implement nIsStencilWriteEnabled() + MaterialInstance* instance = (MaterialInstance*)nativeMaterialInstance; + return instance->isStencilWriteEnabled(); +} + +extern "C" +JNIEXPORT jboolean JNICALL +Java_com_google_android_filament_MaterialInstance_nIsDepthCullingEnabled(JNIEnv* env, jclass clazz, + jlong nativeMaterialInstance) { + // TODO: implement nIsDepthCullingEnabled() + MaterialInstance* instance = (MaterialInstance*)nativeMaterialInstance; + return instance->isDepthCullingEnabled(); +} diff --git a/android/filament-android/src/main/java/com/google/android/filament/MaterialInstance.java b/android/filament-android/src/main/java/com/google/android/filament/MaterialInstance.java index 6fe56b4bad..bde26df5ac 100644 --- a/android/filament-android/src/main/java/com/google/android/filament/MaterialInstance.java +++ b/android/filament-android/src/main/java/com/google/android/filament/MaterialInstance.java @@ -24,6 +24,7 @@ import com.google.android.filament.proguard.UsedByNative; @UsedByNative("AssetLoader.cpp") public class MaterialInstance { + private static final Material.CullingMode[] sCullingModeValues = Material.CullingMode.values(); private Material mMaterial; private String mName; private long mNativeObject; @@ -473,6 +474,14 @@ public class MaterialInstance { nSetMaskThreshold(getNativeObject(), threshold); } + /** + * Gets the minimum alpha value a fragment must have to not be discarded when the blend + * mode is MASKED + */ + public float getMaskThreshold() { + return nGetMaskThreshold(getNativeObject()); + } + /** * Sets the screen space variance of the filter kernel used when applying specular * anti-aliasing. The default value is set to 0.15. The specified value should be between @@ -486,6 +495,14 @@ public class MaterialInstance { nSetSpecularAntiAliasingVariance(getNativeObject(), variance); } + /** + * Gets the screen space variance of the filter kernel used when applying specular + * anti-aliasing. + */ + public float getSpecularAntiAliasingVariance() { + return nGetSpecularAntiAliasingVariance(getNativeObject()); + } + /** * Sets the clamping threshold used to suppress estimation errors when applying specular * anti-aliasing. The default value is set to 0.2. The specified value should be between 0 @@ -499,6 +516,14 @@ public class MaterialInstance { nSetSpecularAntiAliasingThreshold(getNativeObject(), threshold); } + /** + * Gets the clamping threshold used to suppress estimation errors when applying specular + * anti-aliasing. + */ + public float getSpecularAntiAliasingThreshold() { + return nGetSpecularAntiAliasingThreshold(getNativeObject()); + } + /** * Enables or disables double-sided lighting if the parent Material has double-sided capability, * otherwise prints a warning. If double-sided lighting is enabled, backface culling is @@ -512,6 +537,14 @@ public class MaterialInstance { nSetDoubleSided(getNativeObject(), doubleSided); } + /** + * Returns whether double-sided lighting is enabled when the parent Material has double-sided + * capability. + */ + public boolean isDoubleSided() { + return nIsDoubleSided(getNativeObject()); + } + /** * Overrides the default triangle culling state that was set on the material. * @@ -519,10 +552,18 @@ public class MaterialInstance { * * Rasterization: culling */ - public void setCullingMode(Material.CullingMode mode) { + public void setCullingMode(@NonNull Material.CullingMode mode) { nSetCullingMode(getNativeObject(), mode.ordinal()); } + /** + * Returns the face culling mode. + */ + @NonNull + public Material.CullingMode getCullingMode() { + return sCullingModeValues[nGetCullingMode(getNativeObject())]; + } + /** * Overrides the default color-buffer write state that was set on the material. * @@ -534,6 +575,13 @@ public class MaterialInstance { nSetColorWrite(getNativeObject(), enable); } + /** + * Returns whether color write is enabled. + */ + public boolean isColorWriteEnabled() { + return nIsColorWriteEnabled(getNativeObject()); + } + /** * Overrides the default depth-buffer write state that was set on the material. * @@ -545,10 +593,27 @@ public class MaterialInstance { nSetDepthWrite(getNativeObject(), enable); } + /** + * Returns whether depth write is enabled. + */ + public boolean isDepthWriteEnabled() { + return nIsDepthWriteEnabled(getNativeObject()); + } + + /** + * Enables or Disable stencil writes + */ public void setStencilWrite(boolean enable) { nSetStencilWrite(getNativeObject(), enable); } + /** + * Returns whether stencil write is enabled. + */ + public boolean isStencilWriteEnabled() { + return nIsStencilWriteEnabled(getNativeObject()); + } + /** * Overrides the default depth testing state that was set on the material. * @@ -560,6 +625,13 @@ public class MaterialInstance { nSetDepthCulling(getNativeObject(), enable); } + /** + * Returns whether depth culling is enabled. + */ + public boolean isDepthCullingEnabled() { + return nIsDepthCullingEnabled(getNativeObject()); + } + /** * Sets the stencil comparison function (default is {@link TextureSampler.CompareFunction#ALWAYS}). * @@ -856,4 +928,15 @@ public class MaterialInstance { private static native long nGetMaterial(long nativeMaterialInstance); private static native long nDuplicate(long otherNativeMaterialInstance, String name); + + + private static native float nGetMaskThreshold(long nativeMaterialInstance); + private static native float nGetSpecularAntiAliasingVariance(long nativeMaterialInstance); + private static native float nGetSpecularAntiAliasingThreshold(long nativeMaterialInstance); + private static native boolean nIsDoubleSided(long nativeMaterialInstance); + private static native int nGetCullingMode(long nativeMaterialInstance); + private static native boolean nIsColorWriteEnabled(long nativeMaterialInstance); + private static native boolean nIsDepthWriteEnabled(long nativeMaterialInstance); + private static native boolean nIsStencilWriteEnabled(long nativeMaterialInstance); + private static native boolean nIsDepthCullingEnabled(long nativeMaterialInstance); } diff --git a/filament/include/filament/MaterialInstance.h b/filament/include/filament/MaterialInstance.h index 2e6ad27ec0..c2095e1c47 100644 --- a/filament/include/filament/MaterialInstance.h +++ b/filament/include/filament/MaterialInstance.h @@ -277,6 +277,12 @@ public: */ void setMaskThreshold(float threshold) noexcept; + /** + * Gets the minimum alpha value a fragment must have to not be discarded when the blend + * mode is MASKED + */ + float getMaskThreshold() const noexcept; + /** * Sets the screen space variance of the filter kernel used when applying specular * anti-aliasing. The default value is set to 0.15. The specified value should be between @@ -284,6 +290,12 @@ public: */ void setSpecularAntiAliasingVariance(float variance) noexcept; + /** + * Gets the screen space variance of the filter kernel used when applying specular + * anti-aliasing. + */ + float getSpecularAntiAliasingVariance() const noexcept; + /** * Sets the clamping threshold used to suppress estimation errors when applying specular * anti-aliasing. The default value is set to 0.2. The specified value should be between 0 @@ -291,6 +303,12 @@ public: */ void setSpecularAntiAliasingThreshold(float threshold) noexcept; + /** + * Gets the clamping threshold used to suppress estimation errors when applying specular + * anti-aliasing. + */ + float getSpecularAntiAliasingThreshold() const noexcept; + /** * Enables or disables double-sided lighting if the parent Material has double-sided capability, * otherwise prints a warning. If double-sided lighting is enabled, backface culling is @@ -298,36 +316,72 @@ public: */ void setDoubleSided(bool doubleSided) noexcept; + /** + * Returns whether double-sided lighting is enabled when the parent Material has double-sided + * capability. + */ + bool isDoubleSided() const noexcept; + /** * Specifies how transparent objects should be rendered (default is DEFAULT). */ void setTransparencyMode(TransparencyMode mode) noexcept; + /** + * Returns the transparency mode. + */ + TransparencyMode getTransparencyMode() const noexcept; + /** * Overrides the default triangle culling state that was set on the material. */ void setCullingMode(CullingMode culling) noexcept; + /** + * Returns the face culling mode. + */ + CullingMode getCullingMode() const noexcept; + /** * Overrides the default color-buffer write state that was set on the material. */ void setColorWrite(bool enable) noexcept; + /** + * Returns whether color write is enabled. + */ + bool isColorWriteEnabled() const noexcept; + /** * Overrides the default depth-buffer write state that was set on the material. */ void setDepthWrite(bool enable) noexcept; + /** + * Returns whether depth write is enabled. + */ + bool isDepthWriteEnabled() const noexcept; + /** * Overrides the default depth testing state that was set on the material. */ void setDepthCulling(bool enable) noexcept; + /** + * Returns whether depth culling is enabled. + */ + bool isDepthCullingEnabled() const noexcept; + /** * Overrides the default stencil-buffer write state that was set on the material. */ void setStencilWrite(bool enable) noexcept; + /** + * Returns whether stencil write is enabled. + */ + bool isStencilWriteEnabled() const noexcept; + /** * Sets the stencil comparison function (default is StencilCompareFunc::A). * diff --git a/filament/src/MaterialInstance.cpp b/filament/src/MaterialInstance.cpp index b5ece203c3..ec3e3ea931 100644 --- a/filament/src/MaterialInstance.cpp +++ b/filament/src/MaterialInstance.cpp @@ -292,4 +292,44 @@ MaterialInstance* MaterialInstance::duplicate(MaterialInstance const* other, con } +float MaterialInstance::getMaskThreshold() const noexcept { + return downcast(this)->getMaskThreshold(); +} + +float MaterialInstance::getSpecularAntiAliasingVariance() const noexcept { + return downcast(this)->getSpecularAntiAliasingVariance(); +} + +float MaterialInstance::getSpecularAntiAliasingThreshold() const noexcept { + return downcast(this)->getSpecularAntiAliasingThreshold(); +} + +bool MaterialInstance::isDoubleSided() const noexcept { + return downcast(this)->isDoubleSided(); +} + +TransparencyMode MaterialInstance::getTransparencyMode() const noexcept { + return downcast(this)->getTransparencyMode(); +} + +CullingMode MaterialInstance::getCullingMode() const noexcept { + return downcast(this)->getCullingMode(); +} + +bool MaterialInstance::isColorWriteEnabled() const noexcept { + return downcast(this)->isColorWriteEnabled(); +} + +bool MaterialInstance::isDepthWriteEnabled() const noexcept { + return downcast(this)->isDepthWriteEnabled(); +} + +bool MaterialInstance::isStencilWriteEnabled() const noexcept { + return downcast(this)->isStencilWriteEnabled(); +} + +bool MaterialInstance::isDepthCullingEnabled() const noexcept { + return downcast(this)->isDepthCullingEnabled(); +} + } // namespace filament diff --git a/filament/src/RenderPass.cpp b/filament/src/RenderPass.cpp index 0a4949b1a3..bab4695ae1 100644 --- a/filament/src/RenderPass.cpp +++ b/filament/src/RenderPass.cpp @@ -358,8 +358,8 @@ void RenderPass::setupColorCommand(Command& cmdDraw, Variant variant, cmdDraw.primitive.rasterState.inverseFrontFaces = inverseFrontFaces; cmdDraw.primitive.rasterState.culling = mi->getCullingMode(); - cmdDraw.primitive.rasterState.colorWrite = mi->getColorWrite(); - cmdDraw.primitive.rasterState.depthWrite = mi->getDepthWrite(); + cmdDraw.primitive.rasterState.colorWrite = mi->isColorWriteEnabled(); + cmdDraw.primitive.rasterState.depthWrite = mi->isDepthWriteEnabled(); cmdDraw.primitive.rasterState.depthFunc = mi->getDepthFunc(); cmdDraw.primitive.mi = mi; cmdDraw.primitive.materialVariant = variant; @@ -663,7 +663,7 @@ RenderPass::Command* RenderPass::generateCommandsImpl(uint32_t extraFlags, // FIXME: should writeDepthForShadowCasters take precedence over mi->getDepthWrite()? cmdDepth.primitive.rasterState.depthWrite = (1 // only keep bit 0 - & (mi->getDepthWrite() | (mode == TransparencyMode::TWO_PASSES_ONE_SIDE)) + & (mi->isDepthWriteEnabled() | (mode == TransparencyMode::TWO_PASSES_ONE_SIDE)) & !(filterTranslucentObjects & translucent) & !(depthFilterAlphaMaskedObjects & rs.alphaToCoverage)) | writeDepthForShadowCasters; diff --git a/filament/src/details/MaterialInstance.cpp b/filament/src/details/MaterialInstance.cpp index 29d08d03a6..dc926a2fcd 100644 --- a/filament/src/details/MaterialInstance.cpp +++ b/filament/src/details/MaterialInstance.cpp @@ -35,17 +35,30 @@ namespace filament { using namespace backend; -FMaterialInstance::FMaterialInstance() noexcept = default; +FMaterialInstance::FMaterialInstance() noexcept + : mCulling(CullingMode::BACK), + mDepthFunc(RasterState::DepthFunc::LE), + mColorWrite(false), + mDepthWrite(false), + mHasScissor(false), + mIsDoubleSided(false), + mTransparencyMode(TransparencyMode::DEFAULT) { +} FMaterialInstance::FMaterialInstance(FEngine& engine, FMaterialInstance const* other, const char* name) : mMaterial(other->mMaterial), mPolygonOffset(other->mPolygonOffset), + mStencilState(other->mStencilState), + mMaskThreshold(other->mMaskThreshold), + mSpecularAntiAliasingVariance(other->mSpecularAntiAliasingVariance), + mSpecularAntiAliasingThreshold(other->mSpecularAntiAliasingThreshold), mCulling(other->mCulling), + mDepthFunc(other->mDepthFunc), mColorWrite(other->mColorWrite), mDepthWrite(other->mDepthWrite), - mStencilState(other->mStencilState), - mDepthFunc(other->mDepthFunc), + mHasScissor(false), + mIsDoubleSided(other->mIsDoubleSided), mScissorRect(other->mScissorRect), mName(name ? CString(name) : other->mName) { @@ -63,10 +76,20 @@ FMaterialInstance::FMaterialInstance(FEngine& engine, mSbHandle = driver.createSamplerGroup(mSamplers.getSize()); } - mMaterialSortingKey = RenderPass::makeMaterialSortingKey( - material->getId(), material->generateMaterialInstanceId()); + if (material->hasDoubleSidedCapability()) { + setDoubleSided(mIsDoubleSided); + } + + setMaskThreshold(mMaskThreshold); + + setSpecularAntiAliasingThreshold(mSpecularAntiAliasingThreshold); + + setSpecularAntiAliasingVariance(mSpecularAntiAliasingVariance); setTransparencyMode(material->getTransparencyMode()); + + mMaterialSortingKey = RenderPass::makeMaterialSortingKey( + material->getId(), material->generateMaterialInstanceId()); } FMaterialInstance* FMaterialInstance::duplicate( @@ -183,14 +206,29 @@ void FMaterialInstance::setParameterImpl(std::string_view name, void FMaterialInstance::setMaskThreshold(float threshold) noexcept { setParameter("_maskThreshold", math::saturate(threshold)); + mMaskThreshold = math::saturate(threshold); +} + +float FMaterialInstance::getMaskThreshold() const noexcept { + return mMaskThreshold; } void FMaterialInstance::setSpecularAntiAliasingVariance(float variance) noexcept { setParameter("_specularAntiAliasingVariance", math::saturate(variance)); + mSpecularAntiAliasingVariance = math::saturate(variance); +} + +float FMaterialInstance::getSpecularAntiAliasingVariance() const noexcept { + return mSpecularAntiAliasingVariance; } void FMaterialInstance::setSpecularAntiAliasingThreshold(float threshold) noexcept { setParameter("_specularAntiAliasingThreshold", math::saturate(threshold * threshold)); + mSpecularAntiAliasingThreshold = std::sqrt(math::saturate(threshold * threshold)); +} + +float FMaterialInstance::getSpecularAntiAliasingThreshold() const noexcept { + return mSpecularAntiAliasingThreshold; } void FMaterialInstance::setDoubleSided(bool doubleSided) noexcept { @@ -202,6 +240,11 @@ void FMaterialInstance::setDoubleSided(bool doubleSided) noexcept { if (doubleSided) { setCullingMode(CullingMode::NONE); } + mIsDoubleSided = doubleSided; +} + +bool FMaterialInstance::isDoubleSided() const noexcept { + return mIsDoubleSided; } void FMaterialInstance::setTransparencyMode(TransparencyMode mode) noexcept { @@ -212,6 +255,10 @@ void FMaterialInstance::setDepthCulling(bool enable) noexcept { mDepthFunc = enable ? RasterState::DepthFunc::GE : RasterState::DepthFunc::A; } +bool FMaterialInstance::isDepthCullingEnabled() const noexcept { + return mDepthFunc != RasterState::DepthFunc::A; +} + const char* FMaterialInstance::getName() const noexcept { // To decide whether to use the parent material name as a fallback, we check for the nullness of // the instance's CString rather than calling empty(). This allows instances to override the diff --git a/filament/src/details/MaterialInstance.h b/filament/src/details/MaterialInstance.h index 493cb658a7..c98c8f3115 100644 --- a/filament/src/details/MaterialInstance.h +++ b/filament/src/details/MaterialInstance.h @@ -89,9 +89,11 @@ public: backend::CullingMode getCullingMode() const noexcept { return mCulling; } - bool getColorWrite() const noexcept { return mColorWrite; } + bool isColorWriteEnabled() const noexcept { return mColorWrite; } - bool getDepthWrite() const noexcept { return mDepthWrite; } + bool isDepthWriteEnabled() const noexcept { return mDepthWrite; } + + bool isStencilWriteEnabled() const noexcept { return mStencilState.stencilWrite; } backend::StencilState getStencilState() const noexcept { return mStencilState; } @@ -108,12 +110,20 @@ public: void setMaskThreshold(float threshold) noexcept; + float getMaskThreshold() const noexcept; + void setSpecularAntiAliasingVariance(float variance) noexcept; + float getSpecularAntiAliasingVariance() const noexcept; + void setSpecularAntiAliasingThreshold(float threshold) noexcept; + float getSpecularAntiAliasingThreshold() const noexcept; + void setDoubleSided(bool doubleSided) noexcept; + bool isDoubleSided() const noexcept; + void setTransparencyMode(TransparencyMode mode) noexcept; void setCullingMode(CullingMode culling) noexcept { mCulling = culling; } @@ -126,6 +136,8 @@ public: void setDepthCulling(bool enable) noexcept; + bool isDepthCullingEnabled() const noexcept; + void setStencilCompareFunction(StencilCompareFunc func, StencilFace face) noexcept { if (any(face & StencilFace::FRONT)) { mStencilState.front.stencilFunc = func; @@ -222,19 +234,26 @@ private: // keep these grouped, they're accessed together in the render-loop FMaterial const* mMaterial = nullptr; + backend::Handle mUbHandle; backend::Handle mSbHandle; - UniformBuffer mUniforms; backend::SamplerGroup mSamplers; - backend::PolygonOffset mPolygonOffset; - backend::CullingMode mCulling; - bool mColorWrite; - bool mDepthWrite; - bool mHasScissor = false; - backend::StencilState mStencilState = {}; - backend::RasterState::DepthFunc mDepthFunc; - TransparencyMode mTransparencyMode; + + backend::PolygonOffset mPolygonOffset{}; + backend::StencilState mStencilState{}; + + float mMaskThreshold = 0.0f; + float mSpecularAntiAliasingVariance = 0.0f; + float mSpecularAntiAliasingThreshold = 0.0f; + + backend::CullingMode mCulling : 2; + backend::RasterState::DepthFunc mDepthFunc : 3; + bool mColorWrite : 1; + bool mDepthWrite : 1; + bool mHasScissor : 1; + bool mIsDoubleSided : 1; + TransparencyMode mTransparencyMode : 2; uint64_t mMaterialSortingKey = 0; diff --git a/web/filament-js/jsbindings.cpp b/web/filament-js/jsbindings.cpp index 11b8450bb5..d7dd6982c3 100644 --- a/web/filament-js/jsbindings.cpp +++ b/web/filament-js/jsbindings.cpp @@ -1250,12 +1250,24 @@ class_("MaterialInstance") self->setParameter(name.c_str(), type, value); }), allow_raw_pointers()) .function("setPolygonOffset", &MaterialInstance::setPolygonOffset) .function("setMaskThreshold", &MaterialInstance::setMaskThreshold) + .function("getMaskThreshold", &MaterialInstance::getMaskThreshold) + .function("setSpecularAntiAliasingVariance", &MaterialInstance::setSpecularAntiAliasingVariance) + .function("getSpecularAntiAliasingVariance", &MaterialInstance::getSpecularAntiAliasingVariance) + .function("setSpecularAntiAliasingThreshold", &MaterialInstance::setSpecularAntiAliasingThreshold) + .function("getSpecularAntiAliasingThreshold", &MaterialInstance::getSpecularAntiAliasingThreshold) .function("setDoubleSided", &MaterialInstance::setDoubleSided) + .function("isDoubleSided", &MaterialInstance::isDoubleSided) + .function("setTransparencyMode", &MaterialInstance::setTransparencyMode) + .function("getTransparencyMode", &MaterialInstance::getTransparencyMode) .function("setCullingMode", &MaterialInstance::setCullingMode) + .function("getCullingMode", &MaterialInstance::getCullingMode) .function("setColorWrite", &MaterialInstance::setColorWrite) + .function("isColorWriteEnabled", &MaterialInstance::isColorWriteEnabled) .function("setDepthWrite", &MaterialInstance::setDepthWrite) + .function("isDepthWriteEnabled", &MaterialInstance::isDepthWriteEnabled) .function("setStencilWrite", &MaterialInstance::setStencilWrite) .function("setDepthCulling", &MaterialInstance::setDepthCulling) + .function("isDepthCullingEnabled", &MaterialInstance::isDepthCullingEnabled) .function("setStencilCompareFunction", &MaterialInstance::setStencilCompareFunction) .function("setStencilCompareFunction", EMBIND_LAMBDA(void, (MaterialInstance* self, MaterialInstance::StencilCompareFunc func), { diff --git a/web/filament-js/jsenums.cpp b/web/filament-js/jsenums.cpp index 4064c9460c..c6f2403fe1 100644 --- a/web/filament-js/jsenums.cpp +++ b/web/filament-js/jsenums.cpp @@ -398,6 +398,11 @@ enum_("CullingMode") .value("BACK", backend::CullingMode::BACK) .value("FRONT_AND_BACK", backend::CullingMode::FRONT_AND_BACK); +enum_("TransparencyMode") + .value("DEFAULT", filament::TransparencyMode::DEFAULT) + .value("TWO_PASSES_ONE_SIDE", filament::TransparencyMode::TWO_PASSES_ONE_SIDE) + .value("TWO_PASSES_TWO_SIDES", filament::TransparencyMode::TWO_PASSES_TWO_SIDES); + enum_("FeatureLevel") .value("FEATURE_LEVEL_1", backend::FeatureLevel::FEATURE_LEVEL_1) .value("FEATURE_LEVEL_2", backend::FeatureLevel::FEATURE_LEVEL_2);