diff --git a/.gitignore b/.gitignore index 9641c80..7008619 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ build CMakeUserPresets.json +.vs \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 15c44e1..7110236 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,8 +58,6 @@ if(NOT OpenGL_GL_PREFERENCE) set(OpenGL_GL_PREFERENCE "LEGACY") endif() -find_package(OpenGL REQUIRED) - include(GNUInstallDirs) # Define ImGui-SFML @@ -72,7 +70,19 @@ target_include_directories(ImGui-SFML PUBLIC target_include_directories(ImGui-SFML SYSTEM PUBLIC $ ) -target_link_libraries(ImGui-SFML PUBLIC SFML::Graphics OpenGL::GL) + +if(IOS) + target_link_libraries(ImGui-SFML PRIVATE "-framework OpenGLES") +elseif(ANDROID) + find_package(EGL REQUIRED) + find_package(GLES REQUIRED) + target_link_libraries(ImGui-SFML PRIVATE EGL::EGL GLES::GLES) +else() + find_package(OpenGL REQUIRED COMPONENTS OpenGL) + target_link_libraries(ImGui-SFML PRIVATE OpenGL::GL) +endif() + +target_link_libraries(ImGui-SFML PUBLIC SFML::Graphics) if(WIN32 AND MINGW) target_link_libraries(ImGui-SFML PUBLIC imm32) endif() diff --git a/cmake/FindEGL.cmake b/cmake/FindEGL.cmake new file mode 100644 index 0000000..3488642 --- /dev/null +++ b/cmake/FindEGL.cmake @@ -0,0 +1,19 @@ +# +# Try to find EGL library and include path. +# Once done this will define +# +# EGL_FOUND +# EGL_INCLUDE_PATH +# EGL_LIBRARY +# + +find_path(EGL_INCLUDE_DIR EGL/egl.h) +find_library(EGL_LIBRARY NAMES EGL) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(EGL DEFAULT_MSG EGL_LIBRARY EGL_INCLUDE_DIR) + +add_library(EGL::EGL IMPORTED UNKNOWN) +set_target_properties(EGL::EGL PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${EGL_INCLUDE_DIR} + IMPORTED_LOCATION ${EGL_LIBRARY}) diff --git a/cmake/FindGLES.cmake b/cmake/FindGLES.cmake new file mode 100644 index 0000000..ec12b98 --- /dev/null +++ b/cmake/FindGLES.cmake @@ -0,0 +1,19 @@ +# +# Try to find GLES library and include path. +# Once done this will define +# +# GLES_FOUND +# GLES_INCLUDE_PATH +# GLES_LIBRARY +# + +find_path(GLES_INCLUDE_DIR GLES/gl.h) +find_library(GLES_LIBRARY NAMES GLESv1_CM) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(GLES DEFAULT_MSG GLES_LIBRARY GLES_INCLUDE_DIR) + +add_library(GLES::GLES IMPORTED UNKNOWN) +set_target_properties(GLES::GLES PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${GLES_INCLUDE_DIR} + IMPORTED_LOCATION ${GLES_LIBRARY}) diff --git a/cmake/FindImGui.cmake b/cmake/FindImGui.cmake index 700c360..0a9ef1b 100644 --- a/cmake/FindImGui.cmake +++ b/cmake/FindImGui.cmake @@ -12,12 +12,19 @@ list(APPEND IMGUI_SEARCH_PATH ${IMGUI_DIR} ) + +unset(IMGUI_INCLUDE_DIR) + find_path(IMGUI_INCLUDE_DIR NAMES imgui.h - PATHS ${IMGUI_SEARCH_PATH} + HINTS ${IMGUI_SEARCH_PATH} NO_DEFAULT_PATH + NO_CMAKE_FIND_ROOT_PATH ) +file(GLOB MY_FILES "${IMGUI_DIR}/imgui.h") + +message(WARNING "Found: ${IMGUI_DIR} ${IMGUI_SEARCH_PATH} ${IMGUI_INCLUDE_DIR} ${MY_FILES}") if(NOT IMGUI_INCLUDE_DIR) message(FATAL_ERROR "IMGUI imgui.cpp not found. Set IMGUI_DIR to imgui's top-level path (containing \"imgui.cpp\" and \"imgui.h\" files).\n") endif() diff --git a/imgui-SFML.cpp b/imgui-SFML.cpp index dd7e80c..216dd40 100644 --- a/imgui-SFML.cpp +++ b/imgui-SFML.cpp @@ -911,7 +911,9 @@ void SetupRenderState(ImDrawData* draw_data, int fb_width, int fb_height) glEnableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glEnable(GL_TEXTURE_2D); +#ifndef GL_VERSION_ES_CL_1_1 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); +#endif glShadeModel(GL_SMOOTH); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); @@ -967,8 +969,12 @@ void RenderDrawLists(ImDrawData* draw_data) // Backup GL state GLint last_texture = 0; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); + +#ifndef GL_VERSION_ES_CL_1_1 GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); +#endif + GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport); GLint last_scissor_box[4]; @@ -1060,9 +1066,13 @@ void RenderDrawLists(ImDrawData* draw_data) glPopMatrix(); glMatrixMode(GL_PROJECTION); glPopMatrix(); + +#ifndef GL_VERSION_ES_CL_1_1 glPopAttrib(); glPolygonMode(GL_FRONT, (GLenum)last_polygon_mode[0]); glPolygonMode(GL_BACK, (GLenum)last_polygon_mode[1]); +#endif + glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]); glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]); glShadeModel((GLenum)last_shade_model);