mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-11-12 06:47:14 +00:00
feat(ugc): LU Toolbox worker in a headless Blender
UgcToolbox runs LU Toolbox itself in an external Blender that stays up and makes one model after another (dlu_toolbox_worker.py runs LU-Toolbox-Standalone's steps: import, Process Model, Bake Lighting, niftools export). JSON lines over its stdin and original stdout; it is restarted after a crash, a timeout, 100 models or new settings, runs at worker_nice with toolbox_threads, and its CPU time is charged to the worker, which pauses it (SIGSTOP) while the CPU budget is overdrawn. ProcessModelToolbox reads LU Toolbox's .nif back, counts its triangles and draws the icon from it. Tests: option parsing, the fallback, the protocol framing, the worker with a stand-in Blender (crash, hang, failure, give-up), and LU Toolbox itself when DLU_TEST_TOOLBOX_* are set. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
# Render/ the software rasterizer, ambient occlusion, hidden-face removal, rays, icon parameters and pose
|
||||
# Formats/ the files written for the client and the dashboard (NIF, DDS, PNG, sd0)
|
||||
# Processing/ the job queue and workers, the CPU budget, stored files
|
||||
# Toolbox/ processor=toolbox-blender: LU Toolbox itself in a headless Blender (an external program), its worker
|
||||
# UgcServer.cpp the server: settings, the master link, HTTP routes
|
||||
|
||||
# The pure part of the UGC server (brick data, meshes, rendering, file formats, storage), shared with the tests
|
||||
@@ -22,10 +23,13 @@ set(DUGC_SOURCES
|
||||
"Render/UgcIconPose.cpp"
|
||||
"Render/UgcRays.cpp"
|
||||
"Render/UgcRender.cpp"
|
||||
"Toolbox/UgcToolbox.cpp"
|
||||
"Toolbox/UgcToolboxJob.cpp"
|
||||
"Toolbox/UgcToolboxProtocol.cpp"
|
||||
)
|
||||
|
||||
add_library(dUgc STATIC ${DUGC_SOURCES})
|
||||
target_include_directories(dUgc PUBLIC "." "Bricks" "Formats" "Model" "Processing" "Render"
|
||||
target_include_directories(dUgc PUBLIC "." "Bricks" "Formats" "Model" "Processing" "Render" "Toolbox"
|
||||
"${PROJECT_SOURCE_DIR}/thirdparty/MD5" "${PROJECT_SOURCE_DIR}/thirdparty/nlohmann")
|
||||
target_link_libraries(dUgc PUBLIC dCommon glm::glm tinyxml2 MD5 PRIVATE embree)
|
||||
# Intel Open Image Denoise, when built with DLU_OIDN (thirdparty/CMakeLists.txt): the denoise=oidn setting
|
||||
@@ -77,6 +81,9 @@ if(DLU_HIPRT)
|
||||
target_compile_definitions(dUgc PRIVATE DLU_HIPRT DLU_HIPRT_INCLUDE_DIR="${DLU_HIPRT_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
||||
# The script Blender runs for processor=toolbox-blender, next to the servers (Blender is never linked in)
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Toolbox/dlu_toolbox_worker.py" "${PROJECT_BINARY_DIR}/ugc-toolbox/dlu_toolbox_worker.py" COPYONLY)
|
||||
|
||||
add_executable(UgcServer "UgcServer.cpp" "Processing/UgcProcessor.cpp" "Bricks/UgcCdClient.cpp")
|
||||
|
||||
target_include_directories(UgcServer PRIVATE
|
||||
|
||||
Reference in New Issue
Block a user