Engine Development Record

Smeltrix Engine
Smeltrix 엔진

Languages: [EN] English | [KO] 한국어

Overview

소개

Engine Log

엔진 로그

See 보기

Development Record

개발 기록

Details of internal data or core control logic are not shared.

Some terms have been simplified for convenience.

내부 데이터, 핵심 제어 로직 등 세부 사항은 제외

일부 용어는 편의상 간단하게 표현

version - 0.0.10.0-prototype

버전 - 0.0.10.0-prototype

  • Changed: Multilingual system redesigned, with language files migrated from JSON to a DB-based format
  • Changed: Unified scheduler engine task termination path
  • Changed: Added queue-based scheduler task command processing
  • Changed: Added delayed Libman release function
  • Changed: Redesigned the Log module and refactored existing Log call sites
  • Changed: Removed INI-based Config and State modules
  • Changed: Removed bytecode extraction system
  • Changed: Removed the bytecode-based EC module and converted it to a standard module
  • Changed: Switched EC information lookup from Internal code to DB/Blob-based
  • 변경: 다국어 시스템 재설계, 언어 파일 JSON -> DB 기반 전환
  • 변경: 스케줄러 엔진 작업 종료 경로 단일화
  • 변경: 스케줄러 테스크 명령 Queue 기반 처리 추가
  • 변경: Libman 해제 지연 기능 추가
  • 변경: Log 모듈 재설계 및 기존 Log 호출부 리팩토링
  • 변경: INI 기반 Config, State 모듈 제거
  • 변경: 바이트코드 추출 시스템 제거
  • 변경: EC 모듈 바이트코드 기반 제거 및 일반 모듈화
  • 변경: EC 정보 조회 내부 코드 -> DB/Blob 전환

Note

노트

LLDB Issue

  • When running with LLDB, the runtime starts the UI sub-thread, but freezes after a few seconds.
  • To identify the cause, I improved several suspected areas that had been given lower priority during the prototype stage, but the same issue persisted.
  • The freezing issue does not occur when using the MSVC debugger.
  • Similar cases were found in multiple issues on the LLDB GitHub repository.

LLDB 문제

  • LLDB 로 실행 시 런타임이 UI 서브스레드를 실행하고 몇초뒤 Freeze 상태
  • 원인을 찾기 위해 프로토타입 단계에서 우선순위가 낮아 의심가는 부분들을 개선, 여전히 동일 현상
  • MSVC 디버거 사용시 프리징 문제가 발생하지 않음.
  • 찾아보니 비슷한 사례가 LLDB github 에서 여러건을 찾음.

version - 0.0.9.0-prototype / 64,425 LOC

버전 - 0.0.9.0-prototype / 64,425 LOC

  • Added: SQLite 3.53.4
  • Added: Database module and engine abstraction
  • Added: SysInfo module - System environment information management
  • Added: New Scheduler Module and Abstraction
    • Segment-based lock-free thread pool (configurable slot capacity, lazy allocation)
    • CAS-dedicated state transition + command dispatch (No busy-wait)
    • Task Registry: Name-based, automatic boot/shutdown order determination via dependency topological sort
    • Control privilege separation with 3 Owner levels (USER/SYSTEM/RUNTIME)
  • Added: Entry module and OS abstraction
  • Added: Device Profile module
  • Added: Hotkey module
  • Added: NVML module(NVIDIA GPU operation verified)
  • Added: Ring0 Engine Module - PawnIO Backend
  • Added: Intel TDP Module
  • Added: Pointer Type System Extension
  • Added: Group-Affinity Worker Pool
  • Added: FFmpeg Module
  • Added: Notification Module
  • Added: No GUI Mode(--no-gui)
  • Changed: INI -> DB - data model migration with major architecture
  • Changed: Replaced the default runtime scheduler with the new scheduler
  • Changed: Service initialization/shutdown table -> Entry module-based lifecycle management
  • Changed: Replaced the existing profile functionality with the Device Profile module
  • Changed: Builder -> Separated into the Orketrix project(4,997 LOC)
  • Changed: Shortcutkey manager moudle -> Hotkey module
  • Changed: Refactored the Level Zero module(Intel Iris Xe GPU operation verified)
  • Changed: Vulkan SDK to 1.4.357.0
  • Changed: Dear ImGui to 1.96.9b
  • Changed: Abstracted RyzenAdj(GPU control of APUs), ADLX, and Level Zero, NVML through Flowline::GPU
  • Changed: UI Runtime Rebuild -> Scheduler-managed job restart
  • Changed: Removed TDP ECO, AMD STAPM
  • Change: Dashboard UI reorganization
    • CPU Group: CLOCK + TDP + TEMP
    • GPU Group: CLOCK + POWER
  • Changed: NVML Single-GPU Monitoring -> GPU-Isolated Actor-Based Parallel Monitoring/Control
  • Changed: Categorized the service module structure
  • Changed: Moved Notice to the Notification backend and improved it
  • Changed: Refactored the scheduler architecture by separating Engine, Task, Pool, and Warp into role-specific modules.
  • Changed: Dead ImGui Theme System - Added scrollbar, separator settings, and updated theme files
  • Changed: Single database connection -> Slot-based multiple database connections
  • 추가: SQLite 3.53.4
  • 추가: Database 모듈 및 엔진 추상화
  • 추가: SysInfo 모듈 - 시스템 환경 정보 관리
  • 추가: 신규 스케줄러 모듈 및 엔진 추상화
    • 세그먼트 기반 락프리 스레드 풀 (슬롯 용량 설정 가능, 지연 할당)
    • CAS 전용 상태전이 + 명령 디스패치 (busy-wait 없음)
    • Task 레지스트리: 이름 기반, 의존성 위상정렬로 부팅/종료 순서 자동 결정
    • Owner 3단계(USER/SYSTEM/RUNTIME)로 제어 권한 분리
  • 추가: Entry 모듈 및 OS 추상화
  • 추가: 기기 프로파일 모듈
  • 추가: Hotkey 모듈
  • 추가: NVML 모듈(NVIDIA GPU 작동 확인)
  • 추가: Ring0 엔진 모듈 - PawnIO 백엔드
  • 추가: Intel TDP 모듈
  • 추가: 포인터 타입 시스템 확장
  • 추가: 그룹 바인딩 워커 풀
  • 추가: FFmpeg 모듈
  • 추가: Notification 모듈
  • 추가: No GUI 모드(--no-gui)
  • 변경: INI -> DB - 데이터 모델 마이그레이션에 따른 대규모 아키텍처
  • 변경: 런타임 기본 스케줄러 -> 신규 스케줄러 교체
  • 변경: 서비스 초기화/종료 테이블 -> Entry 모듈 기반 Lifecycle 관리로 전환
  • 변경: 기존 프로파일 기능 -> 기기 프로파일 모듈 교체
  • 변경: Builder -> Orketrix 프로젝트로 독립(4,997 LOC)
  • 변경: 단축키매니저 모듈 -> Hotkey 모듈로 교체
  • 변경: Level Zero 모듈 개선(Intel Iris Xe GPU 작동 확인)
  • 변경: Vulkan SDK 1.4.357.0 로 업데이트
  • 변경: Dear ImGui 1.96.9b 로 업데이트
  • 변경: RyzenAdj(APU의 GPU 컨트롤), ADLX, Level Zero, NVML를 Flowline::GPU로 추상화
  • 변경: UI 런타임 재구성 -> Scheduler 작업 재시작 방식으로 전환
  • 변경: TDP ECO, AMD STAPM 삭제
  • 변경: Dashboard UI 구성 변경
    • CPU 그룹: CLOCK + TDP + TEMP
    • GPU 그룹: CLOCK + POWER
  • 변경: NVML 단일 GPU 모니터링 -> GPU별 격리 액터(Actor) 기반 병렬 모니터링/제어
  • 변경: 서비스 모듈 구조 카테고리화
  • 변경: Notice -> Notification 백엔드 로 이동 및 개선
  • 변경: 스케줄러 구조 개편 - Engine, Task, Pool, Warp 역할별 모듈 분리
  • 변경: Dead ImGui 테마 시스템: 스크롤, 구분선 설정 추가 및 테마 파일 업데이트
  • 변경: 단일 데이터베이스 연결 -> 슬롯 기반 다중 데이터베이스 연결

