expose Engine->getSupportedFeatureLevel()

This commit is contained in:
Nick Fisher
2025-07-01 10:07:10 +08:00
parent b3b0e2bae1
commit 0b18caf4ff
4 changed files with 37 additions and 1 deletions

View File

@@ -25,4 +25,14 @@ enum Backend {
4 => NOOP,
_ => throw ArgumentError("Unknown value for TBackend: $value"),
};
}
}
enum FeatureLevel {
FeatureLevel0(0),
FeatureLevel1(1),
FeatureLevel2(2),
FeatureLevel3(3);
final int value;
const FeatureLevel(this.value);
}

View File

@@ -100,6 +100,14 @@ extern "C"
};
typedef enum TGizmoType TGizmoType;
enum TFeatureLevel {
FEATURE_LEVEL_0 = 0,
FEATURE_LEVEL_1 = 1,
FEATURE_LEVEL_2 = 2,
FEATURE_LEVEL_3 = 3
};
typedef enum TFeatureLevel TFeatureLevel;
enum TPrimitiveType {
// don't change the enums values (made to match GL)
PRIMITIVETYPE_POINTS = 0, //!< points

View File

@@ -28,6 +28,8 @@ EMSCRIPTEN_KEEPALIVE TEngine *Engine_create(
bool disableHandleUseAfterFreeCheck
);
EMSCRIPTEN_KEEPALIVE TFeatureLevel Engine_getSupportedFeatureLevel(TEngine *tEngine);
EMSCRIPTEN_KEEPALIVE void Engine_destroy(TEngine *tEngine);
EMSCRIPTEN_KEEPALIVE TRenderer *Engine_createRenderer(TEngine *tEngine);
EMSCRIPTEN_KEEPALIVE TSwapChain *Engine_createSwapChain(TEngine *tEngine, void *window, uint64_t flags);

View File

@@ -7,6 +7,7 @@
#include "c_api/TEngine.h"
#include <filament/Camera.h>
#include <filament/backend/DriverEnums.h>
#include <filament/Engine.h>
#include <filament/Fence.h>
#include <filament/IndirectLight.h>
@@ -74,6 +75,21 @@ namespace thermion
return reinterpret_cast<TEngine *>(engine);
}
EMSCRIPTEN_KEEPALIVE TFeatureLevel Engine_getSupportedFeatureLevel(TEngine *tEngine) {
auto *engine = reinterpret_cast<Engine *>(tEngine);
auto featureLevel = engine->getSupportedFeatureLevel();
switch(featureLevel) {
case filament::backend::FeatureLevel::FEATURE_LEVEL_0:
return FEATURE_LEVEL_0;
case filament::backend::FeatureLevel::FEATURE_LEVEL_1:
return FEATURE_LEVEL_1;
case filament::backend::FeatureLevel::FEATURE_LEVEL_2:
return FEATURE_LEVEL_2;
case filament::backend::FeatureLevel::FEATURE_LEVEL_3:
return FEATURE_LEVEL_3;
}
}
EMSCRIPTEN_KEEPALIVE void Engine_destroy(TEngine *tEngine) {
auto *engine = reinterpret_cast<Engine *>(tEngine);
Engine::destroy(engine);