From 84d2fb222bd9cb2b92af46bf36577fc910fc4fae Mon Sep 17 00:00:00 2001 From: Philip Rideout Date: Fri, 16 Nov 2018 14:10:41 -0800 Subject: [PATCH] Flesh out JS bindings a bit. --- README.md | 5 ++++ web/docs/demo_template.html | 2 +- web/filament-js/jsbindings.cpp | 55 ++++++++++++++++++++++++++++++---- 3 files changed, 56 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 906aeca805..06d4671d92 100644 --- a/README.md +++ b/README.md @@ -897,6 +897,11 @@ as possible. The current external dependencies of the runtime library include: - STL - robin-map (header only library) +When building with Vulkan enabled, we have a few additional small dependencies: + +- vkmemalloc +- smol-v + Host tools (such as `matc` or `cmgen`) can use external dependencies freely. ## How to make contributions diff --git a/web/docs/demo_template.html b/web/docs/demo_template.html index 34d1223c5d..20f4a31410 100644 --- a/web/docs/demo_template.html +++ b/web/docs/demo_template.html @@ -14,7 +14,7 @@ - + \ No newline at end of file diff --git a/web/filament-js/jsbindings.cpp b/web/filament-js/jsbindings.cpp index 32dbc3386b..91b7dc0613 100644 --- a/web/filament-js/jsbindings.cpp +++ b/web/filament-js/jsbindings.cpp @@ -461,10 +461,55 @@ class_("RenderableManager$Builder") return &builder->geometry(index, type, vertices, indices); }) .BUILDER_FUNCTION("material", RenderBuilder, (RenderBuilder* builder, size_t index, MaterialInstance* mi), { - return &builder->material(index, mi); }); + return &builder->material(index, mi); }) + .BUILDER_FUNCTION("blendOrder", RenderBuilder, + (RenderBuilder* builder, size_t index, uint16_t order), { + return &builder->blendOrder(index, order); }); +/// RenderableManager ::core class:: Allows access to properties of drawable objects. class_("RenderableManager") - .class_function("Builder", (RenderBuilder (*)(int)) [] (int n) { return RenderBuilder(n); }); + .class_function("Builder", (RenderBuilder (*)(int)) [] (int n) { return RenderBuilder(n); }) + + /// getInstance ::method:: Gets an instance of the renderable component for an entity. + /// entity ::argument:: an [Entity] + /// ::retval:: a renderable component + .function("getInstance", &RenderableManager::getInstance) + + .function("setAxisAlignedBoundingBox", &RenderableManager::setAxisAlignedBoundingBox) + .function("setLayerMask", &RenderableManager::setLayerMask) + .function("setPriority", &RenderableManager::setPriority) + .function("setCastShadows", &RenderableManager::setCastShadows) + .function("setReceiveShadows", &RenderableManager::setReceiveShadows) + .function("isShadowCaster", &RenderableManager::isShadowCaster) + .function("isShadowReceiver", &RenderableManager::isShadowReceiver) + .function("getAxisAlignedBoundingBox", &RenderableManager::getAxisAlignedBoundingBox) + .function("getPrimitiveCount", &RenderableManager::getPrimitiveCount) + .function("setMaterialInstanceAt", &RenderableManager::setMaterialInstanceAt, + allow_raw_pointers()) + .function("getMaterialInstanceAt", &RenderableManager::getMaterialInstanceAt, + allow_raw_pointers()) + .function("setBlendOrderAt", &RenderableManager::setBlendOrderAt) + + // TODO: provide bindings for AttributeBitset + .function("getEnabledAttributesAt", &RenderableManager::getEnabledAttributesAt) + + .function("setGeometryAt", EMBIND_LAMBDA(void, (RenderableManager* self, + RenderableManager::Instance instance, size_t primitiveIndex, + RenderableManager::PrimitiveType type, VertexBuffer* vertices, IndexBuffer* indices, + size_t offset, size_t count), { + self->setGeometryAt(instance, primitiveIndex, type, vertices, indices, offset, count); + }), allow_raw_pointers()) + + .function("setGeometryRangeAt", EMBIND_LAMBDA(void, (RenderableManager* self, + RenderableManager::Instance instance, size_t primitiveIndex, + RenderableManager::PrimitiveType type, size_t offset, size_t count), { + self->setGeometryAt(instance, primitiveIndex, type, offset, count); + }), allow_raw_pointers()); + +/// RenderableManager$Instance ::class:: Component instance returned by [RenderableManager] +/// Be sure to call the instance's `delete` method when you're done with it. +class_("RenderableManager$Instance"); + /// delete ::method:: Frees an instance obtained via `getInstance` /// TransformManager ::core class:: Adds transform components to entities. class_("TransformManager") @@ -587,7 +632,7 @@ class_("MaterialInstance") .function("setColorParameter", EMBIND_LAMBDA(void, (MaterialInstance* self, std::string name, RgbType type, math::float3 value), { self->setParameter(name.c_str(), type, value); }), allow_raw_pointers()) - .function("setPolygonOffset", &MaterialInstance::setPolygonOffset, allow_raw_pointers()); + .function("setPolygonOffset", &MaterialInstance::setPolygonOffset); class_("TextureSampler") .constructor(); @@ -721,8 +766,8 @@ class_("driver$PixelBufferDescriptor") // ------------ /// KtxBundle ::class:: In-memory representation of a KTX file. -/// Most clients should use one of the `*fromKtx` utility methods in the JavaScript [Engine] wrapper -/// rather than interacting with `KtxBundle` directly. +/// Most clients should use one of the `create*FromKtx` utility methods in the JavaScript [Engine] +/// wrapper rather than interacting with `KtxBundle` directly. class_("KtxBundle") .constructor(EMBIND_LAMBDA(KtxBundle*, (BufferDescriptor kbd), { return new KtxBundle((uint8_t*) kbd.bd->buffer, (uint32_t) kbd.bd->size);