Note

노트

Large-Scale Architecture Refactoring

  • Tasks that were originally out of scope were brought forward and executed early, prior to the planned post-release phase(Impact of traffic accidents)
  • The project was originally designed as a simple frontend for RyzenAdj, so the initial architecture did not sufficiently account for a large-scale data storage structure. As the project expanded, the resulting data model migration required significant code modifications, creating technical debt.
  • Total code volume increased significantly due to the addition of DB-related logic
  • The builder was separated from the main tree, removing approximately 5K LOC.
  • Despite the massive volume of code changes, overall implementation complexity remained manageable as it stayed within the boundaries of the pre-established architectural design

대규모 아키텍처 재구축

  • 당초 계획에 없던 작업이며, 출시 이후 진행할 예정이었던 작업을 진행(교통사고 영향)
  • 애초에 RyzenAdj의 단순한 프론트엔드를 목표로 설계되었기 때문에 초기 아키텍처에서 대규모 데이터 저장 구조를 충분히 고려하지 않았으며, 프로젝트 확장에 따른 데이터 모델 전환 과정에서 대량의 코드 수정이 발생하는 기술 부채가 발생
  • DB 관련 코드가 추가되면서 전체 코드량이 상당히 증가
  • 빌더를 독립하여 메인 트리에서 약 5천 라인의 코드를 제거(약 5K LOC)
  • 코드 변경량은 매우 많았으나, 기존 아키텍처의 설계 범위 내에서 이루어진 재구축이므로 전체적인 구현 난이도는 높지 않았음

The test unit fried

  • Device power suddenly turned off while coding.
  • No response to USB PD charging.
  • Currently, development is underway on Intel-based tablet PC.
  • The device had a significant number of problems from the moment of purchase.

테스트 기기 사망

  • 코딩 중 장치 전원이 갑자기 꺼짐.
  • USB PD 충전기 연결 시 무반응.
  • 현재 인텔 기반 태블릿 PC에서 개발 진행.
  • 해당 기기는 구매시부터 문제가 많았음

Graphics Backend Compatibility Issues

  • Vulkan API conflicts occurred in Intel environments
    • Triggered by ImGui_ImplVulkan_InitMultiViewportSupport(), which was hardcoded inside ImGui_ImplVulkan_Init within the Dear ImGui (Docking) Vulkan backend(Normal operation even if the code is deleted)
    • Resolved by updating and migrating back to standard Dear ImGui
  • UI runtime reconfiguration logic that operated normally on AMD hardware exhibited non-deterministic behavior on Intel environments
    • Intermittent crashes occurred roughly 1 out of 10 runs, debuggers were immediately disconnected upon crash, preventing direct root-cause identification via memory dumps or call stacks
    • Presumed to be a vendor-specific driver compatibility issue with legacy OEM Intel drivers, resolved by redesigning affected UI code paths to fundamentally eliminate failure states

그래픽 백엔드 호환성 문제

  • 인텔 환경에서 Vulkan API 호환성 문제
    • Dear ImGui(Docking) Vulkan 백엔드 ImGui_ImplVulkan_Init 에 하드코딩된 ImGui_ImplVulkan_InitMultiViewportSupport() 에서 문제 발생(코드 삭제 시 정상 작동)
    • 일반 Dear ImGui 로 변경 및 업데이트하여 해결
  • AMD 환경에서는 정상적으로 작동하는 UI 런타임 재구성 코드가 Intel 환경에서 다르게 동작하는 문제 발생
    • 10회 중 1번 정도 크래시 증상이 발생, 크래시 시 디버거 연결이 즉시 종료되어 디버거를 통한 직접적인 원인 확인이 불가능했음
    • 구형 OEM 인텔 드라이버와의 호환성 문제로 보여 UI 코드 일부를 재설계하여 문제 발생 가능성을 제거

PawnIO Support

  • Originally considered developing a custom kernel driver as a long-term plan, but PawnIO was adopted due to development delays caused by a traffic accident
  • Since a custom driver had been considered from the beginning, the Ring0 engine was already abstracted, allowing PawnIO backend support to be added without significant difficulty
  • WinRing0 is temporarily retained to use special I/O ports not supported by PawnIO

PawnIO 지원

  • 장기 계획으로 자체 커널 드라이버를 고려하였지만 교통사고로 인해 개발 일정이 지연되어 PawnIO를 사용
  • 자체 드라이버를 처음부터 고려하여 이미 Ring0엔진은 추상화가 되어있는 상황, 어렵지 않게 PawnIO 백엔드 지원 추가
  • PawnIO에서 지원하지 않는 특수 I/O Port 사용을 위해 WinRing0 당분 간 유지

[2026-08-07] Resuming Development - Slow pace due to lingering effects of the accident

[2026-08-07] 개발 재개 - 사고 영향으로 인한 개발 속도 저하

[2026-04-17] Development temporarily suspended due to traffic accident

[2026-04-17] 교통사고로 개발 일시중지


version - 0.0.8.0-prototype / 40,464 LOC

