심구이
이것은 우수한 C++ 즉시 모드 GUI를 위해 프로그래밍 방식으로 생성된 얇은 c-api 래퍼입니다. 친애하는 ImGui. 모든 imgui.h 함수는 프로그래밍 방식으로 래핑됩니다. 생성된 파일은 cimgui.cpp
, C 컴파일의 경우 cimgui.h
입니다. 또한 바인딩 생성을 돕기 위해 함수 정의 정보가 포함된 definitions.lua
및 structs_and_enums.lua
가 있습니다. 이 라이브러리는 C와 인터페이스할 수 있는 다른 언어(예: D - D-바인딩 참조)에서 Dear ImGui를 사용할 수 있도록 하는 중간 계층으로 사용됩니다.
역사:
처음에는 cimgui가 Stephan Dilly에 의해 손으로 작성된 코드로 개발되었지만 최근에는 imgui를 보다 쉽게 따라잡을 수 있도록 sonoro1234에 의해 자동 생성 버전으로 바뀌었습니다(사용자가 원하는 분기를 선택하고 커밋할 수 있음).
참고:
- 현재 이 래퍼는 버전 [내부 API가 있는 Dear ImGui 1.91.4]를 기반으로 합니다.
- imgui.h(선택적으로 imgui_internal.h)의 함수, 구조체 및 열거형만 래핑됩니다.
- imgui 백엔드에 관심이 있다면 LuaJIT-ImGui 프로젝트를 살펴보세요.
- cimgui_overloads 테이블(https://github.com/cimgui/cimgui/blob/master/generator/generator.lua#L60)에 코딩된 이름을 제외하고 모든 이름 지정은 알고리즘을 따릅니다. 공식 버전에서는 이 테이블이 비어 있습니다.
- 현재 오버로드된 함수 이름은 (https://github.com/cimgui/cimgui/blob/master/generator/output/overloads.txt)에서 찾을 수 있습니다.
편집
발전기 사용
- 제공된 버전과 다른 imgui 버전을 원하는 경우에만 (컴파일 전) 필요합니다. 그렇지 않으면 생성이 이미 완료되었습니다.
- LuaJIT(https://github.com/LuaJIT/LuaJIT.git 더 나은 2.1 브랜치)가 필요하거나 https://luapower.com/luajit/download에서 linux/macOS/windows용으로 미리 컴파일되어 있어야 합니다.
- 사전 처리를 수행하려면 gcc(예: Windows MinGW-W64-builds), clang 또는 cl(MSVC)과 같은 C++ 컴파일러도 사용해야 합니다. (이 저장소는 gcc로 수행되었습니다)
-
imgui
폴더를 원하는 버전으로 업데이트하세요. - Windows에서는
generator/generator.bat
편집하고 Linux에서는 generator/generator.sh
편집하여 gcc, clang 또는 cl 중에서 선택하고 원하는 백엔드를 선택하며 imgui_internal이 생성되는지 여부, 주석이 생성되는지 여부 및 생성자가 생성되는지 여부 또한 자신이 제공한 구조체의 초기화만 수행하는 버전에서도 사용 가능(_Construct가 생성자 이름에 추가됨) - 생성기의 기본값은 컴파일러로 gcc, imgui_internal이 포함되고 백엔드로 sdl, glfw, vulkan, opengl2 및 opengl3입니다.
- 선택한 백엔드에 필요한 포함을 추가하려면 config_generator.lua를 편집하세요(vulkan에는 해당 항목이 필요함).
- PATH에서 gcc, clang 또는 cl 및 LuaJIT를 사용하여 Generator.bat 또는 Generator.sh를 실행하세요.
- 결과적으로 일부 파일이 생성됩니다: 컴파일을 위한
cimgui.cpp
, cimgui.h
및 cimgui_impl.h
및 바인딩에 대한 정보가 포함된 일부 lua/json 파일: 함수 정보가 포함된 definitions.json
, 구조체 및 열거형 정보가 포함된 structs_and_enums.json
, impl_definitions.json
백엔드 정보의 기능이 포함된 impl_definitions.json
. - 컴파일러 동작을 추가로 지정하기 위해 호출이 끝날 때 컴파일러 플래그를 편집하여 Generator.sh 또는 Generator.bat에 전달할 수 있습니다. (예: -DIMGUI_USER_CONFIG)
- 명령줄에서 Generator.sh(.bat)에 추가 인수를 전달할 수 있습니다.
- cimgui repo와 다른 옵션을 사용하고 있고 cimgui 업데이트 후에도 이를 유지하려면 luajit 호출 전에
cd cimgui/generator
사용되는 cimgui 폴더 외부의 Generator.sh(.bat) 복사본에 보관할 수 있습니다. . #232(댓글) 참조
바인딩 생성
- CIMGUI_DEFINE_ENUMS_AND_STRUCTS를 정의하면 C 인터페이스가 cimgui.h에 의해 노출됩니다.
- 선호하는 언어로 다음과 같이 생성된 lua 또는 json 파일을 사용할 수 있습니다.
- https://github.com/sonoro1234/LuaJIT-ImGui/blob/master/lua/build.bat (https://github.com/sonoro1234/LuaJIT-ImGui/blob/master/lua/class_gen의 lua 코드 생성 포함) .lua)
- https://github.com/mellinoe/ImGui.NET/tree/autogen/src/CodeGenerator
정의 설명
- 키가 오버로드 없이 발생하는 cimgui 이름이고 값이 오버로드 배열인 컬렉션입니다(단 하나의 오버로드일 수 있음).
- 각 오버로딩은 컬렉션입니다. 일부 관련 키와 값은 다음과 같습니다.
- stname: 함수가 속한 구조체의 이름(ImGui 네임스페이스의 최상위 레벨인 경우 ""가 됩니다)
- ov_cimguiname : 오버로드된 cimgui 이름(없으면 cimguiname에서 가져옴)
- cimguiname : 오버로드되지 않은 이름(ov_cimguiname이 없는 경우 사용해야 함)
- ret : 반환 유형
- retref : 원래 반환 유형이 참조인 경우 설정됩니다. (cimgui의 포인터가 될 것입니다)
- argsT : 컬렉션 배열(각각 유형: 인수 유형 및 이름: 인수 이름, 인수가 함수 포인터인 경우 ret: 반환 유형 및 서명: 함수 서명)
- args : argsT 문자열이 연결되고 쉼표로 구분됩니다.
- call_args : imgui 함수 호출을 위해 쉼표로 구분된 인수 이름이 포함된 문자열
- defaults : key가 인수 이름이고 value가 기본값인 컬렉션입니다.
- manual : 이 함수가 손으로 작성된 경우(생성되지 않음) true가 됩니다.
- 건너뛰기: 이 함수가 생성되지 않은 경우(그리고 직접 작성하지 않은 경우) true가 됩니다.
- isvararg : 일부 인수가 vararg인 경우 설정됩니다.
- constructor : 함수가 클래스의 생성자인 경우 설정됩니다.
- destructor : 함수가 클래스의 소멸자이지만 기본 소멸자가 아닌 경우 설정됩니다.
- realdestructor : 함수가 클래스의 소멸자인 경우 설정됩니다.
- templated : 함수가 템플릿 클래스(ImVector)에 속하는 경우 설정됩니다.
- templatedgen: 함수가 템플릿(ImVector_ImWchar)에서 생성된 구조체에 속하는 경우 설정됩니다.
- nonUDT: 존재하는 경우 원래 함수는 사용자 정의 유형을 반환하여 UDT에 대한 포인터를 첫 번째 인수로 허용하도록 서명이 변경되었습니다.
- location : 헤더 파일의 이름과 이 함수의 출처인 줄 번호입니다. (imgui:000, 내부:123, imgui_impl_xxx:123)
- is_static_function : 구조체 정적 함수일 때 설정됩니다.
structs_and_enums 설명
- Is는 세 가지 항목으로 구성된 컬렉션입니다.
- 키 열거형 아래에서 각 키가 열거형 태그 이름이고 값이 키가 있는 컬렉션으로 표시되는 정렬된 값의 배열인 열거형 컬렉션을 얻습니다.
- name : 이 열거형 값의 이름
- 값 : C 문자열
- calc_value : value에 해당하는 숫자 값
- 키 구조체 아래에는 키가 구조체 이름이고 값이 구조체 멤버의 배열인 구조체 컬렉션이 있습니다. 각각은 키가 포함된 컬렉션으로 제공됩니다.
- type : 구조체 멤버의 유형
- template_type : 유형에 ImVector와 같은 템플릿 인수가 있는 경우 다음과 같습니다.
- name : 구조체 멤버의 이름
- size : 배열 요소의 개수 (배열인 경우)
- bitfield : 비트필드 너비(비트필드인 경우)
- 키 위치 아래에서 각 키가 열거형 태그 이름 또는 구조체 이름이고 값이 헤더 파일의 이름과 이것이 나오는 줄 번호인 위치 컬렉션을 얻습니다.
용법
-
ig
앞에 추가하여 원본 imgui.h의 ImGui C++ 네임스페이스에 있는 메서드를 사용하세요. - 메소드는 동일한 매개변수 목록과 반환 값을 갖습니다(가능한 경우).
- 구조체에 속하는 함수에는 구조체에 대한 포인터가 포함된 추가 첫 번째 인수가 있습니다.
- 함수가 값으로 UDT(사용자 정의 유형)를 반환하는 경우 일부 컴파일러는 UDT 유형에 대한 포인터를 첫 번째 인수(또는 구조체에 속하는 경우 두 번째)로 허용하여 함수가 생성되도록 불평합니다.
백엔드 사용
- SDL 및 opengl3, glfw 및 opengl3, SDL 및 Vulkan을 사용하여 cmake 모듈을 구축하려면 backend_test 폴더를 살펴보세요.
- cimgui 백엔드를 어떻게 사용할 수 있는지 읽어보세요.
cimgui를 기반으로 한 예제 바인딩
- LuaJIT-ImGui
- ImGui.NET
- nimgl/imgui
- 코틀린 임구이
- CImGui.jl
- 오딘임구이
- DerelictImgui
- BindBC-CimGui
- imgui-rs
- 임귀파스
- 크리스탈 임구이
cimgui를 기반으로 한 C 예제
- sdl2_opengl3
- sdl2-cimgui-데모
- cimgui_c_sdl2_example
- GLFW를 사용한 cimgui-c-예제
- raylib-cimgui