Vulkan을 이용한 고속 GUI 라이브러리 Duxel

안녕하세요 .앞 전에 공유 드렸던 라이브러리를

좀 더 개선해서 버전 0.1.5-preview를 출시했습니다.

깃허브 저장소는 다음과 같습니다.

Duxel은 Dear ImGui와 유사한 즉시 렌더링 모델을 GPT-5.2-Codex를 이용해 .NET 10용으로 구현했습니다. GUI를 구성하는 별도의 논리적 트리가 없으므로 구조가 단순하며, GPU를 활용해 화면을 빠르게 다시 렌더링하는 데 집중합니다.

최신 버전은 v0.1.5-preview로, 알파 단계에 있어 제품에 사용할 만큼 안정적이지는 않지만 대부분의 기능이 정상적으로 동작합니다.

주요 특징으로는 다음과 같습니다.

  • 즉시 모드 UI — Dear ImGui 스타일의 Begin/End 패턴 기반 위젯 API
  • Vulkan 렌더러 — MSAA 4x, VSync 토글, Triple Buffering, Persistent Mapped Buffers
  • GLFW 윈도우/입력 — 키보드·마우스·스크롤·IME 입력 지원
  • 스크롤바/팝업 — 통합 스크롤바 렌더러 (Child/Combo/ListBox/InputMultiline), 팝업 차단 레이어
  • NativeAOT 지원PublishAot=true 배포 가능 (리플렉션/동적 로딩 없음)
  • UI DSL.ui 파일로 선언적 UI 정의, 소스 생성기 기반 빌드 타임 코드 생성, 핫리로드 지원
  • 폰트 아틀라스 — TTF 파싱(컴파운드 글리프 포함), HiDPI 스케일링, 빠른 시작을 위한 Built-in ASCII 폰트
  • ImGui API 전체 커버리지 — 400+ API 구현 완료 (상세 목록)

핫리로드를 통해 화면 구성을 지원하기 위해 다음 형태의 DSL(Domain-Specific Language)를 지원하며 좀 더 자세한 지원은 UI DSL 레퍼런스를 참조할 수 있습니다. 아직 구조는 진화 중이며 안정적이지 않습니다.

Window "DSL Showcase"
  MenuBar
    Menu "File"
      MenuItem Id="new" Text="New"
      MenuItem Id="exit" Text="Exit"
  SeparatorText "Inputs"
  InputText Id="name" Text="Name" MaxLength=64
  InputInt Id="age" Text="Age" Value=0
  InputFloat Id="speed" Text="Speed" Format="0.00"
  Checkbox Id="vsync" Text="VSync" Default=true
  SliderFloat Id="volume" Text="Volume" Min=0 Max=1
  Combo Id="preset" Text="Preset" Items="Low|Medium|High"
  SeparatorText "Tabs"
  TabBar "tabs"
    TabItem "Tab A"
      Text "Tab A content"
    TabItem "Tab B"
      Text "Tab B content"
  SeparatorText "Table"
  Table "table" 3
    TableSetupColumn "Name"
    TableSetupColumn "Value"
    TableSetupColumn "Notes"
    TableHeadersRow
    TableNextRow
    TableNextColumn
    Text "Row1"
    TableNextColumn
    Text "42"
    TableNextColumn
    Text "Hello"
  SeparatorText "Tree"
  TreeNode "Node 1"
    Text "Child 1"
    TreeNode "Node 1.1"
      Text "Leaf"
  TreeNode "Node 2"
    Text "Child 2"

DSL을 사용하게 되면 기본적으로 Debug/Release로 실행 시 DSL 파일을 수정할 때 즉시 화면이 갱신됩니다. NativeAOT로 게시하게 되면 소스생성기를 통해 소스코드로 변환하여 가장 빠른 코드로 재구성됩니다.

다음은 여러 기능을 확인할 수 있는 쇼케이스 입니다.

필수 환경

  • .NET 10 SDK
  • Vulkan 1.0+ 지원 (대부분의 GPU에서 지원)

종합 데모

curl -sLO https://raw.githubusercontent.com/dimohy/Duxel/main/samples/fba/all_features.cs && dotnet run all_features.cs

DSL 선언적 UI

curl -sLO https://raw.githubusercontent.com/dimohy/Duxel/main/samples/fba/dsl_showcase.cs && dotnet run dsl_showcase.cs

DSL 인터랙션

curl -sLO https://raw.githubusercontent.com/dimohy/Duxel/main/samples/fba/dsl_interaction.cs && dotnet run dsl_interaction.cs

기타 샘플 실행 방법은 Duxel FBA 샘플 — 바로 실행하기를 참고하세요.

8개의 좋아요

0.1.6-preview로 업데이트 하였습니다.

  • 빠른 시작을 위해 사용했던 어색한 아스키 폰트를 더 이상 사용하지 않습니다.
  • 시작 시간을 최적화했습니다.
  • 이제 한글도 빠르게 표시됩니다.
  • 한글 입력 시 다른 포커스로 이동할 때 입력 중인 글자가 이동하는 문제를 수정했습니다.
  • 한글 입력을 텍스트 박스 내부로 옮겼습니다.
3개의 좋아요

0.1.7-preview 업데이트

curl -sLO https://raw.githubusercontent.com/dimohy/Duxel/main/samples/fba/image_widget_effects_fba.cs && dotnet run image_widget_effects_fba.cs

  • Vulkan AA 파이프라인 강화: TAA/FXAA 토글 경로 보강, 전환 시 리소스/파이프라인 재구성 안정화
  • AA 검증 체계 추가: MSAA↔FXAA 비교 체크리스트 및 성능 샘플 정비
  • 이미지 API 라이브러리화: Core에 플랫폼 중립 이미지 API 추가 UiImageTexture, UiImageEffects, IUiImageDecoder
  • 플랫폼 분리 강화: Windows 디코더를 플랫폼 계층으로 분리, App 런타임 등록 방식으로 Core 종속성 제거
  • 신규 FBA 샘플: 웹 PNG/JPG/GIF 로드 + GIF 애니메이션 + 이미지 효과(Zoom/Rotation/Alpha/Brightness/Contrast/Pixelate)
  • UI 동작 수정: 창 접힘 시 3px 본문 peek 유지 + 캔버스 돌출/클립 이슈 수정
1개의 좋아요