버전 - 0.0.8.0-prototype / 40,464 LOC

  • Added: Function-level Encrypted Native Bytecode Extractor
  • Added: Function-level Encrypted Native Bytecode Loader/Unloader with Runtime Cloaking
  • Added: Conversion of existing native functions to encrypted bytecode with runtime integration
  • Added: Automate bytecode extraction & merge into existing codebase -> Build Pipeline Integration
  • Added: HDE64 for bytecode extraction and relative address analysis of specific hardware instructions
  • Added: RGB Alarm
  • Added: Rendering backend abstraction layer
  • Added: Vulkan rendering pipeline
  • Added: FreeType, ImGui font atlas
  • Added: UTF8 <-> UTF32 conversion - utfcpp
  • Added: Language pack internal emoji string detection and font glyph matching
  • Added: Pass commands entered on the command line to the running Smeltrix instance
  • Added: OpenGL rendering pipeline
  • Added: DirectX12 rendering pipeline(DComp)
  • Added: Runtime Library Manager
  • Changed: bat, cmake build pipeline -> own build system (xmake-based frontend)
  • Changed: DirectX 11 library loading method changed (static linking -> runtime dynamic loading)
  • Changed: Service start/stop code removed -> Automatic scheduler table registration and management
  • Changed: Service initialization/termination code removed -> Automatic table-based registration and management
  • Changed: Refactored Front-end code
  • Changed: Updated Dear ImGui to v1.92.7 WIP
  • Changed: Front-end code redesign (applying the Phase 1 design)
  • Changed: Removed ImGui multi-viewport -> Multi-threaded structure Applied
  • 추가: 함수 단위 암호화 네이티브 바이트코드 추출 시스템
  • 추가: 런타임 클로킹 기능을 포함한 함수 단위 암호화 네이티브 바이트코드 로드/언로드 시스템
  • 추가: 기존 네이티브 함수의 암호화 바이트코드 전환 및 런타임 적용
  • 추가: 바이트코드 추출 & 기존 코드베이스에 병합 자동화 -> 빌드 파이프라인 통합
  • 추가: 특정 하드웨어 명령어의 바이트코드 추출 및 상대 주소 분석용 - HDE64
  • 추가: RGB 알람
  • 추가: 렌더링 백엔드 추상화 계층
  • 추가: Vulkan 렌더링 파이프라인
  • 추가: FreeType, ImGui 폰트 아틀라스
  • 추가: UTF8 <-> UTF32 변환 - utfcpp
  • 추가: 언어팩 내부 이모지 문자열 감지 및 폰트 글리프 매칭
  • 추가: 커맨드라인에서 입력한 명령을 실행 중인 Smeltrix 인스턴스로 전달
  • 추가: OpenGL 렌더링 파이프라인
  • 추가: DirectX12 렌더링 파이프라인(DComp)
  • 추가: 런타임 라이브러리 매니저
  • 변경: bat, cmake 빌드 파이프라인 -> 자체 빌드 시스템(xmake 기반 프론트엔드)
  • 변경: DirectX 11 라이브러리 로딩 방식 변경 (정적 링크 -> 런타임 동적 로딩)
  • 변경: 서비스 시작/중지 코드 제거 -> 스케줄러 테이블 자동 등록 및 관리
  • 변경: 서비스 초기화/종료 코드 제거 -> 테이블 기반 자동 등록 및 관리
  • 변경: 프론트엔드 코드 개선
  • 변경: Dear ImGui 1.96.7 WIP 로 업데이트
  • 변경: 프론트엔드 코드 재설계(1단계 설계안 적용)
  • 변경: ImGui 멀티뷰포트 제거 -> 멀티스레드 구조 적용

Note

노트

Build System

  • Initial: Builds were managed using batch scripts, but as the project size grew, they were switched to CMake.
  • Problem: CMake made complex pre/post-processing difficult, so batch scripts were used in parallel, increasing system complexity.
    (Current build target is subject to frequent updates, requiring flexibility)
  • Alternative: Considering introducing Lua-based xmake, familiar from past gaming experiences.
  • Problem: Limitations in implementing Fine-grained build sequences, such as OS-level manipulation restrictions when using xmake's os.exec.
  • Solution: Based on the existing batch builder design, a GUI based on xmake + Python + PySide6 was created to control the entire build pipeline.
  • Status: 80% of the GUI's xmake functionality is supported
  • Features:
    1. Parse CMakeLists.txt and xmake.lua to separate global project and individual targets
    2. Modularize each target into separate Lua scripts
    3. Set the execution order of build targets via GUI
    4. Configure target activation/deactivation and detailed options (CX Flags, Include, etc.) through GUI
    5. Export the entire build pipeline into a single make.lua file

Transitioning from Multi-Viewport to a Multi-Instance-Based Multithreaded Architecture

  • Problem: When adding the Vulkan backend
  • Details: Structural differences between DirectX11 and Vulkan increase the cost of custom backends and manual clear abstractions.
  • Solution: Structural redesign
  • Result:
    • The rendering API can be selected per window and switched at runtime.
      API = (OpenGL || Vulkan || DirectX11 || DirectX12)
  • Comparison
    • Multi-Viewport
      • Pros: Simple and Easy
      • Cons:
        • Custom per-window clear behavior was possible, but required additional backend-specific modifications in my implementation.
        • The code for manual clear to make the window transparent is quite complex
        • Possible mismatch between custom DWM behavior and Dear ImGui viewport/window management
    • Multi-Instance-Based Multithreading
      • Pros:
        • Full control - each instance runs like an independent program
        • Each instance has its own Dear ImGui context and renderer state, running on a separate thread
      • Cons:
        • Architecture redesign is required
        • System programming knowledge required
        • Very high implementation cost
        • increased memory usage
  • Conclusion: For general applications, the implementation cost outweighs the benefits.

빌드 시스템

  • 초기: 배치 스크립트로 빌드를 관리했으나, 프로젝트 규모 증가로 CMake로 전환
  • 문제: CMake 로 복잡한 사전/사후 처리가 어려워 배치 스크립트를 병행, 시스템 복잡도 증가
    (현재 빌드 대상이 잦은 업데이트로 유연성이 필요한 상태)
  • 대안: 과거 게이밍 경험으로 친숙한 Lua 기반의 xmake 도입을 검토
  • 문제: xmake 의 os.exec 사용 시 OS 레벨 조작 제한 등 세밀한 빌드 시퀀스 구현에 한계
  • 해결: 기존 배치 빌더 설계를 기반으로 xmake + Python + PySide6 기반 GUI 를 만들어 전체 빌드 파이프라인 제어
  • 상황: GUI 의 xmake 기능 대응률 80%
  • 기능:
    • CMakeLists.txt와 xmake.lua를 파싱하여 글로벌 프로젝트와 개별 타겟 분리
    • 각 타겟을 개별 Lua 스크립트로 모듈화 저장
    • GUI에서 빌드 타겟 실행 순서 설정
    • GUI를 통해 타겟 활성화/비활성화 및 세부 옵션(CX Flags, Include 등) 설정
    • 전체 빌드 파이프라인을 단일 make.lua 파일로 내보내기

멀티 뷰포트에서 멀티인스턴스 기반 멀티 스레드 아키텍처로 전환

  • 문제점: 멀티 뷰포트에서 Vulkan 백엔드 추가
  • 세부 사항: DirectX11-Vulkan 간 구조 차이로 커스텀 백엔드 및 수동 클리어 추상화 비용 증가
  • 해결책: 구조 재설계
  • 결과:
    • 런타임에서 각 창 생성시 렌더링 API 선택 및 전환 가능
      API = (OpenGL || Vulkan || DirectX11 || DirectX12)
  • 비교:
    • 멀티 뷰포트
      • 장점: 쉽고 간단함
      • 단점:
        • 수동 클리어는 가능, 커스텀 설정을 위해서는 백엔드 수정 필요
        • 창 투명화를 위한 수동 클리어시 코드가 상당히 복잡
        • DWM/뷰포트 정책 불일치 문제 발생 가능
    • 멀티인스턴스 기반 멀티 스레드
      • 장점:
        • 완전한 제어 - 각 인스턴스가 독립된 프로그램처럼 동작
        • 각 인스턴스는 자체 Dear ImGui 컨텍스트와 렌더러 상태를 가지며, 별도의 스레드에서 실행
      • 단점:
        • 아키텍처 재설계가 요구됨
        • 시스템 프로그래밍 영역
        • 구현 비용 매우 높음
        • 메모리 사용량 증가
  • 결론: 일반적인 애플리케이션에서는 구현 비용 대비 이점이 낮다고 판단.

