개요
Dear ImGui는 C++을 위해 특별히 설계된 즉시 모드 GUI 라이브러리로, 단순성과 효율성을 강조합니다. 게임 엔진, 실시간 3D 애플리케이션 및 콘텐츠 제작 도구에 적합하며, 외부 종속성이 필요 없고 상태 동기화가 최소화되어 있습니다.
README 미리보기
Dear ImGui\n=====\n\n"Give someone state and they'll have a bug one day, but teach them how to represent state in two separate locations that have to be kept in sync and they'll have bugs for a lifetime." -ryg\n\n----\n\n[](https://github.com/ocornut/imgui/actions?workflow=build) [](https://github.com/ocornut/imgui/actions?workflow=static-analysis) [](https://github.com/ocornut/imgui_test_engine/actions?workflow=tests)\n\n(This library is available under a free and permissive license, but needs financial support to sustain its continued improvements. In addition to maintenance and stability there are many desirable features yet to be added. If your company is using Dear ImGui, please consider reaching out.)\n\nBusinesses: support continued development and maintenance via invoiced sponsoring/support contracts:\n _E-mail: contact @ dearimgui dot com_\nIndividuals: support continued development and maintenance [here](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=WGHNC6MBFLZ2S). Also see [Funding](https://github.com/ocornut/imgui/wiki/Funding) page.\n\n| [The Pitch](#the-pitch) - [Usage](#usage) - [How it works](#how-it-works) - [Releases & Changelogs](#releases--changelogs) - [Demo](#demo) - [Getting Started & Integration](#getting-started--integration) |\n:----------------------------------------------------------: |\n| [Gallery](#gallery) - [Support, FAQ](#support-frequently-asked-questions-faq) - [How to help](#how-to-help) - **[Funding & Sponsors](https://github.com/ocornut/imgui/wiki/Funding)** - [Credits](#credits) - [License](#license) |\n| [Wiki](https://github.com/ocornut/imgui/wiki) - [Extensions](https://github.com/ocornut/imgui/wiki/Useful-Extensions) - [Language bindings & framework backends](https://github.com/ocornut/imgui/wiki/Bindings) - [Software using Dear ImGui](https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui) - [User quotes](https://github.com/ocornut/imgui/wiki/Quotes) |\n\n### The Pitch\n\nDear I
FAQ (5)
문제 해결컬럼을 추가하거나 저장된 .ini 설정으로 재시작한 후 Dear ImGui 테이블 컬럼이 뒤섞이는 이유는 무엇인가요?
이 문제는 Dear ImGui 1.93.0 WIP에서 재정렬 불가능한(non-reorderable) 테이블에 영향을 미칩니다. 컬럼이 재조정되거나 설정에서 로드될 때 오래된 DisplayOrder 값이 유지되어, 이전 컬럼과 새 컬럼이 잘못 정렬되는 문제가 발생합니다—특히 저장된 컬럼 데이터가 없는 단순한 .ini 항목의 경우에 그렇습니다.
커밋 68bd43b가 포함된 버전으로 업그레이드하거나, TableFixDisplayOrder()에 다음 수정을 적용하세요:
void ImGui::TableFixDisplayOrder(ImGuiTable* table)
{
if ((table->Flags & ImGuiTableFlags_Reorderable) == 0)
{
for (int n = 0; n < table->ColumnsCount; n++)
table->DisplayOrderToIndex[n] = table->Columns[n].DisplayOrder = (ImGuiTableColumnIdx)n;
return;
}
ImGuiContext& g = *GImGui;
// existing reorderable-table logic...
}
ImGuiTableFlags_Reorderable이 없는 테이블의 경우, 컬럼은 이제 항상 선언/인덱스 순서대로 표시됩니다. 컬럼 너비 및 기타 컬럼별 데이터는 계속 ID를 기준으로 매칭됩니다. 이 변경 이후에는 Reorderable이 아닌 테이블의 프로그래매틱 재정렬이 더 이상 유지되지 않는다는 점에 유의하세요.
문제 해결IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION가 Dear ImGui에서 stb_truetype을 비활성화하지 않는 이유는 무엇인가요?
IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION은 stb_truetype.h의 링크 가능한 구현 내용만 비활성화할 뿐, ImGui의 stb_truetype 폰트 백엔드는 비활성화하지 않습니다. 커밋 4989b4c가 포함된 리비전으로 Dear ImGui를 업데이트한 다음, 다음 내용을 imconfig.h 또는 컴파일러 정의에 추가하세요:
#define IMGUI_DISABLE_STB_TRUETYPE 1
IMGUI_ENABLE_STB_TRUETYPE은 정의하지 마세요. IMGUI_ENABLE_FREETYPE을 정의해도 stb_truetype이 기본적으로 활성화되지 않게 할 수 있지만, 커스텀 폰트 로더를 사용하는 경우에는 불필요합니다.
구버전에서는 imgui_internal.h의 기본 선택 블록을 패치하세요:
#if !defined(IMGUI_ENABLE_FREETYPE) && !defined(IMGUI_ENABLE_STB_TRUETYPE) && !defined(IMGUI_DISABLE_STB_TRUETYPE)
#define IMGUI_ENABLE_STB_TRUETYPE
#endif
그런 다음 IMGUI_DISABLE_STB_TRUETYPE을 정의하고 다시 빌드하세요.
문제 해결Dear ImGui AddRect 외곽선이 AddRectFilled보다 1픽셀 짧은 문제를 해결하는 방법은?
동일한 p_min/p_max로 채워진 사각형과 외곽선을 그릴 때, 스트로크된 아래쪽 가장자리가 채워진 아래쪽 가장자리보다 한 픽셀 위에 래스터화될 수 있습니다. 기본 1픽셀 테두리의 경우, 외곽선의 최대 Y 좌표만 1픽셀 늘리세요:
draw_list->AddRectFilled(pmin, pmax, fill_color);
draw_list->AddRect(pmin, pmax + ImVec2(0.0f, 1.0f), border_color);
AddRectFilled의 pmax는 변경하지 않고 유지하세요. 이렇게 하면 보이는 아래쪽 테두리가 채워진 사각형과 정렬됩니다. AddCircle/AddCircleFilled는 동일한 반지름 기반 지오메트리를 사용하므로 영향을 받지 않습니다.
방법Dear ImGui에서 MenuItem에 아이콘을 추가하는 방법은?
권장되는 방법은 아이콘 폰트(예: FontAwesome)를 폰트 아틀라스에 병합하는 것입니다. 아이콘 폰트를 로드할 때 ImFontConfig::MergeMode = true로 설정한 다음, 메뉴 레이블 텍스트에 아이콘 글리프를 직접 삽입합니다(예: ImGui::MenuItem(ICON_FA_SAVE " Save")). 자세한 지침은 misc/fonts/README.txt를 참조하세요. 또는 내부 MenuItemEx() 함수가 아이콘 매개변수를 별도로 받습니다. 이미지 기반 아이콘의 경우 SameLine() 다음에 Image((void*)texture_id, ImVec2(16,16))를 사용하여 항목 옆에 텍스처를 수동으로 렌더링할 수 있지만, 이 방법은 위젯이나 커스텀 레이아웃 코드를 수정해야 하며 아이콘 폰트 방식보다 유연성이 떨어집니다.
문제 해결Dear ImGui 1.93.0에서 평행한 AddLine() 호출로 폴리곤을 채우면 왜 옅거나 색이 바랜 것처럼 보이나요?
ImGui 1.93.0에서는 AddLine()이 기본적으로 안티앨리어싱된 스트로크를 사용합니다. 인접한 평행선을 그려 영역을 스캔 채우기(홀수/짝수 라인 스캔 채우기)할 때, 반투명 AA 프린지가 겹쳐 블렌딩되면서 채우기가 바래 보이게 됩니다. 해결 방법: 해당 스트로크의 AA 프린지를 비활성화하려면 ImDrawFlags_StrokeLegacy를 전달하세요:
draw->AddLine(as, bs, color, 1.0f, ImDrawFlags_StrokeLegacy);
이렇게 하면 1.93 이전의 솔리드 스트로크 동작과 기대한 채우기 색상이 복원됩니다. 이는 버그가 아니라 사용상의 제한 사항입니다. 일반/오목 다각형의 경우 구멍이 필요하지 않다면 ImGui의 convex fill API를 고려하세요.