FrontendCommon: Drop imgui deps for libretro build

This commit is contained in:
Connor McLaughlin 2020-09-01 12:46:58 +10:00
parent 6bbbb96d4b
commit 0af22825ad
7 changed files with 126 additions and 68 deletions

View File

@ -21,7 +21,7 @@ if(WIN32)
) )
endif() endif()
target_link_libraries(duckstation_libretro PRIVATE core common imgui glad scmversion frontend-common vulkan-loader libretro-common) target_link_libraries(duckstation_libretro PRIVATE core common glad scmversion frontend-common vulkan-loader libretro-common)
# no lib prefix # no lib prefix
set_target_properties(duckstation_libretro PROPERTIES PREFIX "") set_target_properties(duckstation_libretro PROPERTIES PREFIX "")

View File

@ -1,64 +1,78 @@
add_library(frontend-common add_library(frontend-common
common_host_interface.cpp
common_host_interface.h
controller_interface.cpp
controller_interface.h
game_list.cpp
game_list.h
game_settings.cpp
game_settings.h
icon.cpp
icon.h
imgui_styles.cpp
imgui_styles.h
ini_settings_interface.cpp
ini_settings_interface.h
opengl_host_display.cpp opengl_host_display.cpp
opengl_host_display.h opengl_host_display.h
save_state_selector_ui.cpp
save_state_selector_ui.h
vulkan_host_display.cpp vulkan_host_display.cpp
vulkan_host_display.h vulkan_host_display.h
) )
target_link_libraries(frontend-common PUBLIC core common imgui simpleini tinyxml2 scmversion glad vulkan-loader) target_link_libraries(frontend-common PUBLIC core common glad vulkan-loader)
if(WIN32) if(WIN32)
target_sources(frontend-common PRIVATE target_sources(frontend-common PRIVATE
d3d11_host_display.cpp d3d11_host_display.cpp
d3d11_host_display.h d3d11_host_display.h
xinput_controller_interface.cpp
xinput_controller_interface.h
) )
target_link_libraries(frontend-common PRIVATE d3d11.lib dxgi.lib) target_link_libraries(frontend-common PRIVATE d3d11.lib dxgi.lib)
endif() endif()
if(SDL2_FOUND AND NOT BUILD_LIBRETRO_CORE) if(NOT BUILD_LIBRETRO_CORE)
target_sources(frontend-common PRIVATE target_sources(frontend-common PRIVATE
sdl_audio_stream.cpp common_host_interface.cpp
sdl_audio_stream.h common_host_interface.h
sdl_controller_interface.cpp controller_interface.cpp
sdl_controller_interface.h controller_interface.h
sdl_initializer.cpp game_list.cpp
sdl_initializer.h game_list.h
game_settings.cpp
game_settings.h
icon.cpp
icon.h
imgui_styles.cpp
imgui_styles.h
ini_settings_interface.cpp
ini_settings_interface.h
save_state_selector_ui.cpp
save_state_selector_ui.h
) )
target_compile_definitions(frontend-common PUBLIC "WITH_SDL2=1")
target_include_directories(frontend-common PRIVATE ${SDL2_INCLUDE_DIRS})
target_link_libraries(frontend-common PRIVATE ${SDL2_LIBRARIES})
# Copy bundled SDL2 to output on Windows.
if(WIN32) if(WIN32)
add_custom_command(TARGET frontend-common POST_BUILD target_sources(frontend-common PRIVATE
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SDL2_DLL_PATH}" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/SDL2.dll") xinput_controller_interface.cpp
xinput_controller_interface.h
)
endif() endif()
target_compile_definitions(frontend-common PRIVATE "WITH_IMGUI=1")
target_link_libraries(frontend-common PUBLIC imgui simpleini tinyxml2 scmversion)
if(SDL2_FOUND)
target_sources(frontend-common PRIVATE
sdl_audio_stream.cpp
sdl_audio_stream.h
sdl_controller_interface.cpp
sdl_controller_interface.h
sdl_initializer.cpp
sdl_initializer.h
)
target_compile_definitions(frontend-common PUBLIC "WITH_SDL2=1")
target_include_directories(frontend-common PRIVATE ${SDL2_INCLUDE_DIRS})
target_link_libraries(frontend-common PRIVATE ${SDL2_LIBRARIES})
# Copy bundled SDL2 to output on Windows.
if(WIN32)
add_custom_command(TARGET frontend-common POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SDL2_DLL_PATH}" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/SDL2.dll")
endif()
endif()
if(ENABLE_DISCORD_PRESENCE AND NOT BUILD_LIBRETRO_CORE)
target_compile_definitions(frontend-common PUBLIC -DWITH_DISCORD_PRESENCE=1)
target_link_libraries(frontend-common PRIVATE discord-rpc)
endif()
# Copy the provided data directory to the output directory.
add_custom_command(TARGET frontend-common POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/data" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
)
endif() endif()
if(ENABLE_DISCORD_PRESENCE AND NOT BUILD_LIBRETRO_CORE)
target_compile_definitions(frontend-common PUBLIC -DWITH_DISCORD_PRESENCE=1)
target_link_libraries(frontend-common PRIVATE discord-rpc)
endif()
# Copy the provided data directory to the output directory.
add_custom_command(TARGET frontend-common POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/data" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
)