version - 0.0.7.0-prototype / 31,547 LOC

버전 - 0.0.7.0-prototype / 31,547 LOC

  • Added: Hardware Abstraction Layer
  • Added: Detailed log system
  • Added: Function Pointer-based Hybrid Timer (Supports Real-time Switching between Standard / TSC-based Modes)
  • Added: Data pointers for Frontend binding
  • Added: UI runtime replacement (releases and recreates D3D11/DWM/ImGui resources)
  • Added: Virtual GamePad -> ViGEmBus
  • Added: Internal Screen Brightness control function
  • Added: Battery Charging Hysteresis
  • Added: Controller Recognition Control - HidHide
  • Added: Intel GPU Monitoring -> Level Zero (experimental, untested)
  • Added: CMOS, CPUID, MSR, PCI - WinRing0
  • Added: Runtime function cloaking (memory protection and execution-time decryption)
  • Changed: Separate & isolate the frontend from the main loop
  • Changed: Improved virtual pad, rear keys, dedicated key, Ring UI
  • Changed: Gyro sensor separation -> Gyro server, sensor integration
  • Changed: Optimized App Profile and some code
  • Changed: Reconfigured scheduler execution model
    • Moving to a static worker pool-based execution architecture
    • Introducing task ownership-based management
    • Separating real-time, timer, and event loop execution paths
    • Support for task-specific CPU priority settings
  • Changed: Replace individual pointers in logging functions -> Switch static function pointer table structure
  • 추가: 하드웨어 추상화 계층
  • 추가: 상세 로그 시스템
  • 추가: 함수 포인터 기반 하이브리드 타이머 (표준/TSC 기반 실시간 스위칭 지원)
  • 추가: 프론트엔드용 데이터 포인터
  • 추가: UI 런타임 재구성 (D3D11/DWM/ImGui 리소스 해제 및 재생성)
  • 추가: 가상 게임패드 -> ViGEmBus
  • 추가: 내부 화면 밝기 조절
  • 추가: 배터리 충전 히스테리시스
  • 추가: 가상패드 인식 제어 -> HidHide
  • 추가: 인텔 GPU 모니터링 -> Level Zero (실험적, 테스트 미검증)
  • 추가: CMOS, CPUID, MSR, PCI - WinRing0
  • 추가: 런타임 함수 클로킹 (메모리 상 보호 및 실행 시 복호화)
  • 변경: 메인루프에서 프론트엔드 분리&격리
  • 변경: 가상패드, 후면키, 전용키, Ring UI 개선
  • 변경: 자이로 센서 분리 -> 자이로 서버, 센서 통합
  • 변경: 앱프로필 및 일부 코드 최적화
  • 변경: 스케줄러 실행 모델 재구성
    • 정적 워커 풀 기반 실행 구조로 전환
    • 태스크 소유권(owner) 기반 관리 도입
    • 실시간 / 타이머 / 이벤트 루프 실행 경로 분리
    • 태스크별 CPU 우선순위 설정 지원
  • 변경: 로깅 기능 함수 개별 포인터 교체 -> 정적 함수 포인터 테이블 스위칭 구조

Note

노트

UI Runtime Rebuild & Resilience Strategy

  • Issue: Destruction of D3D11 resources caused by external factors (e.g., TDR, Device Removal).
  • Symptom: The process remains active, but the rendering state becomes invalid, resulting in a visual void.
  • Solution: UI layers are decoupled from the core loop as autonomous modules. Running as Scheduler tasks, they can reconstruct their UI at runtime by releasing and recreating D3D11/DWM/ImGui resources through a Function Pointer Chain, without interrupting background service threads.
  • Recovery: D3D11 device failure is detected by the Core, triggering the UI runtime rebuild sequence.

Voice Recognition Test

  • Purpose: Hardware control through voice recognition
  • Implementation: Developed a voice front-end using whisper.cpp and WinRT, and successfully executed commands by integrating internal APIs.
  • Problem: Even if the voice recognition model is used as tiny, the CPU exceeds 30-50%, and due to the noise generated by the cooler noise of UMPC and the bad position of the microphone, there are significant problems with recognition, so a noise filter is essential, but this requires higher usage, and GPU acceleration has a negative effect on gaming, so it cannot be solved with whisper.cpp.
  • Conclusion: Disabled code, excluded from main branch.
[2026-01-28 22:07:00] [FRONTEND ][ OK ][Online ][VOICE ] => Prepare to Interface [2026-01-28 22:07:00] [UTILITY ][ OK ][Success][Scheduler ] => Registered - FRONTEND_VOICE [2026-01-28 22:07:50] [FRONTEND ][ OK ][Success][VOICE] => Detect -> Dri! Dri! [2026-01-28 22:08:10] [FRONTEND ][ OK ][Success][VOICE ] => Detect -> Trix

240Hz VSync Synchronization Measured with the Scheduler Function

  • Purpose: GUI loop analysis using the internal scheduler's Cycle/Uptime measurement function
  • Environment: 240Hz monitor, ImGui immediate mode, VSync enabled
  • Measurement System: Scheduler's built-in Cycle counter, std::chrono::steady_clock
  1. Measurement Data: T1: 1,178,925 Cycles / 5,049s, T2: 1,227,156 Cycles / 5,250s
  2. Variance: Cycles: 48,231, Time: 201s
  3. Performance: Average TPS: 239.955 (48,231 ÷ 201), Average Latency: 4.167ms (1,000ms ÷ 239.955)
  4. Accuracy: Theoretical (240Hz): 4.166ms, 48,240 cycles, Measured: 4.167ms, 48,231 cycles
    Error: 0.024% (Latency), -0.019% (Cycles)
  5. Conclusion: Scheduler Measurement Accuracy: 99.98%, VSync Synchronization Precision: 99.976%
    Zero-Lag Loop, Hardware Refresh Rate Limit Confirmed
  6. Note: This is a calculation error caused by truncating the sub-second (ms) unit displayed on the UI. When analyzing the correlation between the actual cycle (48,231 times) and the hardware refresh rate (240 Hz), it is determined that there is actually 100% synchronization.

UI 런타임 재구성 및 장애 대응

  • 문제: TDR, 디바이스 제거(Device Removal) 등의 외부 요인으로 인해 D3D11 리소스가 소실될 수 있음.
  • 증상: 프로세스는 정상적으로 실행 중이지만 렌더링 상태가 무효화되어 화면이 출력되지 않는 현상 발생.
  • 해결: UI 계층을 Core Loop와 분리된 독립 모듈로 구성. Scheduler Task로 실행하며, Function Pointer Chain을 통해 D3D11/DWM/ImGui 리소스를 해제한 후 UI를 런타임에 재구성하여 백그라운드 서비스 스레드의 실행을 중단하지 않고 복원.
  • 복원: Core에서 D3D11 디바이스 오류를 감지하면 해당 UI의 런타임 재구성 절차를 실행.

