diff --git a/backend_test/CMakeLists.txt b/backend_test/example_sdl_opengl3/CMakeLists.txt similarity index 77% rename from backend_test/CMakeLists.txt rename to backend_test/example_sdl_opengl3/CMakeLists.txt index dce448a..365cf62 100644 --- a/backend_test/CMakeLists.txt +++ b/backend_test/example_sdl_opengl3/CMakeLists.txt @@ -6,27 +6,28 @@ endif(WIN32) #general settings -if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../imgui/backends) - set(BAKENDS_FOLDER "../imgui/backends/") +if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../../imgui/backends) + set(BAKENDS_FOLDER "../../imgui/backends/") else() - set(BAKENDS_FOLDER "../imgui/examples/") + set(BAKENDS_FOLDER "../../imgui/examples/") endif() -if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../imgui/imgui_tables.cpp) - set(TABLES_SOURCE "../imgui/imgui_tables.cpp") +if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../../imgui/imgui_tables.cpp) + set(TABLES_SOURCE "../../imgui/imgui_tables.cpp") else() set(TABLES_SOURCE "") endif() -include_directories(../imgui) +include_directories(../../imgui) add_definitions("-DIMGUI_DISABLE_OBSOLETE_FUNCTIONS=1") -include_directories(../) -set(IMGUI_SOURCES ../cimgui.cpp -../imgui/imgui.cpp -../imgui/imgui_draw.cpp -../imgui/imgui_demo.cpp -../imgui/imgui_widgets.cpp +include_directories(../../) +set(IMGUI_SOURCES +../../cimgui.cpp +../../imgui/imgui.cpp +../../imgui/imgui_draw.cpp +../../imgui/imgui_demo.cpp +../../imgui/imgui_widgets.cpp ${TABLES_SOURCE} ) @@ -47,13 +48,13 @@ option(IMGUI_FREETYPE "add Freetype2" OFF) if(IMGUI_FREETYPE) FIND_PACKAGE(freetype REQUIRED PATHS ${FREETYPE_PATH}) list(APPEND IMGUI_LIBRARIES freetype) - list(APPEND IMGUI_SOURCES ../imgui/misc/freetype/imgui_freetype.cpp) + list(APPEND IMGUI_SOURCES ../../imgui/misc/freetype/imgui_freetype.cpp) add_definitions("-DCIMGUI_FREETYPE=1") endif(IMGUI_FREETYPE) #opengl3 list(APPEND IMGUI_SOURCES ${BAKENDS_FOLDER}imgui_impl_opengl3.cpp) -include_directories(../imgui/examples/libs/gl3w) +include_directories(../../imgui/examples/libs/gl3w) if(WIN32) list(APPEND IMGUI_LIBRARIES opengl32) else(WIN32)#Unix @@ -97,8 +98,9 @@ add_library(cimgui_sdl SHARED ${IMGUI_SOURCES}) target_link_libraries(cimgui_sdl ${IMGUI_LIBRARIES} ${IMGUI_SDL_LIBRARY}) #using library -include_directories(../generator/output/) +include_directories(../../generator/output/) add_executable(test_sdl main.c) +target_compile_definitions(test_sdl PUBLIC -DCIMGUI_USE_OPENGL3 -DCIMGUI_USE_SDL) if (MINGW) target_link_options(test_sdl PRIVATE "-mconsole") endif() diff --git a/backend_test/main.c b/backend_test/example_sdl_opengl3/main.c similarity index 99% rename from backend_test/main.c rename to backend_test/example_sdl_opengl3/main.c index bad666e..4c15b2c 100644 --- a/backend_test/main.c +++ b/backend_test/example_sdl_opengl3/main.c @@ -114,7 +114,7 @@ int main(int argc, char* argv[]) // start imgui frame ImGui_ImplOpenGL3_NewFrame(); - ImGui_ImplSDL2_NewFrame(window); + ImGui_ImplSDL2_NewFrame(); igNewFrame(); if (showDemoWindow) diff --git a/generator/generator.lua b/generator/generator.lua index 4a88719..1398d5a 100644 --- a/generator/generator.lua +++ b/generator/generator.lua @@ -421,7 +421,7 @@ if #implementations > 0 then parser2 = cpp2ffi.Parser() local config = require"config_generator" - + local impl_str = "" for i,impl in ipairs(implementations) do local source = backends_folder .. [[imgui_impl_]].. impl .. ".h " local locati = [[imgui_impl_]].. impl @@ -438,15 +438,22 @@ if #implementations > 0 then end local defines = parser2:take_lines(CPRE..extra_defines..extra_includes..source, {locati}, COMPILER) - + + local parser3 = cpp2ffi.Parser() + parser3:take_lines(CPRE..extra_defines..extra_includes..source, {locati}, COMPILER) + parser3:do_parse() + local cfuncsstr = func_header_impl_generate(parser3) + local cstructstr1,cstructstr2 = parser3.structs_and_enums[1], parser3.structs_and_enums[2] + impl_str = impl_str .. "#ifdef CIMGUI_USE_".. string.upper(impl).."\n" .. cstructstr1 .. cstructstr2 .. cfuncsstr .. "\n#endif\n" end parser2:do_parse() -- save ./cimgui_impl.h - local cfuncsstr = func_header_impl_generate(parser2) - local cstructstr1,cstructstr2 = parser2.structs_and_enums[1], parser2.structs_and_enums[2] - save_data("./output/cimgui_impl.h",cstructstr1,cstructstr2,cfuncsstr) + --local cfuncsstr = func_header_impl_generate(parser2) + --local cstructstr1,cstructstr2 = parser2.structs_and_enums[1], parser2.structs_and_enums[2] + --save_data("./output/cimgui_impl.h",cstructstr1,cstructstr2,cfuncsstr) + save_data("./output/cimgui_impl.h",impl_str) ----------save fundefs in impl_definitions.lua for using in bindings save_data("./output/impl_definitions.lua",serializeTableF(parser2.defsT)) diff --git a/generator/output/cimgui_impl.h b/generator/output/cimgui_impl.h index c763c81..597cca0 100644 --- a/generator/output/cimgui_impl.h +++ b/generator/output/cimgui_impl.h @@ -1,14 +1,9 @@ +#ifdef CIMGUI_USE_GLFW typedef struct GLFWwindow GLFWwindow; typedef struct GLFWmonitor GLFWmonitor; -typedef struct SDL_Window SDL_Window; -typedef struct SDL_Renderer SDL_Renderer; struct GLFWwindow; -struct GLFWmonitor; - -struct SDL_Window; -struct SDL_Renderer; -typedef union SDL_Event SDL_Event;CIMGUI_API bool ImGui_ImplGlfw_InitForOpenGL(GLFWwindow* window,bool install_callbacks); +struct GLFWmonitor;CIMGUI_API bool ImGui_ImplGlfw_InitForOpenGL(GLFWwindow* window,bool install_callbacks); CIMGUI_API bool ImGui_ImplGlfw_InitForVulkan(GLFWwindow* window,bool install_callbacks); CIMGUI_API bool ImGui_ImplGlfw_InitForOther(GLFWwindow* window,bool install_callbacks); CIMGUI_API void ImGui_ImplGlfw_Shutdown(void); @@ -23,6 +18,9 @@ CIMGUI_API void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window,double xoffset, CIMGUI_API void ImGui_ImplGlfw_KeyCallback(GLFWwindow* window,int key,int scancode,int action,int mods); CIMGUI_API void ImGui_ImplGlfw_CharCallback(GLFWwindow* window,unsigned int c); CIMGUI_API void ImGui_ImplGlfw_MonitorCallback(GLFWmonitor* monitor,int event); + +#endif +#ifdef CIMGUI_USE_OPENGL3 CIMGUI_API bool ImGui_ImplOpenGL3_Init(const char* glsl_version); CIMGUI_API void ImGui_ImplOpenGL3_Shutdown(void); CIMGUI_API void ImGui_ImplOpenGL3_NewFrame(void); @@ -31,6 +29,9 @@ CIMGUI_API bool ImGui_ImplOpenGL3_CreateFontsTexture(void); CIMGUI_API void ImGui_ImplOpenGL3_DestroyFontsTexture(void); CIMGUI_API bool ImGui_ImplOpenGL3_CreateDeviceObjects(void); CIMGUI_API void ImGui_ImplOpenGL3_DestroyDeviceObjects(void); + +#endif +#ifdef CIMGUI_USE_OPENGL2 CIMGUI_API bool ImGui_ImplOpenGL2_Init(void); CIMGUI_API void ImGui_ImplOpenGL2_Shutdown(void); CIMGUI_API void ImGui_ImplOpenGL2_NewFrame(void); @@ -39,7 +40,15 @@ CIMGUI_API bool ImGui_ImplOpenGL2_CreateFontsTexture(void); CIMGUI_API void ImGui_ImplOpenGL2_DestroyFontsTexture(void); CIMGUI_API bool ImGui_ImplOpenGL2_CreateDeviceObjects(void); CIMGUI_API void ImGui_ImplOpenGL2_DestroyDeviceObjects(void); -CIMGUI_API bool ImGui_ImplSDL2_InitForOpenGL(SDL_Window* window,void* sdl_gl_context); + +#endif +#ifdef CIMGUI_USE_SDL + +typedef struct SDL_Window SDL_Window; +typedef struct SDL_Renderer SDL_Renderer; +struct SDL_Window; +struct SDL_Renderer; +typedef union SDL_Event SDL_Event;CIMGUI_API bool ImGui_ImplSDL2_InitForOpenGL(SDL_Window* window,void* sdl_gl_context); CIMGUI_API bool ImGui_ImplSDL2_InitForVulkan(SDL_Window* window); CIMGUI_API bool ImGui_ImplSDL2_InitForD3D(SDL_Window* window); CIMGUI_API bool ImGui_ImplSDL2_InitForMetal(SDL_Window* window); @@ -47,3 +56,5 @@ CIMGUI_API bool ImGui_ImplSDL2_InitForSDLRenderer(SDL_Window* window,SDL_Rendere CIMGUI_API void ImGui_ImplSDL2_Shutdown(void); CIMGUI_API void ImGui_ImplSDL2_NewFrame(void); CIMGUI_API bool ImGui_ImplSDL2_ProcessEvent(const SDL_Event* event); + +#endif