Deki Editor

Dear ImGui, SDL3, OpenGL로 만든 C++ 씬 에디터입니다. 리플렉션 기반 인스펙터, 핫 리로드, 플레이 모드, 그리고 보드에 펌웨어를 플래시하는 빌드 패널을 갖추고 있습니다.

데모 프로젝트를 연 Deki 에디터

개요

Deki 씬을 열고, 편집하고, 실행하고, 배포하는 데스크톱 앱입니다. 엔진을 같은 프로세스 안에서 구동하므로, C++로 작성한 컴포넌트는 플러그인 DLL로 컴파일되어 곧바로 인스펙터에 나타납니다. 패키지도 같은 방식으로 로드됩니다.

현재는 Windows를 지원하며, Linux에서도 네이티브 파일 대화상자와 함께 실행됩니다.

다운로드

에디터는 무료이며 오픈 소스(Apache 2.0)입니다. 릴리스마다 플랫폼별 아카이브가 하나씩 있고, 컴파일러가 안에 들어 있습니다. 아무 곳에나 압축을 풀고 DekiEditor를 실행하면 됩니다. C++ 툴체인조차 따로 설치할 필요가 없습니다.

플랫폼아카이브
Windows x86-64DekiEditor-<version>-windows-x86_64.zip
Linux x86-64DekiEditor-<version>-linux-x86_64.tar.gz

GitHub에서 최신 릴리스 받기. 각 아카이브 옆에 SHA-256이 있습니다.

Windows 빌드는 아직 코드 서명이 되어 있지 않아서, 처음 실행할 때 SmartScreen의 “Windows의 PC 보호” 대화상자가 나타납니다. 추가 정보를 누른 다음 실행을 누르세요. 직접 빌드하려면 소스와 설정 가이드가 github.com/dekiengine/deki-editor에 있습니다.

패널

하이어라키 패널: 데모 씬의 오브젝트 트리

하이어라키는 다중 선택이 가능한 트리입니다. 드래그해서 부모를 바꾸거나 순서를 바꿀 수 있으며, 구조 편집도 값 편집과 같은 실행 취소 기록을 공유합니다.

패널기능
인스펙터 (Inspector)리플렉션으로 만들어지는 다중 오브젝트 속성 편집기입니다. 값이 서로 다르면 ---로 표시됩니다.
씬 뷰 (Scene View)기즈모, 이동, 확대/축소, 선택을 지원하는 2D 캔버스입니다.
에셋 브라우저 (Asset Browser)GUID로 관리되는 에셋을 미리 보기와 함께 보여 줍니다.
콘솔 (Console)엔진, 패키지, 직접 만든 플러그인의 로그를 필터링해서 보여 줍니다.
빌드 (Build)펌웨어를 빌드하고, 에셋을 익스포트하고, 디바이스에 플래시합니다.
프로파일러 (Profiler)계층, 플랫, 플레임 그래프 뷰와 메모리를 보여 줍니다.
프레임 캡처 (Frame Capture)플레이 모드의 프레임을 PNG로 저장합니다.
폰트 임포터 (Font Importer)TTF / OTF 임포트 또는 베이크된 비트맵 폰트를 지원합니다.
보드 매니저 (Boards Manager)보드별 MCU, 메모리, 디스플레이, 주변 장치를 설정합니다.
패키지 매니저 (Package Manager)패키지를 설치, 제거, 업데이트합니다.

스스로 만들어지는 인스펙터

필드에 DEKI_EXPORT 태그를 붙이세요. C++26 정적 리플렉션 코드 생성기가 빌드할 때 이를 찾아 속성 디스크립터와 직렬화 코드를 생성합니다. 그 밖에 등록할 것은 없습니다.

DEKI_CATEGORY("Demo")
DEKI_DESCRIPTION("Bobs the object up and down on a sine wave.")
class Bobber : public Deki::Component
{
public:
    DEKI_EXPORT DEKI_SLIDER(0, 64)
    float amplitudePx = 12.0f;

    DEKI_EXPORT DEKI_SLIDER(0, 4)
    float speedHz = 0.6f;

    void Awake() override;
    void Update() override;
};

Bobber 컴포넌트를 표시한 인스펙터

위젯도 디스크립터가 정합니다. 범위가 있는 float에는 슬라이더, 색상에는 색상 선택기, AssetRef<T>에는 에셋 선택기, enum에는 드롭다운이 붙습니다.

그 밖의 속성으로는 DEKI_TOOLTIP, DEKI_GROUP, 미터 단위 값을 픽셀로 편집하는 DEKI_UNIT(px), 다른 필드가 허용할 때까지 필드를 숨기는 DEKI_VISIBLE_WHEN, 빌드에서 필드를 제외하는 DEKI_EDITOR_ONLY가 있습니다.

보이는 그대로 디바이스가 그립니다

씬 뷰: 데모 씬이 열린 320x240 캔버스

플레이 모드는 하드웨어와 같은 RenderToBuffer() 경로로, 패널의 실제 크기 그대로 씬을 실행합니다. 렌더러의 미리 보기가 아니라 렌더러 그 자체이므로, 편집 모드와 플레이 모드와 보드의 결과가 일치합니다.

핫 리로드

수정한 뒤 에디터로 포커스를 옮기면 HotReloadService가 소스 트리의 변경 사항을 비교하고, 패키지와 플러그인 DLL을 언로드한 뒤 CMake로 다시 빌드하고, 컴포넌트 에디터를 다시 등록합니다. 그동안 씬은 계속 실행됩니다.

제대로 동작하는 실행 취소

모든 편집은 커맨드이고, 커맨드는 병합됩니다. 슬라이더를 드래그하면 실행 취소 항목이 수백 개가 아니라 하나만 생깁니다. 여러 오브젝트를 선택한 상태에서 편집하면, 선택한 모든 오브젝트에 적용되는 커맨드 하나로 묶입니다.

빌드와 플래시

빌드 패널은 보드 설정을 읽고 툴체인을 처음부터 끝까지 실행합니다. 플랫폼 CMake를 생성하고, 펌웨어를 빌드하고(ESP32는 ESP-IDF로), 에셋을 .tex, MessagePack .scene, 베이크된 폰트로 storage/에 익스포트한 다음, USB로 플래시합니다. 같은 익스포트로 SD 카드를 채워 오프라인 부팅에 쓸 수도 있습니다.

스크립트로 제어하기

에디터에는 MCP 서버가 들어 있습니다. --mcp로 실행하면 씬, 에셋, 패키지 매니저, 빌드, 스크린샷 캡처를 JSON-RPC로 다룰 수 있으며, 빈 상태에서 시작해 프로젝트를 만들고 스크린샷을 찍기까지 모두 해낼 수 있습니다. 이 사이트에 있는 에디터 이미지는 모두 그렇게 만들었습니다.