음성인식 테스트

  • 목적: 음성인식을 통한 하드웨어 제어
  • 구현: 음성 프론트엔드 제작 whisper.cpp+winrt, 내부 API를 연동하여 명령 실행 성공
  • 문제: 음성인식 모델을 tiny로 사용하여도 CPU 30~50%가 넘어가며 UMPC 특성상 쿨러 소음으로 노이즈 발생+마이크 위치 나쁨으로 인하여 인식에 상당한 문제가 발생, 노이즈 필터가 필수적이지만 이는 더 높은 사용율을 요구, GPU 가속은 오히려 게이밍이 악영향을 주기 때문에 whisper.cpp 로는 해결 불가
  • 결론: 코드 비활성화,메인브런치에서 제외
[2026-01-28 22:07:00] [FRONTEND ][ OK ][Online ][VOICE ] => Prepare to Interface [2026-01-28 22:07:00] [UTILITY ][ OK ][Success][Scheduler ] => Registered - FRONTEND_VOICE [2026-01-28 22:07:50] [FRONTEND ][ OK ][Success][VOICE ] => Detect -> 드리! 드리! [2026-01-28 22:08:10] [FRONTEND ][ OK ][Success][VOICE ] => Detect -> 트릭스

스케줄러 기능으로 측정으로 검증한 240Hz VSync 동기화

  • 목적: 자체 스케줄러의 Cycle/Uptime 측정 기능을 활용한 GUI 루프 분석
  • 환경: 240Hz 모니터, ImGui 즉시모드, VSync 활성화
  • 측정 시스템: 스케줄러 내장 Cycle 카운터, std::chrono::steady_clock
  1. 측정 데이터: T1: 1,178,925 Cycles / 5,049s, T2: 1,227,156 Cycles / 5,250s
  2. 변화량: Cycles: 48,231회, Time: 201초
  3. 성능: 평균 TPS: 239.955 (48,231 ÷ 201), 평균 Latency: 4.167ms (1,000ms ÷ 239.955)
  4. 정확도 :이론값 (240Hz): 4.166ms, 48,240 cycles, 실측값: 4.167ms, 48,231 cycles
    오차: 0.024% (Latency), -0.019% (Cycles)
  5. 결론 : 스케줄러 측정 정확도: 99.98%, VSync 동기화 정밀도: 99.976%
    Zero-Lag Loop, 하드웨어 주사율 한계치 도달 확인
  6. 참고 : UI 표시상 초 미만(ms) 단위를 절삭함에 따라 발생한 계산상의 오차이며, 실측 사이클(48,231회)과 하드웨어 주사율(240Hz)의 상관관계 분석 시 실상 100% 동기화인 것으로 판단됨

version - 0.0.6.0-prototype / 20,376 LOC

버전 - 0.0.6.0-prototype / 20,376 LOC

  • Added: Loop Task Scheduler for periodic sensor/monitoring updates
  • Added/Changed: Introduced a Pipeline Abstraction Layer between modules and UI to achieve decoupling
  • Added/Changed: UI size individual adjustment -> Unified UI scaling (Width, Height, DPI, based on 720p~8K)
  • Added/Changed: Independent audio service / Changed existing audio synchronization function to shared memory synchronization
  • Added: Quick access Ring UI (Toggle Support)
  • Added: RTSS-style Overlay
  • Added: RTSS Auto-Launch/Recovery option
  • Changed: UI-related function calls -> converted to function pointers
  • Changed: Global/scattered variables -> consolidated into app context
  • Changed: Configuration handling structure from if-else -> lambda + map 1:1 mapping
  • Changed: Switched from individual asynchronous threads to a single shared worker thread system
  • Changed: Cache-line aligned, false-sharing-aware runtime state architecture
  • Changed: Removed RGB Global Brightness Control -> Added Individual Color Alpha (Transparency) Support
  • Changed: Updated Dear ImGui to v1.92.6 WIP
  • Changed: Replaced System Modal with standard rendering and integrated into the UI dispatcher
  • Changed: Default Windows tray menu -> ImGui rendered menu
  • Changed: Modified ImGui_ImplWin32_CreateWindow
  • Changed: Message map-based localization -> context-based
  • Changed: Modified ImGui tooltip and popup malfunction in multiviewport
  • Changed: RTSS, PDH, Battery, Fan, Xbox Controller, ADLX, AppProfile
    class removed -> Function+Context
    Independent Loop -> Task Scheduler
  • Changed: Audio, Notification, RGB, RyzenAdj class removed -> Function+Context
  • Changed: Deprecated old EC code, rewrote functions and context from scratch
  • Changed: Old EC dependent battery, fan, and RGB functions have all been rewritten
  • Changed: Battery information changed from WMI to DeviceIoControl
  • Changed: Project Name Ayo Control -> Smeltrix(Smelt + Matrix)
  • 추가: 센서/모니터링 주기 작업을 위한 루프용 작업 스케줄러
  • 추가/변경: 모듈, UI 사이에 파이프라인 계층 추가로 결합도 제거
  • 추가/변경: UI 크기 개별 조절 -> UI 크기 통합 스케일링 (Width, Height, DPI, 720p~8K 기준)
  • 추가/변경: 독립 오디오 서비스 / 기존 오디오 동기화 기능 -> 공유 메모리 동기화로 변경
  • 추가: ImGui 멀티 뷰포트 기반 독립 윈도우 구조 적용
  • 추가: 링 UI
  • 추가: RTSS 스타일 오버레이
  • 추가: RTSS 자동 실행/복구 옵션
  • 변경: UI 관련 함수 호출 -> 함수 포인터로 변경
  • 변경: 전역/산재 변수 -> 앱 컨텍스트로 통합
  • 변경: 설정값 처리 구조 if-else -> 람다+맵 1:1 매핑
  • 변경: 개별 비동기 스레드에서 시스템 공용 워커 스레드 기반 구조로 전환
  • 변경: 캐시 라인 기반, false sharing 을 고려한 런타임 상태 메모리 구조 적용
  • 변경: RGB 전역 밝기 제어 삭제 -> 개별 색상 알파(투명도) 방식 추가
  • 변경: Dear ImGui v1.92.6 WIP 로 업데이트
  • 변경: 시스템 모달 삭제 -> 일반 랜더링 으로 변경 후 UI 디스패치 편입
  • 변경: 윈도우 트레이 메뉴 -> ImGui 렌더링 기반 메뉴
  • 변경: ImGui_ImplWin32_CreateWindow 수정
  • 변경: 메시지 맵 기반 다국어 구조 -> 컨텍스트 기반
  • 변경: 멀티뷰포트에서 ImGui 툴팁, 팝업 오작동 수정
  • 변경: RTSS, PDH, 배터리, 팬, 엑스박스 컨트롤러, ADLX, 앱프로필
    클래스 제거 -> 함수+컨텍스트
    독립 실행 루프 -> 작업 스케줄러
  • 변경: 오디오, 알림, RGB, RyzenAdj 클래스 제거 -> 함수+컨텍스트
  • 변경: 기존 EC 코드 폐기, 함수+컨텍스트 새로 작성
  • 변경: 기존 EC 의존 기능 배터리, 팬, RGB 기능 재작성
  • 변경: 배터리 정보 WMI 기반 -> DeviceIoControl 기반으로 변경
  • 변경: 프로젝트명 Ayo Control -> Smeltrix(Smelt + Matrix)