View File

@ -8,8 +8,10 @@
#include <array> #include <array>
#ifndef LIBRETRO #ifndef LIBRETRO
#include <dxgi1_5.h> #include <dxgi1_5.h>
#include <imgui.h> #endif
#include <imgui_impl_dx11.h> #ifdef WITH_IMGUI
#include "imgui.h"
#include "imgui_impl_dx11.h"
#endif #endif
Log_SetChannel(D3D11HostDisplay); Log_SetChannel(D3D11HostDisplay);
@ -298,7 +300,7 @@ bool D3D11HostDisplay::InitializeRenderDevice(std::string_view shader_cache_dire
if (!CreateResources()) if (!CreateResources())
return false; return false;
#ifndef LIBRETRO #ifdef WITH_IMGUI
if (ImGui::GetCurrentContext() && !CreateImGuiContext()) if (ImGui::GetCurrentContext() && !CreateImGuiContext())
return false; return false;
#endif #endif
@ -308,7 +310,7 @@ bool D3D11HostDisplay::InitializeRenderDevice(std::string_view shader_cache_dire
void D3D11HostDisplay::DestroyRenderDevice() void D3D11HostDisplay::DestroyRenderDevice()
{ {
#ifndef LIBRETRO #ifdef WITH_IMGUI
if (ImGui::GetCurrentContext()) if (ImGui::GetCurrentContext())
DestroyImGuiContext(); DestroyImGuiContext();
#endif #endif
@ -532,9 +534,9 @@ void D3D11HostDisplay::DestroyResources()
m_display_rasterizer_state.Reset(); m_display_rasterizer_state.Reset();
} }
#ifndef LIBRETRO
bool D3D11HostDisplay::CreateImGuiContext() bool D3D11HostDisplay::CreateImGuiContext()
{ {
#ifdef WITH_IMGUI
ImGui::GetIO().DisplaySize.x = static_cast<float>(m_window_info.surface_width); ImGui::GetIO().DisplaySize.x = static_cast<float>(m_window_info.surface_width);
ImGui::GetIO().DisplaySize.y = static_cast<float>(m_window_info.surface_height); ImGui::GetIO().DisplaySize.y = static_cast<float>(m_window_info.surface_height);
@ -542,14 +544,16 @@ bool D3D11HostDisplay::CreateImGuiContext()
return false; return false;
ImGui_ImplDX11_NewFrame(); ImGui_ImplDX11_NewFrame();
#endif
return true; return true;
} }
void D3D11HostDisplay::DestroyImGuiContext() void D3D11HostDisplay::DestroyImGuiContext()
{ {
#ifdef WITH_IMGUI
ImGui_ImplDX11_Shutdown(); ImGui_ImplDX11_Shutdown();
}
#endif #endif
}
bool D3D11HostDisplay::Render() bool D3D11HostDisplay::Render()
{ {
@ -560,8 +564,10 @@ bool D3D11HostDisplay::Render()
RenderDisplay(); RenderDisplay();
#ifdef WITH_IMGUI
if (ImGui::GetCurrentContext()) if (ImGui::GetCurrentContext())
RenderImGui(); RenderImGui();
#endif
RenderSoftwareCursor(); RenderSoftwareCursor();
@ -570,8 +576,10 @@ bool D3D11HostDisplay::Render()
else else
m_swap_chain->Present(BoolToUInt32(m_vsync), 0); m_swap_chain->Present(BoolToUInt32(m_vsync), 0);
#ifdef WITH_IMGUI
if (ImGui::GetCurrentContext()) if (ImGui::GetCurrentContext())
ImGui_ImplDX11_NewFrame(); ImGui_ImplDX11_NewFrame();
#endif
#else #else
RenderDisplay(); RenderDisplay();
RenderSoftwareCursor(); RenderSoftwareCursor();
@ -580,15 +588,13 @@ bool D3D11HostDisplay::Render()
return true; return true;
} }
#ifndef LIBRETRO
void D3D11HostDisplay::RenderImGui() void D3D11HostDisplay::RenderImGui()
{ {
#ifdef WITH_IMGUI
ImGui::Render(); ImGui::Render();
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData()); ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
}
#endif #endif
}
void D3D11HostDisplay::RenderDisplay() void D3D11HostDisplay::RenderDisplay()
{ {

View File

@ -65,20 +65,17 @@ protected:
virtual bool CreateResources(); virtual bool CreateResources();
virtual void DestroyResources(); virtual void DestroyResources();
#ifndef LIBRETRO
virtual bool CreateImGuiContext(); virtual bool CreateImGuiContext();
virtual void DestroyImGuiContext(); virtual void DestroyImGuiContext();
#ifndef LIBRETRO
bool CreateSwapChain(); bool CreateSwapChain();
bool CreateSwapChainRTV(); bool CreateSwapChainRTV();
#endif #endif
void RenderDisplay(); void RenderDisplay();
void RenderSoftwareCursor(); void RenderSoftwareCursor();
#ifndef LIBRETRO
void RenderImGui(); void RenderImGui();
#endif
void RenderDisplay(s32 left, s32 top, s32 width, s32 height, void* texture_handle, u32 texture_width, void RenderDisplay(s32 left, s32 top, s32 width, s32 height, void* texture_handle, u32 texture_width,
s32 texture_height, s32 texture_view_x, s32 texture_view_y, s32 texture_view_width, s32 texture_height, s32 texture_view_x, s32 texture_view_y, s32 texture_view_width,

View File

@ -245,7 +245,7 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WITH_SDL2=1;WITH_DISCORD_PRESENCE=1;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WITH_IMGUI=1;WITH_SDL2=1;WITH_DISCORD_PRESENCE=1;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalIncludeDirectories>$(SolutionDir)dep\msvc\include\SDL;$(SolutionDir)dep\imgui\include;$(SolutionDir)dep\simpleini\include;$(SolutionDir)dep\tinyxml2\include;$(SolutionDir)dep\discord-rpc\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan-loader\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(SolutionDir)dep\msvc\include\SDL;$(SolutionDir)dep\imgui\include;$(SolutionDir)dep\simpleini\include;$(SolutionDir)dep\tinyxml2\include;$(SolutionDir)dep\discord-rpc\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan-loader\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
@ -273,7 +273,7 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WITH_SDL2=1;WITH_DISCORD_PRESENCE=1;_ITERATOR_DEBUG_LEVEL=1;WIN32;_DEBUGFAST;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WITH_IMGUI=1;WITH_SDL2=1;WITH_DISCORD_PRESENCE=1;_ITERATOR_DEBUG_LEVEL=1;WIN32;_DEBUGFAST;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalIncludeDirectories>$(SolutionDir)dep\msvc\include\SDL;$(SolutionDir)dep\imgui\include;$(SolutionDir)dep\simpleini\include;$(SolutionDir)dep\tinyxml2\include;$(SolutionDir)dep\discord-rpc\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan-loader\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(SolutionDir)dep\msvc\include\SDL;$(SolutionDir)dep\imgui\include;$(SolutionDir)dep\simpleini\include;$(SolutionDir)dep\tinyxml2\include;$(SolutionDir)dep\discord-rpc\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan-loader\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
@ -304,7 +304,7 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WITH_SDL2=1;WITH_DISCORD_PRESENCE=1;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WITH_IMGUI=1;WITH_SDL2=1;WITH_DISCORD_PRESENCE=1;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalIncludeDirectories>$(SolutionDir)dep\msvc\include\SDL;$(SolutionDir)dep\imgui\include;$(SolutionDir)dep\simpleini\include;$(SolutionDir)dep\tinyxml2\include;$(SolutionDir)dep\discord-rpc\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan-loader\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(SolutionDir)dep\msvc\include\SDL;$(SolutionDir)dep\imgui\include;$(SolutionDir)dep\simpleini\include;$(SolutionDir)dep\tinyxml2\include;$(SolutionDir)dep\discord-rpc\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan-loader\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
@ -332,7 +332,7 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WITH_SDL2=1;WITH_DISCORD_PRESENCE=1;_ITERATOR_DEBUG_LEVEL=1;WIN32;_DEBUGFAST;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WITH_IMGUI=1;WITH_SDL2=1;WITH_DISCORD_PRESENCE=1;_ITERATOR_DEBUG_LEVEL=1;WIN32;_DEBUGFAST;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalIncludeDirectories>$(SolutionDir)dep\msvc\include\SDL;$(SolutionDir)dep\imgui\include;$(SolutionDir)dep\simpleini\include;$(SolutionDir)dep\tinyxml2\include;$(SolutionDir)dep\discord-rpc\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan-loader\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(SolutionDir)dep\msvc\include\SDL;$(SolutionDir)dep\imgui\include;$(SolutionDir)dep\simpleini\include;$(SolutionDir)dep\tinyxml2\include;$(SolutionDir)dep\discord-rpc\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan-loader\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
@ -365,7 +365,7 @@
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WITH_SDL2=1;WITH_DISCORD_PRESENCE=1;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WITH_IMGUI=1;WITH_SDL2=1;WITH_DISCORD_PRESENCE=1;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(SolutionDir)dep\msvc\include\SDL;$(SolutionDir)dep\imgui\include;$(SolutionDir)dep\simpleini\include;$(SolutionDir)dep\tinyxml2\include;$(SolutionDir)dep\discord-rpc\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan-loader\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(SolutionDir)dep\msvc\include\SDL;$(SolutionDir)dep\imgui\include;$(SolutionDir)dep\simpleini\include;$(SolutionDir)dep\tinyxml2\include;$(SolutionDir)dep\discord-rpc\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan-loader\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
@ -395,7 +395,7 @@
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WITH_SDL2=1;WITH_DISCORD_PRESENCE=1;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WITH_IMGUI=1;WITH_SDL2=1;WITH_DISCORD_PRESENCE=1;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(SolutionDir)dep\msvc\include\SDL;$(SolutionDir)dep\imgui\include;$(SolutionDir)dep\simpleini\include;$(SolutionDir)dep\tinyxml2\include;$(SolutionDir)dep\discord-rpc\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan-loader\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(SolutionDir)dep\msvc\include\SDL;$(SolutionDir)dep\imgui\include;$(SolutionDir)dep\simpleini\include;$(SolutionDir)dep\tinyxml2\include;$(SolutionDir)dep\discord-rpc\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan-loader\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OmitFramePointers>true</OmitFramePointers> <OmitFramePointers>true</OmitFramePointers>
@ -427,7 +427,7 @@
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WITH_SDL2=1;WITH_DISCORD_PRESENCE=1;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WITH_IMGUI=1;WITH_SDL2=1;WITH_DISCORD_PRESENCE=1;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(SolutionDir)dep\msvc\include\SDL;$(SolutionDir)dep\imgui\include;$(SolutionDir)dep\simpleini\include;$(SolutionDir)dep\tinyxml2\include;$(SolutionDir)dep\discord-rpc\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan-loader\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(SolutionDir)dep\msvc\include\SDL;$(SolutionDir)dep\imgui\include;$(SolutionDir)dep\simpleini\include;$(SolutionDir)dep\tinyxml2\include;$(SolutionDir)dep\discord-rpc\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan-loader\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
@ -457,7 +457,7 @@
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WITH_SDL2=1;WITH_DISCORD_PRESENCE=1;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WITH_IMGUI=1;WITH_SDL2=1;WITH_DISCORD_PRESENCE=1;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(SolutionDir)dep\msvc\include\SDL;$(SolutionDir)dep\imgui\include;$(SolutionDir)dep\simpleini\include;$(SolutionDir)dep\tinyxml2\include;$(SolutionDir)dep\discord-rpc\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan-loader\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(SolutionDir)dep\msvc\include\SDL;$(SolutionDir)dep\imgui\include;$(SolutionDir)dep\simpleini\include;$(SolutionDir)dep\tinyxml2\include;$(SolutionDir)dep\discord-rpc\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan-loader\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OmitFramePointers>true</OmitFramePointers> <OmitFramePointers>true</OmitFramePointers>

View File

@ -1,10 +1,12 @@
#include "opengl_host_display.h" #include "opengl_host_display.h"
#include "common/assert.h" #include "common/assert.h"
#include "common/log.h" #include "common/log.h"
#include "imgui.h"
#include <array> #include <array>
#include <imgui_impl_opengl3.h>
#include <tuple> #include <tuple>
#ifdef WITH_IMGUI
#include "imgui.h"
#include "imgui_impl_opengl3.h"
#endif
Log_SetChannel(LibretroOpenGLHostDisplay); Log_SetChannel(LibretroOpenGLHostDisplay);
namespace FrontendCommon { namespace FrontendCommon {
@ -219,8 +221,10 @@ bool OpenGLHostDisplay::InitializeRenderDevice(std::string_view shader_cache_dir
if (!CreateResources()) if (!CreateResources())
return false; return false;
#ifdef WITH_IMGUI
if (ImGui::GetCurrentContext() && !CreateImGuiContext()) if (ImGui::GetCurrentContext() && !CreateImGuiContext())
return false; return false;
#endif
return true; return true;
} }
@ -246,8 +250,10 @@ void OpenGLHostDisplay::DestroyRenderDevice()
if (!m_gl_context) if (!m_gl_context)
return; return;
#ifdef WITH_IMGUI
if (ImGui::GetCurrentContext()) if (ImGui::GetCurrentContext())
DestroyImGuiContext(); DestroyImGuiContext();
#endif
DestroyResources(); DestroyResources();
@ -269,11 +275,13 @@ bool OpenGLHostDisplay::ChangeRenderWindow(const WindowInfo& new_wi)
m_window_info.surface_width = m_gl_context->GetSurfaceWidth(); m_window_info.surface_width = m_gl_context->GetSurfaceWidth();
m_window_info.surface_height = m_gl_context->GetSurfaceHeight(); m_window_info.surface_height = m_gl_context->GetSurfaceHeight();
#ifdef WITH_IMGUI
if (ImGui::GetCurrentContext()) if (ImGui::GetCurrentContext())
{ {
ImGui::GetIO().DisplaySize.x = static_cast<float>(m_window_info.surface_width); ImGui::GetIO().DisplaySize.x = static_cast<float>(m_window_info.surface_width);
ImGui::GetIO().DisplaySize.y = static_cast<float>(m_window_info.surface_height); ImGui::GetIO().DisplaySize.y = static_cast<float>(m_window_info.surface_height);
} }
#endif
return true; return true;
} }
@ -287,11 +295,13 @@ void OpenGLHostDisplay::ResizeRenderWindow(s32 new_window_width, s32 new_window_
m_window_info.surface_width = m_gl_context->GetSurfaceWidth(); m_window_info.surface_width = m_gl_context->GetSurfaceWidth();
m_window_info.surface_height = m_gl_context->GetSurfaceHeight(); m_window_info.surface_height = m_gl_context->GetSurfaceHeight();
#ifdef WITH_IMGUI
if (ImGui::GetCurrentContext()) if (ImGui::GetCurrentContext())
{ {
ImGui::GetIO().DisplaySize.x = static_cast<float>(m_window_info.surface_width); ImGui::GetIO().DisplaySize.x = static_cast<float>(m_window_info.surface_width);
ImGui::GetIO().DisplaySize.y = static_cast<float>(m_window_info.surface_height); ImGui::GetIO().DisplaySize.y = static_cast<float>(m_window_info.surface_height);
} }
#endif
} }
void OpenGLHostDisplay::DestroyRenderSurface() void OpenGLHostDisplay::DestroyRenderSurface()
@ -306,6 +316,7 @@ void OpenGLHostDisplay::DestroyRenderSurface()
bool OpenGLHostDisplay::CreateImGuiContext() bool OpenGLHostDisplay::CreateImGuiContext()
{ {
#ifdef WITH_IMGUI
ImGui::GetIO().DisplaySize.x = static_cast<float>(m_window_info.surface_width); ImGui::GetIO().DisplaySize.x = static_cast<float>(m_window_info.surface_width);
ImGui::GetIO().DisplaySize.y = static_cast<float>(m_window_info.surface_height); ImGui::GetIO().DisplaySize.y = static_cast<float>(m_window_info.surface_height);
@ -313,12 +324,15 @@ bool OpenGLHostDisplay::CreateImGuiContext()
return false; return false;
ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplOpenGL3_NewFrame();
#endif
return true; return true;
} }
void OpenGLHostDisplay::DestroyImGuiContext() void OpenGLHostDisplay::DestroyImGuiContext()
{ {
#ifdef WITH_IMGUI
ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplOpenGL3_Shutdown();
#endif
} }
bool OpenGLHostDisplay::CreateResources() bool OpenGLHostDisplay::CreateResources()
@ -424,24 +438,30 @@ bool OpenGLHostDisplay::Render()
RenderDisplay(); RenderDisplay();
#ifdef WITH_IMGUI
if (ImGui::GetCurrentContext()) if (ImGui::GetCurrentContext())
RenderImGui(); RenderImGui();
#endif
RenderSoftwareCursor(); RenderSoftwareCursor();
m_gl_context->SwapBuffers(); m_gl_context->SwapBuffers();
#ifdef WITH_IMGUI
if (ImGui::GetCurrentContext()) if (ImGui::GetCurrentContext())
ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplOpenGL3_NewFrame();
#endif
return true; return true;
} }
void OpenGLHostDisplay::RenderImGui() void OpenGLHostDisplay::RenderImGui()
{ {
#ifdef WITH_IMGUI
ImGui::Render(); ImGui::Render();
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
GL::Program::ResetLastProgram(); GL::Program::ResetLastProgram();
#endif
} }
void OpenGLHostDisplay::RenderDisplay() void OpenGLHostDisplay::RenderDisplay()

View File

@ -9,9 +9,11 @@
#include "common/vulkan/stream_buffer.h" #include "common/vulkan/stream_buffer.h"
#include "common/vulkan/swap_chain.h" #include "common/vulkan/swap_chain.h"
#include "common/vulkan/util.h" #include "common/vulkan/util.h"
#include <array>
#ifdef WITH_IMGUI
#include "imgui.h" #include "imgui.h"
#include "imgui_impl_vulkan.h" #include "imgui_impl_vulkan.h"
#include <array> #endif
Log_SetChannel(VulkanHostDisplay); Log_SetChannel(VulkanHostDisplay);
namespace FrontendCommon { namespace FrontendCommon {
@ -134,11 +136,13 @@ bool VulkanHostDisplay::ChangeRenderWindow(const WindowInfo& new_wi)
m_window_info.surface_width = m_swap_chain->GetWidth(); m_window_info.surface_width = m_swap_chain->GetWidth();
m_window_info.surface_height = m_swap_chain->GetHeight(); m_window_info.surface_height = m_swap_chain->GetHeight();
#ifdef WITH_IMGUI
if (ImGui::GetCurrentContext()) if (ImGui::GetCurrentContext())
{ {
ImGui::GetIO().DisplaySize.x = static_cast<float>(m_window_info.surface_width); ImGui::GetIO().DisplaySize.x = static_cast<float>(m_window_info.surface_width);
ImGui::GetIO().DisplaySize.y = static_cast<float>(m_window_info.surface_height); ImGui::GetIO().DisplaySize.y = static_cast<float>(m_window_info.surface_height);
} }
#endif
return true; return true;
} }
@ -153,11 +157,13 @@ void VulkanHostDisplay::ResizeRenderWindow(s32 new_window_width, s32 new_window_
m_window_info.surface_width = m_swap_chain->GetWidth(); m_window_info.surface_width = m_swap_chain->GetWidth();
m_window_info.surface_height = m_swap_chain->GetHeight(); m_window_info.surface_height = m_swap_chain->GetHeight();
#ifdef WITH_IMGUI
if (ImGui::GetCurrentContext()) if (ImGui::GetCurrentContext())
{ {
ImGui::GetIO().DisplaySize.x = static_cast<float>(m_window_info.surface_width); ImGui::GetIO().DisplaySize.x = static_cast<float>(m_window_info.surface_width);
ImGui::GetIO().DisplaySize.y = static_cast<float>(m_window_info.surface_height); ImGui::GetIO().DisplaySize.y = static_cast<float>(m_window_info.surface_height);
} }
#endif
} }
void VulkanHostDisplay::DestroyRenderSurface() void VulkanHostDisplay::DestroyRenderSurface()
@ -250,8 +256,10 @@ bool VulkanHostDisplay::InitializeRenderDevice(std::string_view shader_cache_dir
if (!CreateResources()) if (!CreateResources())
return false; return false;
#ifdef WITH_IMGUI
if (ImGui::GetCurrentContext() && !CreateImGuiContext()) if (ImGui::GetCurrentContext() && !CreateImGuiContext())
return false; return false;
#endif
return true; return true;
} }
@ -400,7 +408,9 @@ void VulkanHostDisplay::DestroyResources()
void VulkanHostDisplay::DestroyImGuiContext() void VulkanHostDisplay::DestroyImGuiContext()
{ {
#ifdef WITH_IMGUI
ImGui_ImplVulkan_Shutdown(); ImGui_ImplVulkan_Shutdown();
#endif
} }
void VulkanHostDisplay::DestroyRenderDevice() void VulkanHostDisplay::DestroyRenderDevice()
@ -410,8 +420,10 @@ void VulkanHostDisplay::DestroyRenderDevice()
g_vulkan_context->WaitForGPUIdle(); g_vulkan_context->WaitForGPUIdle();
#ifdef WITH_IMGUI
if (ImGui::GetCurrentContext()) if (ImGui::GetCurrentContext())
DestroyImGuiContext(); DestroyImGuiContext();
#endif
DestroyResources(); DestroyResources();
@ -432,6 +444,7 @@ bool VulkanHostDisplay::DoneRenderContextCurrent()
bool VulkanHostDisplay::CreateImGuiContext() bool VulkanHostDisplay::CreateImGuiContext()
{ {
#ifdef WITH_IMGUI
ImGui::GetIO().DisplaySize.x = static_cast<float>(m_window_info.surface_width); ImGui::GetIO().DisplaySize.x = static_cast<float>(m_window_info.surface_width);
ImGui::GetIO().DisplaySize.y = static_cast<float>(m_window_info.surface_height); ImGui::GetIO().DisplaySize.y = static_cast<float>(m_window_info.surface_height);
@ -454,6 +467,8 @@ bool VulkanHostDisplay::CreateImGuiContext()
} }
ImGui_ImplVulkan_NewFrame(); ImGui_ImplVulkan_NewFrame();
#endif
return true; return true;
} }
@ -499,8 +514,10 @@ bool VulkanHostDisplay::Render()
RenderDisplay(); RenderDisplay();
#ifdef WITH_IMGUI
if (ImGui::GetCurrentContext()) if (ImGui::GetCurrentContext())
RenderImGui(); RenderImGui();
#endif
RenderSoftwareCursor(); RenderSoftwareCursor();
@ -513,8 +530,10 @@ bool VulkanHostDisplay::Render()
m_swap_chain->GetCurrentImageIndex()); m_swap_chain->GetCurrentImageIndex());
g_vulkan_context->MoveToNextCommandBuffer(); g_vulkan_context->MoveToNextCommandBuffer();
#ifdef WITH_IMGUI
if (ImGui::GetCurrentContext()) if (ImGui::GetCurrentContext())
ImGui_ImplVulkan_NewFrame(); ImGui_ImplVulkan_NewFrame();
#endif
return true; return true;
} }
@ -565,8 +584,10 @@ void VulkanHostDisplay::RenderDisplay(s32 left, s32 top, s32 width, s32 height,
void VulkanHostDisplay::RenderImGui() void VulkanHostDisplay::RenderImGui()
{ {
#ifdef WITH_IMGUI
ImGui::Render(); ImGui::Render();
ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), g_vulkan_context->GetCurrentCommandBuffer()); ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), g_vulkan_context->GetCurrentCommandBuffer());
#endif
} }
void VulkanHostDisplay::RenderSoftwareCursor() void VulkanHostDisplay::RenderSoftwareCursor()