mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-11-22 05:27:20 +00:00
[client] imgui: added imgui to the client and OpenGL/EGL renderers
This commit is contained in:
parent
c9d469fb91
commit
f08163fd72
@ -1,5 +1,5 @@
|
|||||||
cmake_minimum_required(VERSION 3.0)
|
cmake_minimum_required(VERSION 3.0)
|
||||||
project(looking-glass-client C)
|
project(looking-glass-client C CXX)
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/")
|
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/")
|
||||||
|
|
||||||
@ -127,12 +127,16 @@ set(SOURCES
|
|||||||
add_subdirectory("${PROJECT_TOP}/common" "${CMAKE_BINARY_DIR}/common" )
|
add_subdirectory("${PROJECT_TOP}/common" "${CMAKE_BINARY_DIR}/common" )
|
||||||
add_subdirectory("${PROJECT_TOP}/repos/LGMP/lgmp" "${CMAKE_BINARY_DIR}/LGMP" )
|
add_subdirectory("${PROJECT_TOP}/repos/LGMP/lgmp" "${CMAKE_BINARY_DIR}/LGMP" )
|
||||||
add_subdirectory("${PROJECT_TOP}/repos/PureSpice" "${CMAKE_BINARY_DIR}/PureSpice")
|
add_subdirectory("${PROJECT_TOP}/repos/PureSpice" "${CMAKE_BINARY_DIR}/PureSpice")
|
||||||
|
add_subdirectory("${PROJECT_TOP}/repos/cimgui" "${CMAKE_BINARY_DIR}/cimgui" )
|
||||||
|
|
||||||
add_subdirectory(displayservers)
|
add_subdirectory(displayservers)
|
||||||
add_subdirectory(renderers)
|
add_subdirectory(renderers)
|
||||||
add_subdirectory(fonts)
|
add_subdirectory(fonts)
|
||||||
|
|
||||||
add_executable(looking-glass-client ${SOURCES})
|
add_executable(looking-glass-client ${SOURCES})
|
||||||
|
|
||||||
|
target_compile_definitions(looking-glass-client PRIVATE CIMGUI_DEFINE_ENUMS_AND_STRUCTS=1)
|
||||||
|
|
||||||
target_link_libraries(looking-glass-client
|
target_link_libraries(looking-glass-client
|
||||||
${EXE_FLAGS}
|
${EXE_FLAGS}
|
||||||
lg_common
|
lg_common
|
||||||
@ -141,6 +145,7 @@ target_link_libraries(looking-glass-client
|
|||||||
purespice
|
purespice
|
||||||
renderers
|
renderers
|
||||||
fonts
|
fonts
|
||||||
|
cimgui
|
||||||
)
|
)
|
||||||
|
|
||||||
install(TARGETS looking-glass-client
|
install(TARGETS looking-glass-client
|
||||||
|
@ -78,6 +78,8 @@ void app_glSetSwapInterval(int interval);
|
|||||||
void app_glSwapBuffers(void);
|
void app_glSwapBuffers(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool app_renderImGui(void);
|
||||||
|
|
||||||
void app_clipboardRelease(void);
|
void app_clipboardRelease(void);
|
||||||
void app_clipboardNotifyTypes(const LG_ClipboardData types[], int count);
|
void app_clipboardNotifyTypes(const LG_ClipboardData types[], int count);
|
||||||
void app_clipboardNotifySize(const LG_ClipboardData type, size_t size);
|
void app_clipboardNotifySize(const LG_ClipboardData type, size_t size);
|
||||||
|
@ -25,6 +25,9 @@
|
|||||||
#include <EGL/egl.h>
|
#include <EGL/egl.h>
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
|
|
||||||
|
// if GLEW is included, GLeglImageOES was not defined
|
||||||
|
typedef void * GLeglImageOES;
|
||||||
|
|
||||||
typedef EGLDisplay (*eglGetPlatformDisplayEXT_t)(EGLenum platform,
|
typedef EGLDisplay (*eglGetPlatformDisplayEXT_t)(EGLenum platform,
|
||||||
void *native_display, const EGLint *attrib_list);
|
void *native_display, const EGLint *attrib_list);
|
||||||
typedef void (*eglSwapBuffersWithDamageKHR_t)(EGLDisplay dpy,
|
typedef void (*eglSwapBuffersWithDamageKHR_t)(EGLDisplay dpy,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
cmake_minimum_required(VERSION 3.0)
|
cmake_minimum_required(VERSION 3.0)
|
||||||
project(renderer_EGL LANGUAGES C)
|
project(renderer_EGL LANGUAGES C CXX)
|
||||||
|
|
||||||
find_package(PkgConfig)
|
find_package(PkgConfig)
|
||||||
pkg_check_modules(RENDERER_EGL_PKGCONFIG REQUIRED
|
pkg_check_modules(RENDERER_EGL_PKGCONFIG REQUIRED
|
||||||
@ -54,13 +54,19 @@ add_library(renderer_EGL STATIC
|
|||||||
alert.c
|
alert.c
|
||||||
${EGL_SHADER_OBJS}
|
${EGL_SHADER_OBJS}
|
||||||
"${EGL_SHADER_INCS}/desktop_rgb.def.h"
|
"${EGL_SHADER_INCS}/desktop_rgb.def.h"
|
||||||
|
${PROJECT_TOP}/repos/cimgui/imgui/backends/imgui_impl_opengl3.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
target_compile_definitions(renderer_EGL PRIVATE CIMGUI_DEFINE_ENUMS_AND_STRUCTS=1)
|
||||||
|
|
||||||
target_link_libraries(renderer_EGL
|
target_link_libraries(renderer_EGL
|
||||||
${RENDERER_EGL_PKGCONFIG_LIBRARIES}
|
${RENDERER_EGL_PKGCONFIG_LIBRARIES}
|
||||||
${RENDERER_EGL_OPT_PKGCONFIG_LIBRARIES}
|
${RENDERER_EGL_OPT_PKGCONFIG_LIBRARIES}
|
||||||
lg_common
|
lg_common
|
||||||
fonts
|
fonts
|
||||||
|
|
||||||
|
cimgui
|
||||||
|
GLEW
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(renderer_EGL
|
target_include_directories(renderer_EGL
|
||||||
|
@ -25,11 +25,16 @@
|
|||||||
#include "common/sysinfo.h"
|
#include "common/sysinfo.h"
|
||||||
#include "common/time.h"
|
#include "common/time.h"
|
||||||
#include "common/locking.h"
|
#include "common/locking.h"
|
||||||
|
#include "app.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "dynamic/fonts.h"
|
#include "dynamic/fonts.h"
|
||||||
|
|
||||||
|
#include <GL/glew.h>
|
||||||
#include <EGL/egl.h>
|
#include <EGL/egl.h>
|
||||||
|
|
||||||
|
#include "cimgui.h"
|
||||||
|
#include "generator/output/cimgui_impl.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -72,6 +77,7 @@ struct Inst
|
|||||||
EGL_Splash * splash; // the splash screen
|
EGL_Splash * splash; // the splash screen
|
||||||
EGL_Alert * alert; // the alert display
|
EGL_Alert * alert; // the alert display
|
||||||
EGL_Help * help; // the help display
|
EGL_Help * help; // the help display
|
||||||
|
bool imgui; // if imgui was initialized
|
||||||
|
|
||||||
LG_RendererFormat format;
|
LG_RendererFormat format;
|
||||||
bool formatValid;
|
bool formatValid;
|
||||||
@ -279,6 +285,9 @@ void egl_deinitialize(void * opaque)
|
|||||||
{
|
{
|
||||||
struct Inst * this = (struct Inst *)opaque;
|
struct Inst * this = (struct Inst *)opaque;
|
||||||
|
|
||||||
|
if (this->imgui)
|
||||||
|
ImGui_ImplOpenGL3_Shutdown();
|
||||||
|
|
||||||
if (this->font)
|
if (this->font)
|
||||||
{
|
{
|
||||||
if (this->fontObj)
|
if (this->fontObj)
|
||||||
@ -288,7 +297,6 @@ void egl_deinitialize(void * opaque)
|
|||||||
this->font->destroy(this->helpFontObj);
|
this->font->destroy(this->helpFontObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
egl_desktop_free(&this->desktop);
|
egl_desktop_free(&this->desktop);
|
||||||
egl_cursor_free (&this->cursor);
|
egl_cursor_free (&this->cursor);
|
||||||
egl_fps_free (&this->fps );
|
egl_fps_free (&this->fps );
|
||||||
@ -766,6 +774,20 @@ bool egl_render_startup(void * opaque)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// glew is needed for imgui
|
||||||
|
if (!glewInit())
|
||||||
|
{
|
||||||
|
DEBUG_ERROR("GLEW failed to initialize");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ImGui_ImplOpenGL3_Init("#version 100"))
|
||||||
|
{
|
||||||
|
DEBUG_ERROR("Failed to initialize ImGui");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->imgui = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -866,6 +888,13 @@ bool egl_render(void * opaque, LG_RendererRotate rotate)
|
|||||||
|
|
||||||
egl_fps_render(this->fps, this->screenScaleX, this->screenScaleY);
|
egl_fps_render(this->fps, this->screenScaleX, this->screenScaleY);
|
||||||
egl_help_render(this->help, this->screenScaleX, this->screenScaleY);
|
egl_help_render(this->help, this->screenScaleX, this->screenScaleY);
|
||||||
|
|
||||||
|
if (app_renderImGui())
|
||||||
|
{
|
||||||
|
ImGui_ImplOpenGL3_NewFrame();
|
||||||
|
ImGui_ImplOpenGL3_RenderDrawData(igGetDrawData());
|
||||||
|
}
|
||||||
|
|
||||||
app_eglSwapBuffers(this->display, this->surface, damage, damageIdx);
|
app_eglSwapBuffers(this->display, this->surface, damage, damageIdx);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
cmake_minimum_required(VERSION 3.0)
|
cmake_minimum_required(VERSION 3.0)
|
||||||
project(renderer_Opengl LANGUAGES C)
|
project(renderer_Opengl LANGUAGES C CXX)
|
||||||
|
|
||||||
find_package(PkgConfig)
|
find_package(PkgConfig)
|
||||||
pkg_check_modules(RENDERER_OPENGL_PKGCONFIG REQUIRED
|
pkg_check_modules(RENDERER_OPENGL_PKGCONFIG REQUIRED
|
||||||
@ -8,12 +8,17 @@ pkg_check_modules(RENDERER_OPENGL_PKGCONFIG REQUIRED
|
|||||||
|
|
||||||
add_library(renderer_OpenGL STATIC
|
add_library(renderer_OpenGL STATIC
|
||||||
opengl.c
|
opengl.c
|
||||||
|
${PROJECT_TOP}/repos/cimgui/imgui/backends/imgui_impl_opengl2.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
target_compile_definitions(renderer_OpenGL PRIVATE CIMGUI_DEFINE_ENUMS_AND_STRUCTS=1)
|
||||||
|
|
||||||
target_link_libraries(renderer_OpenGL
|
target_link_libraries(renderer_OpenGL
|
||||||
${RENDERER_OPENGL_PKGCONFIG_LIBRARIES}
|
${RENDERER_OPENGL_PKGCONFIG_LIBRARIES}
|
||||||
lg_common
|
lg_common
|
||||||
fonts
|
fonts
|
||||||
|
|
||||||
|
cimgui
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(renderer_OpenGL
|
target_include_directories(renderer_OpenGL
|
||||||
|
@ -29,6 +29,9 @@
|
|||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include <GL/glx.h>
|
#include <GL/glx.h>
|
||||||
|
|
||||||
|
#include "cimgui.h"
|
||||||
|
#include "generator/output/cimgui_impl.h"
|
||||||
|
|
||||||
#include "common/debug.h"
|
#include "common/debug.h"
|
||||||
#include "common/option.h"
|
#include "common/option.h"
|
||||||
#include "common/framebuffer.h"
|
#include "common/framebuffer.h"
|
||||||
@ -272,6 +275,8 @@ void opengl_deinitialize(void * opaque)
|
|||||||
|
|
||||||
if (this->renderStarted)
|
if (this->renderStarted)
|
||||||
{
|
{
|
||||||
|
ImGui_ImplOpenGL2_Shutdown();
|
||||||
|
|
||||||
glDeleteLists(this->texList , BUFFER_COUNT);
|
glDeleteLists(this->texList , BUFFER_COUNT);
|
||||||
glDeleteLists(this->mouseList, 1);
|
glDeleteLists(this->mouseList, 1);
|
||||||
glDeleteLists(this->fpsList , 1);
|
glDeleteLists(this->fpsList , 1);
|
||||||
@ -581,6 +586,13 @@ bool opengl_render_startup(void * opaque)
|
|||||||
this->hasTextures = true;
|
this->hasTextures = true;
|
||||||
|
|
||||||
app_glSetSwapInterval(this->opt.vsync ? 1 : 0);
|
app_glSetSwapInterval(this->opt.vsync ? 1 : 0);
|
||||||
|
|
||||||
|
if (!ImGui_ImplOpenGL2_Init())
|
||||||
|
{
|
||||||
|
DEBUG_ERROR("Failed to initialize ImGui");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
this->renderStarted = true;
|
this->renderStarted = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -690,6 +702,12 @@ bool opengl_render(void * opaque, LG_RendererRotate rotate)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (app_renderImGui())
|
||||||
|
{
|
||||||
|
ImGui_ImplOpenGL2_NewFrame();
|
||||||
|
ImGui_ImplOpenGL2_RenderDrawData(igGetDrawData());
|
||||||
|
}
|
||||||
|
|
||||||
if (this->opt.preventBuffer)
|
if (this->opt.preventBuffer)
|
||||||
{
|
{
|
||||||
app_glSwapBuffers();
|
app_glSwapBuffers();
|
||||||
|
@ -31,6 +31,8 @@
|
|||||||
#include "common/debug.h"
|
#include "common/debug.h"
|
||||||
#include "common/stringutils.h"
|
#include "common/stringutils.h"
|
||||||
|
|
||||||
|
#include "cimgui.h"
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -617,3 +619,11 @@ void app_showFPS(bool showFPS)
|
|||||||
|
|
||||||
g_state.lgr->on_show_fps(g_state.lgrData, showFPS);
|
g_state.lgr->on_show_fps(g_state.lgrData, showFPS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool app_renderImGui(void)
|
||||||
|
{
|
||||||
|
igNewFrame();
|
||||||
|
igShowDemoWindow(NULL);
|
||||||
|
igRender();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
@ -56,6 +56,8 @@
|
|||||||
#include "ll.h"
|
#include "ll.h"
|
||||||
#include "egl_dynprocs.h"
|
#include "egl_dynprocs.h"
|
||||||
|
|
||||||
|
#include "cimgui.h"
|
||||||
|
|
||||||
// forwards
|
// forwards
|
||||||
static int cursorThread(void * unused);
|
static int cursorThread(void * unused);
|
||||||
static int renderThread(void * unused);
|
static int renderThread(void * unused);
|
||||||
@ -97,12 +99,21 @@ static void lgInit(void)
|
|||||||
|
|
||||||
static int renderThread(void * unused)
|
static int renderThread(void * unused)
|
||||||
{
|
{
|
||||||
|
/* setup imgui */
|
||||||
|
igCreateContext(NULL);
|
||||||
|
ImGuiIO * io = igGetIO();
|
||||||
|
unsigned char *text_pixels = NULL;
|
||||||
|
int text_w, text_h;
|
||||||
|
ImFontAtlas_GetTexDataAsRGBA32(io->Fonts, &text_pixels,
|
||||||
|
&text_w, &text_h, NULL);
|
||||||
|
|
||||||
if (!g_state.lgr->render_startup(g_state.lgrData))
|
if (!g_state.lgr->render_startup(g_state.lgrData))
|
||||||
{
|
{
|
||||||
g_state.state = APP_STATE_SHUTDOWN;
|
g_state.state = APP_STATE_SHUTDOWN;
|
||||||
|
|
||||||
/* unblock threads waiting on the condition */
|
/* unblock threads waiting on the condition */
|
||||||
lgSignalEvent(e_startup);
|
lgSignalEvent(e_startup);
|
||||||
|
igDestroyContext(NULL);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,6 +139,13 @@ static int renderThread(void * unused)
|
|||||||
int resize = atomic_load(&g_state.lgrResize);
|
int resize = atomic_load(&g_state.lgrResize);
|
||||||
if (resize)
|
if (resize)
|
||||||
{
|
{
|
||||||
|
const ImVec2 displaySize =
|
||||||
|
{
|
||||||
|
.x = g_state.windowW,
|
||||||
|
.y = g_state.windowH
|
||||||
|
};
|
||||||
|
io->DisplaySize = displaySize;
|
||||||
|
|
||||||
if (g_state.lgr)
|
if (g_state.lgr)
|
||||||
g_state.lgr->on_resize(g_state.lgrData, g_state.windowW, g_state.windowH,
|
g_state.lgr->on_resize(g_state.lgrData, g_state.windowW, g_state.windowH,
|
||||||
g_state.windowScale, g_state.dstRect, g_params.winRotate);
|
g_state.windowScale, g_state.dstRect, g_params.winRotate);
|
||||||
@ -193,6 +211,7 @@ static int renderThread(void * unused)
|
|||||||
g_state.lgr = NULL;
|
g_state.lgr = NULL;
|
||||||
LG_LOCK_FREE(g_state.lgrLock);
|
LG_LOCK_FREE(g_state.lgrLock);
|
||||||
|
|
||||||
|
igDestroyContext(NULL);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,6 +57,7 @@ Required Dependencies
|
|||||||
- fonts-freefont-ttf
|
- fonts-freefont-ttf
|
||||||
- libegl-dev
|
- libegl-dev
|
||||||
- libgl-dev
|
- libgl-dev
|
||||||
|
- libglew-dev
|
||||||
- libfontconfig1-dev
|
- libfontconfig1-dev
|
||||||
- libgmp-dev
|
- libgmp-dev
|
||||||
- libspice-protocol-dev
|
- libspice-protocol-dev
|
||||||
|
Loading…
Reference in New Issue
Block a user