Note

노트

Reasons for Redesign

  • Most core features have reached the completion stage
  • Adding the remaining features under the current structure would make future maintenance and development direction unsustainable, therefore a full architectural redesign was required

Effects of Function Pointer Optimization (Partial)

  • Rendering function calls based on conditional branching -> replaced with function pointer dispatch
  • Frame time formula: T = 1000ms (1 second) / f (refresh rate)
    • 60Hz: 16.6ms
    • 240Hz: 4.16ms
  • Changed: Replaced if-else and switch branching in the rendering loop with function pointer based dispatch.

Ring UI

  • Implemented a ring menu overlay that operates independently from the main window, has a 100% transparent background, and is positioned at the top.
  • Newly created viewports are created independently from the existing structure, so existing settings are not applied.
  • The backend code does not support alpha by default. Disable the backend function via a flag and directly control clearing.
  • I confirmed a solution by temporarily modifying the API code for testing, but I prefer not to directly modify the API.
  • Added transparency by directly controlling the window handle automatically generated by ImGui.

System Modal

  • Issue: In a multi-viewport environment, blur effect is applied globally to all viewports
  • Symptom: Even when specifying a viewport for the modal, blur effect is still applied globally
  • Solution: Switched to standard rendering, removed the modal
  • Note: Legacy code with low priority caused the issue; chose a simple and reliable alternative without investigating further

OSD Flickering Issue

  • Problem: After enabling ImGui multi-viewport, screen flickering occurs on the first frame when dynamically creating UI.
  • Symptom: During UI creation, a black screen (uninitialized back buffer) is briefly displayed only on the first frame.
  • Cause: In the ImGui Win32 backend's ImGui_ImplWin32_CreateWindow(), the window is exposed to the OS compositor immediately upon creation, while the DX11 swap chain and render target have not yet been initialized, causing the first frame to be presented in an incomplete state.
  • Solution: Modified ImGui_ImplWin32_CreateWindow() to immediately hide the window using ShowWindow(hwnd, SW_HIDE) after creation, then display it with ShowWindow(hwnd, SW_SHOWNA) once the first frame rendering is complete.
  • Explanation: The ImGui multi-viewport API does not appear to provide an official flag or callback to control the window's initial visibility timing. While clear behavior can be controlled via existing flags, window exposure timing depends on backend implementation, making direct backend modification a structural necessity.
  • Memo: During troubleshooting, an immediate transition to Vulkan was seriously considered. Because the DX11 backend lacks clearly exposed control points, a long-term migration is under evaluation.

ImGui pop-up elements malfunction

  • Issue: After enabling ImGui multi-viewport, some pop-up elements (combo boxes, tooltips, etc.) do not appear.
  • Symptom: Pop-up elements do not appear if their size exceeds the UI boundaries.
  • Cause: It appears to be an attribute disconnection between Windows DWM and ImGui Viewports. rather than a bug, it is a rendering policy mismatch.
  • Solution: Force the properties of the pop-up elements to be set to the main viewport.

Audio Service Separation

  • Problem: Some COM-based functions are not working during refactoring.
  • Symptom: The file picker, battery information, and audio volume services malfunction
  • Cause: Due to an old COM threading model issue, APARTMENTTHREADED and MULTITHREADED functions do not work.
  • Solution: The audio service was separated from the previously created Gyro server and then controlled via shared memory communication.
  • Description: It appears that Windows backward compatibility still affects the service. Even a simple file browser is experiencing issues, requiring changes to the execution threads themselves.
  • Note: Each service was planned to be separated in the future, but since the COM based function itself seemed to have potential risks, physical separation of audio was carried out first.

Project Name Change

  • The initial version was a front-end app providing simple TDP management and shortcut functions, and was sufficiently named Ayo Control.
  • As its low-level hardware control and data optimization logic deepened, it evolved far beyond the scope of a simple control app.
  • Accordingly, the name was changed to reflect its nature as a system engine and integrated platform that directly controls hardware, transcending the mere utility.

재설계 이유

  • 핵심 기능 대부분 완성 단계
  • 남은 기능을 추가할 경우 현 구조가 추후 유지보수와 개발 방향에 적합하지 않아 전면 재설계

함수 포인터 변경

  • 분기 제어에 의한 랜더링 함수 호출 -> 함수 포인터 교체
  • 프레임 타임 공식: T=1000ms(1초)/f (주사율)
    • 60Hz: 16.6ms
    • 240Hz: 4.16ms
  • 변경 사항: 렌더링 루프 내의 if-else, switch 분기 제어를 함수 포인터 방식으로 전환

링 UI

  • 메인 윈도우와 독립적으로 동작, 배경이 100% 투명하고 최상단에 위치하는 링 UI 구현
  • 새로 생성된 뷰포트는 기존 구조와 별개로 독립 생성, 기존 설정이 적용 안됨
  • 백엔드 코드는 기본적으로 알파 미지원, 플래그를 통한 백엔드 기능을 비활성화 후 직접 클리어 제어
  • 테스트를 위해 API 코드 임시 수정으로 문제 해결 확인, 하지만 API 직접 수정을 선호하지 않음
  • ImGui 가 자동 생성한 윈도우 핸들을 직접 제어하여 투명도 추가

시스템 모달

  • 문제: 멀티 뷰포트 환경에서 모든 뷰포트에 흐림 효과가 전역 적용
  • 증상: 모달에 뷰포트를 지정하여도 흐림 효과는 여전히 전역 적용
  • 해결: 일반 랜더링으로 변경, 모달 삭제
  • 설명: 레거시 코드로 우선순위가 낮은 상태에서 문제 발생, 간단하고 확실한 대안 선택으로 문제 조사 없이 바로 변경

OSD 화면 깜박임

  • 문제: ImGui 멀티 뷰포트 활성화 이후, 동적 UI 생성 시 첫 프레임에서 화면 깜박임 발생
  • 증상: UI가 생성될 때 첫 프레임에 한해 검은 화면(미초기화 백버퍼)이 순간적으로 출력됨
  • 원인: ImGui Win32 백엔드의 ImGui_ImplWin32_CreateWindow()에서 윈도우가 생성되는 즉시 OS 합성 단계에 노출되지만, 해당 시점에는 DX11 스왑체인과 렌더 타겟이 아직 초기화되지 않아 첫 프레임이 미완성 상태로 표시됨
  • 해결: ImGui_ImplWin32_CreateWindow()를 수정하여 창 생성 직후 ShowWindow(hwnd, SW_HIDE)로 숨긴 뒤, 첫 프레임 렌더 완료 시점에 ShowWindow(hwnd, SW_SHOWNA)로 표시하도록 변경
  • 설명: ImGui 멀티 뷰포트 API에는 윈도우 생성 시 표시 타이밍을 제어할 공식 플래그나 콜백이 존재하지 않는 것으로 보임. Clear 동작에 대한 제어 플래그는 제공되지만, 윈도우 노출 타이밍은 백엔드 내부 구현에 의존하므로 백엔드 코드 수정이 불가피한 구조적 한계로 보임.
  • 메모: 문제 해결 과정에서 당장 Vulkan으로의 전환을 진지하게 고려, DX11 백엔드는 내부 제어 지점이 명확하지 않아 장기적으로는 전환을 고려.

