move outline material to embedded binary

This commit is contained in:
Nick Fisher
2025-07-01 11:06:51 +08:00
parent 215515a4fc
commit 9a5b737391
12 changed files with 5716 additions and 24 deletions

View File

@@ -38,6 +38,7 @@ set(MATERIAL_SOURCES
"${CMAKE_CURRENT_SOURCE_DIR}/include/material/image.c"
"${CMAKE_CURRENT_SOURCE_DIR}/include/material/grid.c"
"${CMAKE_CURRENT_SOURCE_DIR}/include/material/linear_depth.c"
"${CMAKE_CURRENT_SOURCE_DIR}/include/material/outline.c"
)
set_source_files_properties(${MATERIAL_SOURCES} PROPERTIES LANGUAGE CXX)

View File

@@ -77,6 +77,7 @@ extern "C"
EMSCRIPTEN_KEEPALIVE TMaterial *Material_createImageMaterial(TEngine *tEngine);
EMSCRIPTEN_KEEPALIVE TMaterial *Material_createGridMaterial(TEngine *tEngine);
EMSCRIPTEN_KEEPALIVE TMaterial *Material_createGizmoMaterial(TEngine *tEngine);
EMSCRIPTEN_KEEPALIVE TMaterial *Material_createOutlineMaterial(TEngine *tEngine);
EMSCRIPTEN_KEEPALIVE bool Material_hasParameter(TMaterial *tMaterial, const char *propertyName);
EMSCRIPTEN_KEEPALIVE bool MaterialInstance_isStencilWriteEnabled(TMaterialInstance *materialInstance);
EMSCRIPTEN_KEEPALIVE void MaterialInstance_setStencilWrite(TMaterialInstance *materialInstance, bool enabled);

View File

@@ -90,6 +90,7 @@ namespace thermion
void Material_createInstanceRenderThread(TMaterial *tMaterial, void (*onComplete)(TMaterialInstance *));
void Material_createImageMaterialRenderThread(TEngine *tEngine, void (*onComplete)(TMaterial *));
void Material_createGizmoMaterialRenderThread(TEngine *tEngine, void (*onComplete)(TMaterial *));
void Material_createOutlineMaterialRenderThread(TEngine *tEngine, void (*onComplete)(TMaterial *));
void ColorGrading_createRenderThread(TEngine *tEngine, TToneMapping toneMapping, void (*callback)(TColorGrading *));
void View_pickRenderThread(TView *tView, uint32_t requestId, uint32_t x, uint32_t y, PickCallback callback);

View File

@@ -0,0 +1,12 @@
.global OUTLINE_OUTLINE_OFFSET;
.global OUTLINE_OUTLINE_SIZE;
.global OUTLINE_PACKAGE
.section .rodata
OUTLINE_PACKAGE:
.incbin "outline.bin"
OUTLINE_OUTLINE_OFFSET:
.int 0
OUTLINE_OUTLINE_SIZE:
.int 112782

View File

@@ -0,0 +1,12 @@
.global _OUTLINE_OUTLINE_OFFSET;
.global _OUTLINE_OUTLINE_SIZE;
.global _OUTLINE_PACKAGE
.section __TEXT,__const
_OUTLINE_PACKAGE:
.incbin "outline.bin"
_OUTLINE_OUTLINE_OFFSET:
.int 0
_OUTLINE_OUTLINE_SIZE:
.int 112782

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
#ifndef OUTLINE_H_
#define OUTLINE_H_
#include <stdint.h>
extern "C" {
extern const uint8_t OUTLINE_PACKAGE[];
extern int OUTLINE_OUTLINE_OFFSET;
extern int OUTLINE_OUTLINE_SIZE;
}
#define OUTLINE_OUTLINE_DATA (OUTLINE_PACKAGE + OUTLINE_OUTLINE_OFFSET)
#endif

View File

@@ -17,6 +17,7 @@
#include "material/image.h"
#include "material/grid.h"
#include "material/unlit_fixed_size.h"
#include "material/outline.h"
#include "c_api/TMaterialInstance.h"
@@ -74,6 +75,14 @@ namespace thermion
return reinterpret_cast<TMaterial *>(material);
}
EMSCRIPTEN_KEEPALIVE TMaterial *Material_createOutlineMaterial(TEngine *tEngine) {
auto *engine = reinterpret_cast<filament::Engine *>(tEngine);
auto *material = filament::Material::Builder()
.package(OUTLINE_OUTLINE_DATA, OUTLINE_OUTLINE_SIZE)
.build(*engine);
return reinterpret_cast<TMaterial *>(material);
}
EMSCRIPTEN_KEEPALIVE bool Material_hasParameter(TMaterial *tMaterial, const char *propertyName) {
auto *material = reinterpret_cast<filament::Material *>(tMaterial);
return material->hasParameter(propertyName);

View File

@@ -513,6 +513,17 @@ extern "C"
auto fut = _renderThread->add_task(lambda);
}
EMSCRIPTEN_KEEPALIVE void Material_createOutlineMaterialRenderThread(TEngine *tEngine, void (*onComplete)(TMaterial *))
{
std::packaged_task<void()> lambda(
[=]() mutable
{
auto *instance = Material_createOutlineMaterial(tEngine);
PROXY(onComplete(instance));
});
auto fut = _renderThread->add_task(lambda);
}
EMSCRIPTEN_KEEPALIVE void Material_createInstanceRenderThread(TMaterial *tMaterial, void (*onComplete)(TMaterialInstance *))
{
std::packaged_task<void()> lambda(