move set/remove stencilHighlight to View and implement via OverlayManager

This commit is contained in:
Nick Fisher
2025-07-01 10:13:47 +08:00
parent 96ef070be7
commit 0f9d2492e6
11 changed files with 382 additions and 140 deletions

View File

@@ -0,0 +1,44 @@
#ifdef __EMSCRIPTEN__
#include <emscripten.h>
#endif
#include "Log.hpp"
#include <filament/Engine.h>
#include <filament/RenderTarget.h>
#include <filament/Renderer.h>
#include <filament/View.h>
#include <utils/Entity.h>
#include "c_api/TOverlayManager.h"
#include "components/OverlayComponentManager.hpp"
using namespace thermion;
extern "C"
{
EMSCRIPTEN_KEEPALIVE TOverlayManager *OverlayManager_create(TEngine *tEngine, TRenderer *tRenderer, TView *tView, TScene *tScene, TRenderTarget *tRenderTarget) {
auto *engine = reinterpret_cast<filament::Engine *>(tEngine);
auto *view = reinterpret_cast<filament::View *>(tView);
auto *scene = reinterpret_cast<filament::Scene *>(tScene);
auto *renderer = reinterpret_cast<filament::Renderer *>(tRenderer);
auto *renderTarget = reinterpret_cast<filament::RenderTarget *>(tRenderTarget);
auto *overlayManager = new OverlayComponentManager(engine, view, scene, renderTarget, renderer);
return reinterpret_cast<TOverlayManager *>(overlayManager);
}
EMSCRIPTEN_KEEPALIVE void OverlayManager_addComponent(TOverlayManager *tOverlayManager, EntityId entityId, TMaterialInstance *tMaterialInstance) {
auto *overlayManager = reinterpret_cast<OverlayComponentManager *>(tOverlayManager);
auto *materialInstance = reinterpret_cast<filament::MaterialInstance *>(tMaterialInstance);
overlayManager->addOverlayComponent(utils::Entity::import(entityId), materialInstance);
}
EMSCRIPTEN_KEEPALIVE void OverlayManager_removeComponent(TOverlayManager *tOverlayManager, EntityId entityId) {
auto *overlayManager = reinterpret_cast<OverlayComponentManager *>(tOverlayManager);
overlayManager->removeOverlayComponent(utils::Entity::import(entityId));
}
}

View File

@@ -55,4 +55,11 @@ EMSCRIPTEN_KEEPALIVE void RenderTicker_setRenderable(TRenderTicker *tRenderTicke
renderTicker->setRenderable(swapChain, views, numViews);
}
EMSCRIPTEN_KEEPALIVE void RenderTicker_setOverlayManager(TRenderTicker *tRenderTicker, TOverlayManager *tOverlayManager) {
auto *renderTicker = reinterpret_cast<RenderTicker *>(tRenderTicker);
auto *overlayManager = reinterpret_cast<OverlayComponentManager *>(tOverlayManager);
renderTicker->addOverlayManager(overlayManager);
}
}

View File

@@ -279,6 +279,11 @@ namespace thermion
view->setFogOptions(fogOptions);
}
EMSCRIPTEN_KEEPALIVE void View_setName(TView* tView, const char *name) {
auto view = reinterpret_cast<View *>(tView);
view->setName(name);
}
#ifdef __cplusplus
}
}