ImGui 모든 팝업 동작 요소의 일부 오작동

  • 문제: ImGui 멀티 뷰포트 활성화 이후, 팝업 동작 요소(콤보박스, 툴팁 등)의 일부가 나오지 않음
  • 증상: 팝업 요소의 크기가 UI 경계선을 넘게되면 나타나지 않음
  • 원인: Windows DWM 과 ImGui 뷰포트 사이의 속성 단절 문제로 버그가 아닌 렌더링 정책 불일치로 보임
  • 해결: 팝업 요소의 속성을 메인뷰포트로 강제 설정

오디오 서비스 분리

  • 문제: 리팩토링중 기능 일부중 COM 기반 기능들이 작동하지 않음
  • 증상: 파일 선택기, 배터리 정보, 오디오 볼륨 서비스가 작동 불가
  • 원인: 오래된 COM 쓰레드 모델 문제로 APARTMENTTHREADED, MULTITHREADED 에 따라 작동 불가
  • 해결: 이전에 만든 자이로서버 기반으로 오디오 서비스를 분리 후 공유 메모리 통신으로 조작
  • 설명: 윈도우즈의 하위 호환성이 영향을 주는것으로 보임, 파일 브라우져 조차 문제가 생겨 실행 쓰레드 자체를 변경해서 각각 적용해야 하는것으로 보임
  • 메모: 각 서비스는 차후에 분리할 예정이였지만 COM 기반 기능 자체가 잠재적 위험이 있어 보여 우선 오디오 부터 물리적 분리를 단행.

프로젝트명 변경

  • 초기 버전은 간단한 TDP 관리와 단축키 기능을 제공하는 프론트엔드 앱이였으며 Ayo Control 이라는 이름으로 충분
  • 하드웨어 로우레벨 제어와 데이터 최적화 로직이 점점 깊어지면서, 단순한 컨트롤 앱의 범위를 훨씬 넘어서는 규모로 발전
  • 이에 따라, 단순 유틸리티를 넘어 하드웨어를 직접 제어하는 시스템 엔진이자 통합 플랫폼으로서의 성격을 반영하여, 명칭을 변경

version - 0.0.5.0-prototype / 14,477 LOC

버전 - 0.0.5.0-prototype / 14,447 LOC

  • Added: Controller Hooking
  • Added: Virtual GamePad
  • Added: GPU clock limit feature, enable option, and UI checkbox – SMU table entry 213
  • Added: CPU clock limit enable feature and UI checkbox
  • Added: Forced initialization before policy change in Performance Mode to prevent power policy conflicts
  • Added: Controller Mapping UI
  • Added: Simplified Chinese support
  • Changed: UI improvements
    • Added split button
    • Removed hardcoded values for all UI elements
    • dynamic resizing support to handle window width changes
    • Reorganized settings UI into table layout for consistent alignment
    • Separate theme information, manage it using JSON files
  • Changed: Hotkey handling switched from Low-Level Key Hook to WM_INPUT
  • 추가: 컨트롤러 후킹
  • 추가: 가상 게임패드
  • 추가: GPU 클럭 제한, 허용 기능 및 UI 체크박스 (SMU 테이블의 213번 엔트리)
  • 추가: CPU 클럭 제한 허용 기능 및 UI 체크박스
  • 추가: 전원 정책 충돌 방지를 위해 성능 모드에서 정책 변경 전 강제 초기화 기능
  • 추가: 컨트롤러 매핑 설정 UI
  • 추가: 중국어(간체) 지원
  • 변경: UI 개선
    • 분할 버튼 추가
    • 하드코딩된 UI 각 요소 삭제
    • 창 너비 변경에 대응하는 동적 크기 조정 지원
    • 일관된 정렬을 위해 설정 UI를 테이블 레이아웃으로 재구성
    • 테마 정보 분리, 테마 정보는 JSON 파일로 관리
    • 외부 폰트 추가 - Nato Sans
  • 변경: 단축키 처리 LowLevel Key hook -> WM_INPUT 기반으로 전환

Note

노트

GPU Clock Control

  • Attempt via ADLX API: Tried accessing using the GetManualGFXTuning API, but the call failed.
  • Forced Override Result: Manual override caused system freezing on UMPC devices. Function appears to be supported only on desktop-class products.
  • Solution: Replaced with forced GPU clock control using RyzenAdj.

Rear-side Button Mapping Analysis

  • Operation Verified: Tested mapping for A, B, X, Y, and D-Pad (Up/Down/Left/Right).
  • No Official Support: No official API or SDK is provided for this functionality.
  • Reflection Timing: Settings are not applied immediately and take effect only after internal state transitions.
  • Unstable Behavior Characteristics:
    • Behavior varies depending on initialization sequence, timing, and repetition count.
    • Even with identical input data, the device may ignore commands or perform a reset (opposite action), making it tricky to handle.

NPU Attempt – Failure

  • Background: The goal was to implement inverse-correlation TDP control (AutoFPS) that predicts in-game FPS drops in advance and proactively adjusts power consumption.
  • Early Signal Detection: Analysis of collected system sensor data revealed clear precursor patterns related to FPS increases and fluctuations under specific conditions.
  • Training Environment Setup: An ONNX model was created based on the collected system variables, and an AI development environment was set up using Ryzen-AI + SW and Anaconda. (If the Anaconda license agreement was not accepted prior to installation, the Ryzen-AI installation would not complete.)
  • Technical Limitations: It became evident that directly controlling and interfacing with NPU hardware from a native C++ environment is practically impossible.
  • Dependencies and Compatibility: Severe dependency and environment compatibility issues with Vitis AI, vaiml.dll, and vaip_config.json, where even minor problems result in immediate fallback to CPU or GPU execution.
  • Licensing and Investigation: Licensing constraints were acknowledged beforehand; however, this attempt was conducted for data collection purposes toward future technical 대응. In practice, NPU devices differ fundamentally from CPUs and GPUs and behave more like black boxes, rendering them incompatible with the intended application.
  • Final Action: At the current stage, it was concluded that there is no practical development or real-world utility outside of highly specific dedicated environments, leading to the complete removal of all related SDKs and AI development tools.

GPU 클럭 제어

  • ADLX API 시도: GetManualGFXTuning API로 접근했으나 호출 실패.
  • 강제 오버라이드 결과: 수동 Override 시 UMPC 시스템 프리징 발생. 데스크탑급 제품에서만 지원되는 기능으로 판단됨.
  • 해결책: RyzenAdj를 활용한 GPU 강제 클럭 조절 방식으로 대체.

후면 키(Rear-side buttons) 매핑 분석

  • 작동 확인: A, B, X, Y 및 D-Pad(상/하/좌/우) 매핑 테스트 완료.
  • 공식 지원 부재: 해당 기능에 대한 공식 API나 SDK가 전혀 제공되지 않음.
  • 반영 타이밍: 설정값이 즉시 반영되지 않고, 내부 상태 전환이 이루어진 이후에만 적용되는 특성이 있음.
  • 불안정한 동작 특성:
    • 초기화 순서, 타이밍, 반복 횟수에 따라 동작 결과가 매번 달라짐.
    • 동일한 입력 데이터라도 장치 상태에 따라 무시되거나 리셋(반대 동작)으로 처리되는 경우가 있어 까다로움.

NPU 시도 실패

  • 시도 배경: 게임 내 FPS 하락을 사전에 예측하여 전력을 선제적으로 조절하는 역상관 TDP 제어(AutoFPS) 구현 목적.
  • 전조 현상 포착: 시스템 센서 수집 정보를 분석한 결과, 특정 상황에서 FPS 상승 및 변동에 대한 명확한 전조 패턴을 확인.
  • 학습 환경 구축: 수집된 시스템 변수를 기반으로 ONNX 모델을 생성하고, Ryzen-AI+SW 및 Anaconda 기반의 AI 개발 환경 셋업. (설치전 아나콘다 사용 라이센스 수락 처리를 하지 않으면 Ryzen-AI 설치가 끝나지 않음)
  • 기술적 한계: C++ 네이티브 환경에서 NPU 하드웨어를 직접 제어하고 연동하는 기능이 실질적으로 불가능함을 체감.
  • 의존성 및 호환성: Vitis AI, vaiml.dll, vaip_config.json 의 극심한 의존성 문제 및 환경 호환성 오류 직면, 조금만 문제가 생기면 바로 CPU, GPU fallback.
  • 라이선스 및 조사: 라이선스 제약을 사전에 인지하고 있었으나, 향후 기술적 대응을 위한 데이터 수집 차원에서 접근, NPU장치는 CPU, GPU와 전혀 다르며 오히려 블랙박스에 가까워 보이며 본 사용 목적에 부합하지 않음
  • 최종 조치: 현재 시점에서는 특정 전용 환경 외에는 개발 및 실용 효용성이 없다고 판단, 관련 SDK와 AI 개발 도구 일체를 완전히 제거.

version - 0.0.4.0-prototype / 11,157 LOC

버전 - 0.0.4.0-prototype / 11,157 LOC

  • Added: CPU usage display using PDH sampling
  • Added: Vibration when mouse mode is toggled on/off
  • Added: RGB random color settings
  • Added: Profile
  • Added: In mouse mode, LT/RT trigger depth determines which function is executed
  • Added: User-configurable Fan speed by temperature range
  • Added: Show/Hide notification messages (Windows Notification Center)
  • Added: Gyro Sensor - WinRT
  • Add/Changed: Complete separation of Gyro UDP Server and Communication with sensor via Shared memory
  • Changed: Integrated TDP preset and power policy
  • Changed: Replace battery information with WMI-based data, display charge/discharge power
  • 추가: PDH 샘플링으로 CPU 사용율 표시
  • 추가: 마우스 모드 on/off 시 진동
  • 추가: RGB 무작위 색상 설정
  • 추가: 프로파일
  • 추가: 마우스 모드 시 LT/RT 트리거 깊이에 따라 각 기능 실행
  • 추가: 온도 구간별 팬 속도 사용자 설정
  • 추가: 안내 메시지 표시/끄기 (윈도우 알림센터)
  • 추가: 자이로 센서 - WinRT
  • 추가/변경: 자이로 UDP 서버 완전 분리 및 센서와 공유 메모리 통신
  • 변경: TDP프리셋, 전원 정책 통합
  • 변경: 배터리 정보를 WMI기반으로 교체, 충전/방전 전력 표시

Note

노트

Integrated the gyro feature into the main program for testing, but because implementing the Cemu UDP protocol required additional network permissions and initialization of the network stack, the feature was removed and separated into a standalone program.

자이로 기능을 본 프로그램에 통합해 테스트했지만, cemu UDP 프로토콜 구현을 위해 필요한 네트워크 권한 확대와 네트워크 스택 추가를 원하지 않아 해당 기능을 제거하고 별도 프로그램으로 분리


version - 0.0.3.0-prototype / 6,204 LOC

버전 - 0.0.3.0-prototype / 6,204 LOC

  • Added: Auto-start at Windows startup
  • Added: Automatic UI hide
  • Added: Multi-language support
  • Added: Korean support
  • Added: Theme functionality
  • Added: RGB control
  • Added: FAN control
  • Added: XBox Controller support(Xinput)
  • Added: Gamepad Mouse Mode
  • Added: RTSS support
  • Add: Long-press actions for Dedicated keys LC3, RC3, T, CB, CS, and mouse mode on/off
  • Removed: UI color setting feature
  • Changed: Removed audio volume saving feature -> Synchronize with Windows volume
  • Changed: Abstracted EC-related functions
  • Changed: Battery management was previously handled with Windows events and timers, now replaced with a background monitoring service object by abstracting the entire battery functionality
  • Changed: Separated device information from the code and reworked it to allow adding information for other devices
  • Theme functionality is already structured and can be added by reading from a file, so it is planned for future addition
  • 추가: 윈도우 시작시 자동 실행
  • 추가: UI 자동 숨김
  • 추가: 다국어 지원
  • 추가: 한국어 지원
  • 추가: 테마
  • 추가: RGB 제어
  • 추가: FAN 제어
  • 추가: 엑스박스 패드 지원(Xinput)
  • 추가: 패드 마우스 모드
  • 추가: RTSS 지원
  • 추가: 전용키 LC3,RC3,T,CB,CS 에 대한 길게 누름 액션, 마우스 모드 on/off
  • 삭제: UI 색상 설정
  • 변경: 오디오 볼륨 저장 기능 삭제->윈도우 볼륨과 동기화
  • 변경: EC관련 기능 추상화
  • 변경: 배터리 관리는 윈도우 이벤트와 timer 로 처리 하던 기능 전체를 추상화, 백그라운드 감시 서비스 객체로 교체
  • 변경:기기 정보를 코드에서 분리, 다른 기기 정보 추가 재작업
  • 테마 정보는 구조체 형식, 외부 추가 가능, 추후 예정

version - 0.0.2.0-prototype 2,421 LOC

버전 - 0.0.2.0-prototype / 2,421 LOC

  • Added: Wallpaper setting feature
  • Added: User interface improvements
  • Added: Slide mouse wheel operation
  • Added: Volume control and mute setting
  • Added: External monitor brightness adjustment feature
  • Added: Prevent window from escaping the Windows display area
  • Added: Ability to move to another monitor when using an external display
  • 추가: 배경화면 설정 기능
  • 추가: 사용자 인터페이스 개선
  • 추가: 슬라이드 마우스 휠 조작 추가
  • 추가: 볼륨 조절 및 무음 설정
  • 추가: 외부 모니터 밝기 조절 기능
  • 추가: 창이 윈도우 영역에서 탈출 불가능 하게 추가
  • 추가: 외부 모니터 사용시 다른 모니터로 이동 가능

version - 0.0.1.0-prototype / 1,771 LOC

버전 - 0.0.1.0-prototype / 1,771 LOC

  • Added: Unified Control Dashboard UI
  • Added: the exact TDP control
  • Added: Shortcut Key functionality
  • Added: Charging Limit feature
  • Added: Power policy setting feature
  • 추가: 통합 제어 대시보드 UI
  • 추가: TDP 관리 기능
  • 추가: 단축키 설정 기능
  • 추가: 충전 제한 기능
  • 추가: 전원 정책 설정 기능

Comments