mirror of
https://github.com/Drezil/imgui.git
synced 2024-12-22 07:36:35 +00:00
Merge branch 'master' into docking
This commit is contained in:
commit
43a85dd02e
@ -112,8 +112,11 @@ Other Changes:
|
|||||||
GL function loaders early, and help users understand what they are missing. (#2421)
|
GL function loaders early, and help users understand what they are missing. (#2421)
|
||||||
- Examples: OpenGL3: Minor tweaks + not calling glBindBuffer more than necessary in the render loop.
|
- Examples: OpenGL3: Minor tweaks + not calling glBindBuffer more than necessary in the render loop.
|
||||||
- Examples: Vulkan: Added missing support for 32-bit indices (#define ImDrawIdx unsigned int).
|
- Examples: Vulkan: Added missing support for 32-bit indices (#define ImDrawIdx unsigned int).
|
||||||
|
- Examples: Vulkan: Avoid passing negative coordinates to vkCmdSetScissor, which debug validation layers do not like.
|
||||||
- Examples: DirectX9: Fixed erroneous assert in ImGui_ImplDX9_InvalidateDeviceObjects(). (#2454)
|
- Examples: DirectX9: Fixed erroneous assert in ImGui_ImplDX9_InvalidateDeviceObjects(). (#2454)
|
||||||
- Examples: FreeGLUT: Made io.DeltaTime always > 0. (#2430)
|
- Examples: GLUT: Fixed existing FreeGLUT example to work with regular GLUT. (#2465) [@andrewwillmott]
|
||||||
|
- Examples: GLUT: Renamed imgui_impl_freeglut.cpp/.h to imgui_impl_glut.cpp/.h. (#2465) [@andrewwillmott]
|
||||||
|
- Examples: GLUT: Made io.DeltaTime always > 0. (#2430)
|
||||||
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
|
@ -134,7 +134,7 @@ Languages: (third-party bindings)
|
|||||||
|
|
||||||
Frameworks:
|
Frameworks:
|
||||||
- Renderers: DirectX 9/10/11/12, Metal, OpenGL2, OpenGL3+/ES2/ES3, Vulkan: [examples/](https://github.com/ocornut/imgui/tree/master/examples)
|
- Renderers: DirectX 9/10/11/12, Metal, OpenGL2, OpenGL3+/ES2/ES3, Vulkan: [examples/](https://github.com/ocornut/imgui/tree/master/examples)
|
||||||
- Platform: GLFW, SDL, Win32, OSX, Freeglut: [examples/](https://github.com/ocornut/imgui/tree/master/examples)
|
- Platform: GLFW, SDL, Win32, OSX, GLUT: [examples/](https://github.com/ocornut/imgui/tree/master/examples)
|
||||||
- Framework: Allegro 5, Marmalade: [examples/](https://github.com/ocornut/imgui/tree/master/examples)
|
- Framework: Allegro 5, Marmalade: [examples/](https://github.com/ocornut/imgui/tree/master/examples)
|
||||||
- Unmerged PR: SDL2 + OpenGLES + Emscripten: [#336](https://github.com/ocornut/imgui/pull/336)
|
- Unmerged PR: SDL2 + OpenGLES + Emscripten: [#336](https://github.com/ocornut/imgui/pull/336)
|
||||||
- Unmerged PR: Android: [#421](https://github.com/ocornut/imgui/pull/421)
|
- Unmerged PR: Android: [#421](https://github.com/ocornut/imgui/pull/421)
|
||||||
|
1
examples/.gitignore
vendored
1
examples/.gitignore
vendored
@ -33,6 +33,7 @@ example_glfw_opengl2/example_glfw_opengl2
|
|||||||
example_glfw_opengl3/example_glfw_opengl3
|
example_glfw_opengl3/example_glfw_opengl3
|
||||||
example_sdl_opengl2/example_sdl_opengl2
|
example_sdl_opengl2/example_sdl_opengl2
|
||||||
example_sdl_opengl3/example_sdl_opengl3
|
example_sdl_opengl3/example_sdl_opengl3
|
||||||
|
example_glut_opengl2/example_glut_opengl2
|
||||||
|
|
||||||
## Dear ImGui Ini files
|
## Dear ImGui Ini files
|
||||||
imgui.ini
|
imgui.ini
|
||||||
|
@ -111,7 +111,7 @@ List of Platforms Bindings in this repository:
|
|||||||
imgui_impl_osx.mm ; macOS native API
|
imgui_impl_osx.mm ; macOS native API
|
||||||
imgui_impl_sdl.cpp ; SDL2 (Windows, macOS, Linux, iOS, Android) https://www.libsdl.org
|
imgui_impl_sdl.cpp ; SDL2 (Windows, macOS, Linux, iOS, Android) https://www.libsdl.org
|
||||||
imgui_impl_win32.cpp ; Win32 native API (Windows)
|
imgui_impl_win32.cpp ; Win32 native API (Windows)
|
||||||
imgui_impl_freeglut.cpp ; FreeGLUT (if you really miss the 90's)
|
imgui_impl_glut.cpp ; GLUT/FreeGLUT (not recommended unless really miss the 90's)
|
||||||
|
|
||||||
List of Renderer Bindings in this repository:
|
List of Renderer Bindings in this repository:
|
||||||
|
|
||||||
@ -230,9 +230,9 @@ example_allegro5/
|
|||||||
Allegro 5 example.
|
Allegro 5 example.
|
||||||
= main.cpp + imgui_impl_allegro5.cpp
|
= main.cpp + imgui_impl_allegro5.cpp
|
||||||
|
|
||||||
example_freeglut_opengl2/
|
example_glut_opengl2/
|
||||||
FreeGLUT + OpenGL2.
|
GLUT (e.g., FreeGLUT on Linux/Windows, GLUT framework on OSX) + OpenGL2.
|
||||||
= main.cpp + imgui_impl_freeglut.cpp + imgui_impl_opengl2.cpp
|
= main.cpp + imgui_impl_glut.cpp + imgui_impl_opengl2.cpp
|
||||||
|
|
||||||
example_marmalade/
|
example_marmalade/
|
||||||
Marmalade example using IwGx.
|
Marmalade example using IwGx.
|
||||||
|
@ -3,7 +3,7 @@ layout(location = 0) out vec4 fColor;
|
|||||||
|
|
||||||
layout(set=0, binding=0) uniform sampler2D sTexture;
|
layout(set=0, binding=0) uniform sampler2D sTexture;
|
||||||
|
|
||||||
layout(location = 0) in struct{
|
layout(location = 0) in struct {
|
||||||
vec4 Color;
|
vec4 Color;
|
||||||
vec2 UV;
|
vec2 UV;
|
||||||
} In;
|
} In;
|
||||||
|
@ -3,16 +3,16 @@ layout(location = 0) in vec2 aPos;
|
|||||||
layout(location = 1) in vec2 aUV;
|
layout(location = 1) in vec2 aUV;
|
||||||
layout(location = 2) in vec4 aColor;
|
layout(location = 2) in vec4 aColor;
|
||||||
|
|
||||||
layout(push_constant) uniform uPushConstant{
|
layout(push_constant) uniform uPushConstant {
|
||||||
vec2 uScale;
|
vec2 uScale;
|
||||||
vec2 uTranslate;
|
vec2 uTranslate;
|
||||||
} pc;
|
} pc;
|
||||||
|
|
||||||
out gl_PerVertex{
|
out gl_PerVertex {
|
||||||
vec4 gl_Position;
|
vec4 gl_Position;
|
||||||
};
|
};
|
||||||
|
|
||||||
layout(location = 0) out struct{
|
layout(location = 0) out struct {
|
||||||
vec4 Color;
|
vec4 Color;
|
||||||
vec2 UV;
|
vec2 UV;
|
||||||
} Out;
|
} Out;
|
||||||
@ -21,5 +21,5 @@ void main()
|
|||||||
{
|
{
|
||||||
Out.Color = aColor;
|
Out.Color = aColor;
|
||||||
Out.UV = aUV;
|
Out.UV = aUV;
|
||||||
gl_Position = vec4(aPos*pc.uScale+pc.uTranslate, 0, 1);
|
gl_Position = vec4(aPos * pc.uScale + pc.uTranslate, 0, 1);
|
||||||
}
|
}
|
||||||
|
@ -233,77 +233,77 @@ static void CleanupVulkan()
|
|||||||
|
|
||||||
static void FrameRender(ImGui_ImplVulkanH_WindowData* wd)
|
static void FrameRender(ImGui_ImplVulkanH_WindowData* wd)
|
||||||
{
|
{
|
||||||
VkResult err;
|
VkResult err;
|
||||||
|
|
||||||
VkSemaphore& image_acquired_semaphore = wd->Frames[wd->FrameIndex].ImageAcquiredSemaphore;
|
VkSemaphore& image_acquired_semaphore = wd->Frames[wd->FrameIndex].ImageAcquiredSemaphore;
|
||||||
err = vkAcquireNextImageKHR(g_Device, wd->Swapchain, UINT64_MAX, image_acquired_semaphore, VK_NULL_HANDLE, &wd->FrameIndex);
|
err = vkAcquireNextImageKHR(g_Device, wd->Swapchain, UINT64_MAX, image_acquired_semaphore, VK_NULL_HANDLE, &wd->FrameIndex);
|
||||||
check_vk_result(err);
|
check_vk_result(err);
|
||||||
|
|
||||||
ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[wd->FrameIndex];
|
ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[wd->FrameIndex];
|
||||||
{
|
{
|
||||||
err = vkWaitForFences(g_Device, 1, &fd->Fence, VK_TRUE, UINT64_MAX); // wait indefinitely instead of periodically checking
|
err = vkWaitForFences(g_Device, 1, &fd->Fence, VK_TRUE, UINT64_MAX); // wait indefinitely instead of periodically checking
|
||||||
check_vk_result(err);
|
check_vk_result(err);
|
||||||
|
|
||||||
err = vkResetFences(g_Device, 1, &fd->Fence);
|
err = vkResetFences(g_Device, 1, &fd->Fence);
|
||||||
check_vk_result(err);
|
check_vk_result(err);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
err = vkResetCommandPool(g_Device, fd->CommandPool, 0);
|
err = vkResetCommandPool(g_Device, fd->CommandPool, 0);
|
||||||
check_vk_result(err);
|
check_vk_result(err);
|
||||||
VkCommandBufferBeginInfo info = {};
|
VkCommandBufferBeginInfo info = {};
|
||||||
info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
|
info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
|
||||||
info.flags |= VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
|
info.flags |= VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
|
||||||
err = vkBeginCommandBuffer(fd->CommandBuffer, &info);
|
err = vkBeginCommandBuffer(fd->CommandBuffer, &info);
|
||||||
check_vk_result(err);
|
check_vk_result(err);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
VkRenderPassBeginInfo info = {};
|
VkRenderPassBeginInfo info = {};
|
||||||
info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
|
info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
|
||||||
info.renderPass = wd->RenderPass;
|
info.renderPass = wd->RenderPass;
|
||||||
info.framebuffer = wd->Framebuffer[wd->FrameIndex];
|
info.framebuffer = wd->Framebuffer[wd->FrameIndex];
|
||||||
info.renderArea.extent.width = wd->Width;
|
info.renderArea.extent.width = wd->Width;
|
||||||
info.renderArea.extent.height = wd->Height;
|
info.renderArea.extent.height = wd->Height;
|
||||||
info.clearValueCount = 1;
|
info.clearValueCount = 1;
|
||||||
info.pClearValues = &wd->ClearValue;
|
info.pClearValues = &wd->ClearValue;
|
||||||
vkCmdBeginRenderPass(fd->CommandBuffer, &info, VK_SUBPASS_CONTENTS_INLINE);
|
vkCmdBeginRenderPass(fd->CommandBuffer, &info, VK_SUBPASS_CONTENTS_INLINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Record Imgui Draw Data and draw funcs into command buffer
|
// Record Imgui Draw Data and draw funcs into command buffer
|
||||||
ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), fd->CommandBuffer);
|
ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), fd->CommandBuffer);
|
||||||
|
|
||||||
// Submit command buffer
|
// Submit command buffer
|
||||||
vkCmdEndRenderPass(fd->CommandBuffer);
|
vkCmdEndRenderPass(fd->CommandBuffer);
|
||||||
{
|
{
|
||||||
VkPipelineStageFlags wait_stage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
|
VkPipelineStageFlags wait_stage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
|
||||||
VkSubmitInfo info = {};
|
VkSubmitInfo info = {};
|
||||||
info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
|
info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
|
||||||
info.waitSemaphoreCount = 1;
|
info.waitSemaphoreCount = 1;
|
||||||
info.pWaitSemaphores = &image_acquired_semaphore;
|
info.pWaitSemaphores = &image_acquired_semaphore;
|
||||||
info.pWaitDstStageMask = &wait_stage;
|
info.pWaitDstStageMask = &wait_stage;
|
||||||
info.commandBufferCount = 1;
|
info.commandBufferCount = 1;
|
||||||
info.pCommandBuffers = &fd->CommandBuffer;
|
info.pCommandBuffers = &fd->CommandBuffer;
|
||||||
info.signalSemaphoreCount = 1;
|
info.signalSemaphoreCount = 1;
|
||||||
info.pSignalSemaphores = &fd->RenderCompleteSemaphore;
|
info.pSignalSemaphores = &fd->RenderCompleteSemaphore;
|
||||||
|
|
||||||
err = vkEndCommandBuffer(fd->CommandBuffer);
|
err = vkEndCommandBuffer(fd->CommandBuffer);
|
||||||
check_vk_result(err);
|
check_vk_result(err);
|
||||||
err = vkQueueSubmit(g_Queue, 1, &info, fd->Fence);
|
err = vkQueueSubmit(g_Queue, 1, &info, fd->Fence);
|
||||||
check_vk_result(err);
|
check_vk_result(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void FramePresent(ImGui_ImplVulkanH_WindowData* wd)
|
static void FramePresent(ImGui_ImplVulkanH_WindowData* wd)
|
||||||
{
|
{
|
||||||
ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[wd->FrameIndex];
|
ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[wd->FrameIndex];
|
||||||
VkPresentInfoKHR info = {};
|
VkPresentInfoKHR info = {};
|
||||||
info.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
|
info.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
|
||||||
info.waitSemaphoreCount = 1;
|
info.waitSemaphoreCount = 1;
|
||||||
info.pWaitSemaphores = &fd->RenderCompleteSemaphore;
|
info.pWaitSemaphores = &fd->RenderCompleteSemaphore;
|
||||||
info.swapchainCount = 1;
|
info.swapchainCount = 1;
|
||||||
info.pSwapchains = &wd->Swapchain;
|
info.pSwapchains = &wd->Swapchain;
|
||||||
info.pImageIndices = &wd->FrameIndex;
|
info.pImageIndices = &wd->FrameIndex;
|
||||||
VkResult err = vkQueuePresentKHR(g_Queue, &info);
|
VkResult err = vkQueuePresentKHR(g_Queue, &info);
|
||||||
check_vk_result(err);
|
check_vk_result(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void glfw_error_callback(int error, const char* description)
|
static void glfw_error_callback(int error, const char* description)
|
||||||
@ -315,12 +315,12 @@ static void glfw_resize_callback(GLFWwindow*, int w, int h)
|
|||||||
{
|
{
|
||||||
g_ResizeWanted = true;
|
g_ResizeWanted = true;
|
||||||
g_ResizeWidth = w;
|
g_ResizeWidth = w;
|
||||||
g_ResizeHeight = h;
|
g_ResizeHeight = h;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int, char**)
|
int main(int, char**)
|
||||||
{
|
{
|
||||||
// Setup window
|
// Setup window
|
||||||
glfwSetErrorCallback(glfw_error_callback);
|
glfwSetErrorCallback(glfw_error_callback);
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
return 1;
|
return 1;
|
||||||
@ -445,11 +445,11 @@ int main(int, char**)
|
|||||||
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
|
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
|
||||||
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
|
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
|
||||||
glfwPollEvents();
|
glfwPollEvents();
|
||||||
if (g_ResizeWanted)
|
if (g_ResizeWanted)
|
||||||
{
|
{
|
||||||
ImGui_ImplVulkanH_CreateWindowDataSwapChainAndFramebuffer(g_PhysicalDevice, g_Device, &g_WindowData, g_Allocator, g_ResizeWidth, g_ResizeHeight);
|
ImGui_ImplVulkanH_CreateWindowDataSwapChainAndFramebuffer(g_PhysicalDevice, g_Device, &g_WindowData, g_Allocator, g_ResizeWidth, g_ResizeHeight);
|
||||||
g_ResizeWanted = false;
|
g_ResizeWanted = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start the Dear ImGui frame
|
// Start the Dear ImGui frame
|
||||||
ImGui_ImplVulkan_NewFrame();
|
ImGui_ImplVulkan_NewFrame();
|
||||||
@ -496,7 +496,7 @@ int main(int, char**)
|
|||||||
// Rendering
|
// Rendering
|
||||||
ImGui::Render();
|
ImGui::Render();
|
||||||
memcpy(&wd->ClearValue.color.float32[0], &clear_color, 4 * sizeof(float));
|
memcpy(&wd->ClearValue.color.float32[0], &clear_color, 4 * sizeof(float));
|
||||||
FrameRender(wd);
|
FrameRender(wd);
|
||||||
|
|
||||||
// Update and Render additional Platform Windows
|
// Update and Render additional Platform Windows
|
||||||
if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
|
if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
|
||||||
|
65
examples/example_glut_opengl2/Makefile
Normal file
65
examples/example_glut_opengl2/Makefile
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
#
|
||||||
|
# Cross Platform Makefile
|
||||||
|
# Compatible with Ubuntu 14.04.1 and Mac OS X
|
||||||
|
#
|
||||||
|
# Linux:
|
||||||
|
# apt-get install freeglut3-dev
|
||||||
|
#
|
||||||
|
|
||||||
|
#CXX = g++
|
||||||
|
#CXX = clang++
|
||||||
|
|
||||||
|
EXE = example_glut_opengl2
|
||||||
|
SOURCES = main.cpp
|
||||||
|
SOURCES += ../imgui_impl_glut.cpp ../imgui_impl_opengl2.cpp
|
||||||
|
SOURCES += ../../imgui.cpp ../../imgui_demo.cpp ../../imgui_draw.cpp ../../imgui_widgets.cpp
|
||||||
|
OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES))))
|
||||||
|
|
||||||
|
UNAME_S := $(shell uname -s)
|
||||||
|
|
||||||
|
|
||||||
|
ifeq ($(UNAME_S), Linux) #LINUX
|
||||||
|
ECHO_MESSAGE = "Linux"
|
||||||
|
LIBS = -lGL -lglut
|
||||||
|
|
||||||
|
CXXFLAGS = -I ../ -I../..
|
||||||
|
CXXFLAGS += -Wall -Wformat
|
||||||
|
CFLAGS = $(CXXFLAGS)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(UNAME_S), Darwin) #APPLE
|
||||||
|
ECHO_MESSAGE = "Mac OS X"
|
||||||
|
LIBS = -framework OpenGL -framework GLUT
|
||||||
|
|
||||||
|
CXXFLAGS = -I .. -I../..
|
||||||
|
CXXFLAGS += -Wall -Wformat
|
||||||
|
CFLAGS = $(CXXFLAGS)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(findstring MINGW,$(UNAME_S)),MINGW)
|
||||||
|
ECHO_MESSAGE = "Windows"
|
||||||
|
LIBS = -lgdi32 -lopengl32 -limm32 -lglut
|
||||||
|
|
||||||
|
CXXFLAGS = -I ../ -I../../
|
||||||
|
CXXFLAGS += -Wall -Wformat
|
||||||
|
CFLAGS = $(CXXFLAGS)
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
%.o:%.cpp
|
||||||
|
$(CXX) $(CXXFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
%.o:../%.cpp
|
||||||
|
$(CXX) $(CXXFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
%.o:../../%.cpp
|
||||||
|
$(CXX) $(CXXFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
all: $(EXE)
|
||||||
|
@echo Build complete for $(ECHO_MESSAGE)
|
||||||
|
|
||||||
|
$(EXE): $(OBJS)
|
||||||
|
$(CXX) -o $@ $^ $(CXXFLAGS) $(LIBS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(EXE) $(OBJS)
|
@ -20,7 +20,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<ProjectGuid>{F90D0333-5FB1-440D-918D-DD39A1B5187E}</ProjectGuid>
|
<ProjectGuid>{F90D0333-5FB1-440D-918D-DD39A1B5187E}</ProjectGuid>
|
||||||
<RootNamespace>example_freeglut_opengl2</RootNamespace>
|
<RootNamespace>example_glut_opengl2</RootNamespace>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
@ -154,7 +154,7 @@
|
|||||||
<ClCompile Include="..\..\imgui_demo.cpp" />
|
<ClCompile Include="..\..\imgui_demo.cpp" />
|
||||||
<ClCompile Include="..\..\imgui_draw.cpp" />
|
<ClCompile Include="..\..\imgui_draw.cpp" />
|
||||||
<ClCompile Include="..\..\imgui_widgets.cpp" />
|
<ClCompile Include="..\..\imgui_widgets.cpp" />
|
||||||
<ClCompile Include="..\imgui_impl_freeglut.cpp" />
|
<ClCompile Include="..\imgui_impl_glut.cpp" />
|
||||||
<ClCompile Include="..\imgui_impl_opengl2.cpp" />
|
<ClCompile Include="..\imgui_impl_opengl2.cpp" />
|
||||||
<ClCompile Include="main.cpp" />
|
<ClCompile Include="main.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -162,7 +162,7 @@
|
|||||||
<ClInclude Include="..\..\imconfig.h" />
|
<ClInclude Include="..\..\imconfig.h" />
|
||||||
<ClInclude Include="..\..\imgui.h" />
|
<ClInclude Include="..\..\imgui.h" />
|
||||||
<ClInclude Include="..\..\imgui_internal.h" />
|
<ClInclude Include="..\..\imgui_internal.h" />
|
||||||
<ClInclude Include="..\imgui_impl_freeglut.h" />
|
<ClInclude Include="..\imgui_impl_glut.h" />
|
||||||
<ClInclude Include="..\imgui_impl_opengl2.h" />
|
<ClInclude Include="..\imgui_impl_opengl2.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
@ -22,7 +22,7 @@
|
|||||||
<ClCompile Include="..\..\imgui_draw.cpp">
|
<ClCompile Include="..\..\imgui_draw.cpp">
|
||||||
<Filter>imgui</Filter>
|
<Filter>imgui</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\imgui_impl_freeglut.cpp">
|
<ClCompile Include="..\imgui_impl_glut.cpp">
|
||||||
<Filter>sources</Filter>
|
<Filter>sources</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\imgui_impl_opengl2.cpp">
|
<ClCompile Include="..\imgui_impl_opengl2.cpp">
|
||||||
@ -42,7 +42,7 @@
|
|||||||
<ClInclude Include="..\..\imgui_internal.h">
|
<ClInclude Include="..\..\imgui_internal.h">
|
||||||
<Filter>imgui</Filter>
|
<Filter>imgui</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\imgui_impl_freeglut.h">
|
<ClInclude Include="..\imgui_impl_glut.h">
|
||||||
<Filter>sources</Filter>
|
<Filter>sources</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\imgui_impl_opengl2.h">
|
<ClInclude Include="..\imgui_impl_opengl2.h">
|
@ -1,13 +1,17 @@
|
|||||||
// dear imgui: standalone example application for FreeGLUT + OpenGL2, using legacy fixed pipeline
|
// dear imgui: standalone example application for GLUT/FreeGLUT + OpenGL2, using legacy fixed pipeline
|
||||||
// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp.
|
// If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp.
|
||||||
|
|
||||||
// !!! GLUT IS OBSOLETE SOFTWARE. Using GLUT is not recommended unless you really miss the 90's. !!!
|
// !!! GLUT/FreeGLUT IS OBSOLETE SOFTWARE. Using GLUT is not recommended unless you really miss the 90's. !!!
|
||||||
// !!! If someone or something is teaching you GLUT in 2019, you are being abused. Please show some resistance. !!!
|
// !!! If someone or something is teaching you GLUT in 2019, you are being abused. Please show some resistance. !!!
|
||||||
|
|
||||||
#include "imgui.h"
|
#include "imgui.h"
|
||||||
#include "../imgui_impl_freeglut.h"
|
#include "../imgui_impl_glut.h"
|
||||||
#include "../imgui_impl_opengl2.h"
|
#include "../imgui_impl_opengl2.h"
|
||||||
#include <GL/freeglut.h>
|
#ifdef __APPLE__
|
||||||
|
#include <GLUT/glut.h>
|
||||||
|
#else
|
||||||
|
#include <GL/freeglut.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#pragma warning (disable: 4505) // unreferenced local function has been removed
|
#pragma warning (disable: 4505) // unreferenced local function has been removed
|
||||||
@ -61,7 +65,7 @@ void glut_display_func()
|
|||||||
{
|
{
|
||||||
// Start the Dear ImGui frame
|
// Start the Dear ImGui frame
|
||||||
ImGui_ImplOpenGL2_NewFrame();
|
ImGui_ImplOpenGL2_NewFrame();
|
||||||
ImGui_ImplFreeGLUT_NewFrame();
|
ImGui_ImplGLUT_NewFrame();
|
||||||
|
|
||||||
my_display_code();
|
my_display_code();
|
||||||
|
|
||||||
@ -87,14 +91,16 @@ int main(int argc, char** argv)
|
|||||||
{
|
{
|
||||||
// Create GLUT window
|
// Create GLUT window
|
||||||
glutInit(&argc, argv);
|
glutInit(&argc, argv);
|
||||||
|
#ifdef __FREEGLUT_EXT_H__
|
||||||
glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS);
|
glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS);
|
||||||
|
#endif
|
||||||
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_MULTISAMPLE);
|
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_MULTISAMPLE);
|
||||||
glutInitWindowSize(1280, 720);
|
glutInitWindowSize(1280, 720);
|
||||||
glutCreateWindow("Dear ImGui FreeGLUT+OpenGL2 Example");
|
glutCreateWindow("Dear ImGui GLUT+OpenGL2 Example");
|
||||||
|
|
||||||
// Setup GLUT display function
|
// Setup GLUT display function
|
||||||
// We will also call ImGui_ImplFreeGLUT_InstallFuncs() to get all the other functions installed for us,
|
// We will also call ImGui_ImplGLUT_InstallFuncs() to get all the other functions installed for us,
|
||||||
// otherwise it is possible to install our own functions and call the imgui_impl_freeglut.h functions ourselves.
|
// otherwise it is possible to install our own functions and call the imgui_impl_glut.h functions ourselves.
|
||||||
glutDisplayFunc(glut_display_func);
|
glutDisplayFunc(glut_display_func);
|
||||||
|
|
||||||
// Setup Dear ImGui context
|
// Setup Dear ImGui context
|
||||||
@ -108,8 +114,8 @@ int main(int argc, char** argv)
|
|||||||
//ImGui::StyleColorsClassic();
|
//ImGui::StyleColorsClassic();
|
||||||
|
|
||||||
// Setup Platform/Renderer bindings
|
// Setup Platform/Renderer bindings
|
||||||
ImGui_ImplFreeGLUT_Init();
|
ImGui_ImplGLUT_Init();
|
||||||
ImGui_ImplFreeGLUT_InstallFuncs();
|
ImGui_ImplGLUT_InstallFuncs();
|
||||||
ImGui_ImplOpenGL2_Init();
|
ImGui_ImplOpenGL2_Init();
|
||||||
|
|
||||||
// Load Fonts
|
// Load Fonts
|
||||||
@ -131,7 +137,7 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
// Cleanup
|
// Cleanup
|
||||||
ImGui_ImplOpenGL2_Shutdown();
|
ImGui_ImplOpenGL2_Shutdown();
|
||||||
ImGui_ImplFreeGLUT_Shutdown();
|
ImGui_ImplGLUT_Shutdown();
|
||||||
ImGui::DestroyContext();
|
ImGui::DestroyContext();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
@ -223,18 +223,18 @@ static void CleanupVulkan()
|
|||||||
|
|
||||||
static void FrameRender(ImGui_ImplVulkanH_WindowData* wd)
|
static void FrameRender(ImGui_ImplVulkanH_WindowData* wd)
|
||||||
{
|
{
|
||||||
VkResult err;
|
VkResult err;
|
||||||
|
|
||||||
VkSemaphore& image_acquired_semaphore = wd->Frames[wd->FrameIndex].ImageAcquiredSemaphore;
|
VkSemaphore& image_acquired_semaphore = wd->Frames[wd->FrameIndex].ImageAcquiredSemaphore;
|
||||||
err = vkAcquireNextImageKHR(g_Device, wd->Swapchain, UINT64_MAX, image_acquired_semaphore, VK_NULL_HANDLE, &wd->FrameIndex);
|
err = vkAcquireNextImageKHR(g_Device, wd->Swapchain, UINT64_MAX, image_acquired_semaphore, VK_NULL_HANDLE, &wd->FrameIndex);
|
||||||
check_vk_result(err);
|
check_vk_result(err);
|
||||||
|
|
||||||
ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[wd->FrameIndex];
|
ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[wd->FrameIndex];
|
||||||
{
|
{
|
||||||
err = vkWaitForFences(g_Device, 1, &fd->Fence, VK_TRUE, UINT64_MAX); // wait indefinitely instead of periodically checking
|
err = vkWaitForFences(g_Device, 1, &fd->Fence, VK_TRUE, UINT64_MAX); // wait indefinitely instead of periodically checking
|
||||||
check_vk_result(err);
|
check_vk_result(err);
|
||||||
|
|
||||||
err = vkResetFences(g_Device, 1, &fd->Fence);
|
err = vkResetFences(g_Device, 1, &fd->Fence);
|
||||||
check_vk_result(err);
|
check_vk_result(err);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@ -250,7 +250,7 @@ static void FrameRender(ImGui_ImplVulkanH_WindowData* wd)
|
|||||||
VkRenderPassBeginInfo info = {};
|
VkRenderPassBeginInfo info = {};
|
||||||
info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
|
info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
|
||||||
info.renderPass = wd->RenderPass;
|
info.renderPass = wd->RenderPass;
|
||||||
info.framebuffer = wd->Framebuffer[wd->FrameIndex];
|
info.framebuffer = wd->Framebuffer[wd->FrameIndex];
|
||||||
info.renderArea.extent.width = wd->Width;
|
info.renderArea.extent.width = wd->Width;
|
||||||
info.renderArea.extent.height = wd->Height;
|
info.renderArea.extent.height = wd->Height;
|
||||||
info.clearValueCount = 1;
|
info.clearValueCount = 1;
|
||||||
@ -258,17 +258,17 @@ static void FrameRender(ImGui_ImplVulkanH_WindowData* wd)
|
|||||||
vkCmdBeginRenderPass(fd->CommandBuffer, &info, VK_SUBPASS_CONTENTS_INLINE);
|
vkCmdBeginRenderPass(fd->CommandBuffer, &info, VK_SUBPASS_CONTENTS_INLINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Record Imgui Draw Data and draw funcs into command buffer
|
// Record Imgui Draw Data and draw funcs into command buffer
|
||||||
ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), fd->CommandBuffer);
|
ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), fd->CommandBuffer);
|
||||||
|
|
||||||
// Submit command buffer
|
// Submit command buffer
|
||||||
vkCmdEndRenderPass(fd->CommandBuffer);
|
vkCmdEndRenderPass(fd->CommandBuffer);
|
||||||
{
|
{
|
||||||
VkPipelineStageFlags wait_stage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
|
VkPipelineStageFlags wait_stage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
|
||||||
VkSubmitInfo info = {};
|
VkSubmitInfo info = {};
|
||||||
info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
|
info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
|
||||||
info.waitSemaphoreCount = 1;
|
info.waitSemaphoreCount = 1;
|
||||||
info.pWaitSemaphores = &image_acquired_semaphore;
|
info.pWaitSemaphores = &image_acquired_semaphore;
|
||||||
info.pWaitDstStageMask = &wait_stage;
|
info.pWaitDstStageMask = &wait_stage;
|
||||||
info.commandBufferCount = 1;
|
info.commandBufferCount = 1;
|
||||||
info.pCommandBuffers = &fd->CommandBuffer;
|
info.pCommandBuffers = &fd->CommandBuffer;
|
||||||
@ -291,8 +291,8 @@ static void FramePresent(ImGui_ImplVulkanH_WindowData* wd)
|
|||||||
info.pWaitSemaphores = &fd->RenderCompleteSemaphore;
|
info.pWaitSemaphores = &fd->RenderCompleteSemaphore;
|
||||||
info.swapchainCount = 1;
|
info.swapchainCount = 1;
|
||||||
info.pSwapchains = &wd->Swapchain;
|
info.pSwapchains = &wd->Swapchain;
|
||||||
info.pImageIndices = &wd->FrameIndex;
|
info.pImageIndices = &wd->FrameIndex;
|
||||||
VkResult err = vkQueuePresentKHR(g_Queue, &info);
|
VkResult err = vkQueuePresentKHR(g_Queue, &info);
|
||||||
check_vk_result(err);
|
check_vk_result(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -482,7 +482,7 @@ int main(int, char**)
|
|||||||
// Rendering
|
// Rendering
|
||||||
ImGui::Render();
|
ImGui::Render();
|
||||||
memcpy(&wd->ClearValue.color.float32[0], &clear_color, 4 * sizeof(float));
|
memcpy(&wd->ClearValue.color.float32[0], &clear_color, 4 * sizeof(float));
|
||||||
FrameRender(wd);
|
FrameRender(wd);
|
||||||
|
|
||||||
// Update and Render additional Platform Windows
|
// Update and Render additional Platform Windows
|
||||||
if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
|
if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
// dear imgui: Platform Binding for FreeGLUT
|
|
||||||
// This needs to be used along with a Renderer (e.g. OpenGL2)
|
|
||||||
|
|
||||||
// !!! GLUT IS OBSOLETE SOFTWARE. Using GLUT is not recommended unless you really miss the 90's. !!!
|
|
||||||
// !!! If someone or something is teaching you GLUT in 2019, you are being abused. Please show some resistance. !!!
|
|
||||||
|
|
||||||
// Issues:
|
|
||||||
// [ ] Platform: GLUT is unable to distinguish e.g. Backspace from CTRL+H or TAB from CTRL+I
|
|
||||||
// [ ] Platform: Missing clipboard support (not supported by Glut).
|
|
||||||
// [ ] Platform: Missing gamepad support.
|
|
||||||
|
|
||||||
// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this.
|
|
||||||
// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp.
|
|
||||||
// https://github.com/ocornut/imgui
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
IMGUI_IMPL_API bool ImGui_ImplFreeGLUT_Init();
|
|
||||||
IMGUI_IMPL_API void ImGui_ImplFreeGLUT_InstallFuncs();
|
|
||||||
IMGUI_IMPL_API void ImGui_ImplFreeGLUT_Shutdown();
|
|
||||||
IMGUI_IMPL_API void ImGui_ImplFreeGLUT_NewFrame();
|
|
||||||
|
|
||||||
// You can call ImGui_ImplFreeGLUT_InstallFuncs() to get all those functions installed automatically,
|
|
||||||
// or call them yourself from your own GLUT handlers. We are using the same weird names as GLUT for consistency..
|
|
||||||
//---------------------------------------- GLUT name --------------------------------------------- Decent Name ---------
|
|
||||||
IMGUI_IMPL_API void ImGui_ImplFreeGLUT_ReshapeFunc(int w, int h); // ~ ResizeFunc
|
|
||||||
IMGUI_IMPL_API void ImGui_ImplFreeGLUT_MotionFunc(int x, int y); // ~ MouseMoveFunc
|
|
||||||
IMGUI_IMPL_API void ImGui_ImplFreeGLUT_MouseFunc(int button, int state, int x, int y); // ~ MouseButtonFunc
|
|
||||||
IMGUI_IMPL_API void ImGui_ImplFreeGLUT_MouseWheelFunc(int button, int dir, int x, int y); // ~ MouseWheelFunc
|
|
||||||
IMGUI_IMPL_API void ImGui_ImplFreeGLUT_KeyboardFunc(unsigned char c, int x, int y); // ~ CharPressedFunc
|
|
||||||
IMGUI_IMPL_API void ImGui_ImplFreeGLUT_KeyboardUpFunc(unsigned char c, int x, int y); // ~ CharReleasedFunc
|
|
||||||
IMGUI_IMPL_API void ImGui_ImplFreeGLUT_SpecialFunc(int key, int x, int y); // ~ KeyPressedFunc
|
|
||||||
IMGUI_IMPL_API void ImGui_ImplFreeGLUT_SpecialUpFunc(int key, int x, int y); // ~ KeyReleasedFunc
|
|
@ -1,7 +1,7 @@
|
|||||||
// dear imgui: Platform Binding for FreeGLUT
|
// dear imgui: Platform Binding for GLUT/FreeGLUT
|
||||||
// This needs to be used along with a Renderer (e.g. OpenGL2)
|
// This needs to be used along with a Renderer (e.g. OpenGL2)
|
||||||
|
|
||||||
// !!! GLUT IS OBSOLETE SOFTWARE. Using GLUT is not recommended unless you really miss the 90's. !!!
|
// !!! GLUT/FreeGLUT IS OBSOLETE SOFTWARE. Using GLUT is not recommended unless you really miss the 90's. !!!
|
||||||
// !!! If someone or something is teaching you GLUT in 2019, you are being abused. Please show some resistance. !!!
|
// !!! If someone or something is teaching you GLUT in 2019, you are being abused. Please show some resistance. !!!
|
||||||
|
|
||||||
// Issues:
|
// Issues:
|
||||||
@ -15,13 +15,18 @@
|
|||||||
|
|
||||||
// CHANGELOG
|
// CHANGELOG
|
||||||
// (minor and older changes stripped away, please see git history for details)
|
// (minor and older changes stripped away, please see git history for details)
|
||||||
|
// 2019-04-03: Misc: Renamed imgui_impl_freeglut.cpp/.h to imgui_impl_glut.cpp/.h.
|
||||||
// 2019-03-25: Misc: Made io.DeltaTime always above zero.
|
// 2019-03-25: Misc: Made io.DeltaTime always above zero.
|
||||||
// 2018-11-30: Misc: Setting up io.BackendPlatformName so it can be displayed in the About Window.
|
// 2018-11-30: Misc: Setting up io.BackendPlatformName so it can be displayed in the About Window.
|
||||||
// 2018-03-22: Added FreeGLUT Platform binding.
|
// 2018-03-22: Added GLUT Platform binding.
|
||||||
|
|
||||||
#include "imgui.h"
|
#include "imgui.h"
|
||||||
#include "imgui_impl_freeglut.h"
|
#include "imgui_impl_glut.h"
|
||||||
#include <GL/freeglut.h>
|
#ifdef __APPLE__
|
||||||
|
#include <GLUT/glut.h>
|
||||||
|
#else
|
||||||
|
#include <GL/freeglut.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#pragma warning (disable: 4505) // unreferenced local function has been removed (stb stuff)
|
#pragma warning (disable: 4505) // unreferenced local function has been removed (stb stuff)
|
||||||
@ -29,10 +34,10 @@
|
|||||||
|
|
||||||
static int g_Time = 0; // Current time, in milliseconds
|
static int g_Time = 0; // Current time, in milliseconds
|
||||||
|
|
||||||
bool ImGui_ImplFreeGLUT_Init()
|
bool ImGui_ImplGLUT_Init()
|
||||||
{
|
{
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
io.BackendPlatformName ="imgui_impl_freeglut";
|
io.BackendPlatformName ="imgui_impl_glut";
|
||||||
|
|
||||||
g_Time = 0;
|
g_Time = 0;
|
||||||
|
|
||||||
@ -62,24 +67,26 @@ bool ImGui_ImplFreeGLUT_Init()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui_ImplFreeGLUT_InstallFuncs()
|
void ImGui_ImplGLUT_InstallFuncs()
|
||||||
{
|
{
|
||||||
glutReshapeFunc(ImGui_ImplFreeGLUT_ReshapeFunc);
|
glutReshapeFunc(ImGui_ImplGLUT_ReshapeFunc);
|
||||||
glutMotionFunc(ImGui_ImplFreeGLUT_MotionFunc);
|
glutMotionFunc(ImGui_ImplGLUT_MotionFunc);
|
||||||
glutPassiveMotionFunc(ImGui_ImplFreeGLUT_MotionFunc);
|
glutPassiveMotionFunc(ImGui_ImplGLUT_MotionFunc);
|
||||||
glutMouseFunc(ImGui_ImplFreeGLUT_MouseFunc);
|
glutMouseFunc(ImGui_ImplGLUT_MouseFunc);
|
||||||
glutMouseWheelFunc(ImGui_ImplFreeGLUT_MouseWheelFunc);
|
#ifdef __FREEGLUT_EXT_H__
|
||||||
glutKeyboardFunc(ImGui_ImplFreeGLUT_KeyboardFunc);
|
glutMouseWheelFunc(ImGui_ImplGLUT_MouseWheelFunc);
|
||||||
glutKeyboardUpFunc(ImGui_ImplFreeGLUT_KeyboardUpFunc);
|
#endif
|
||||||
glutSpecialFunc(ImGui_ImplFreeGLUT_SpecialFunc);
|
glutKeyboardFunc(ImGui_ImplGLUT_KeyboardFunc);
|
||||||
glutSpecialUpFunc(ImGui_ImplFreeGLUT_SpecialUpFunc);
|
glutKeyboardUpFunc(ImGui_ImplGLUT_KeyboardUpFunc);
|
||||||
|
glutSpecialFunc(ImGui_ImplGLUT_SpecialFunc);
|
||||||
|
glutSpecialUpFunc(ImGui_ImplGLUT_SpecialUpFunc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui_ImplFreeGLUT_Shutdown()
|
void ImGui_ImplGLUT_Shutdown()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui_ImplFreeGLUT_NewFrame()
|
void ImGui_ImplGLUT_NewFrame()
|
||||||
{
|
{
|
||||||
// Setup time step
|
// Setup time step
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
@ -94,7 +101,7 @@ void ImGui_ImplFreeGLUT_NewFrame()
|
|||||||
ImGui::NewFrame();
|
ImGui::NewFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ImGui_ImplFreeGLUT_UpdateKeyboardMods()
|
static void ImGui_ImplGLUT_UpdateKeyboardMods()
|
||||||
{
|
{
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
int mods = glutGetModifiers();
|
int mods = glutGetModifiers();
|
||||||
@ -103,7 +110,7 @@ static void ImGui_ImplFreeGLUT_UpdateKeyboardMods()
|
|||||||
io.KeyAlt = (mods & GLUT_ACTIVE_ALT) != 0;
|
io.KeyAlt = (mods & GLUT_ACTIVE_ALT) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui_ImplFreeGLUT_KeyboardFunc(unsigned char c, int x, int y)
|
void ImGui_ImplGLUT_KeyboardFunc(unsigned char c, int x, int y)
|
||||||
{
|
{
|
||||||
// Send character to imgui
|
// Send character to imgui
|
||||||
//printf("char_down_func %d '%c'\n", c, c);
|
//printf("char_down_func %d '%c'\n", c, c);
|
||||||
@ -121,11 +128,11 @@ void ImGui_ImplFreeGLUT_KeyboardFunc(unsigned char c, int x, int y)
|
|||||||
io.KeysDown[c] = io.KeysDown[c - 'A' + 'a'] = true;
|
io.KeysDown[c] = io.KeysDown[c - 'A' + 'a'] = true;
|
||||||
else
|
else
|
||||||
io.KeysDown[c] = true;
|
io.KeysDown[c] = true;
|
||||||
ImGui_ImplFreeGLUT_UpdateKeyboardMods();
|
ImGui_ImplGLUT_UpdateKeyboardMods();
|
||||||
(void)x; (void)y; // Unused
|
(void)x; (void)y; // Unused
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui_ImplFreeGLUT_KeyboardUpFunc(unsigned char c, int x, int y)
|
void ImGui_ImplGLUT_KeyboardUpFunc(unsigned char c, int x, int y)
|
||||||
{
|
{
|
||||||
//printf("char_up_func %d '%c'\n", c, c);
|
//printf("char_up_func %d '%c'\n", c, c);
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
@ -137,31 +144,31 @@ void ImGui_ImplFreeGLUT_KeyboardUpFunc(unsigned char c, int x, int y)
|
|||||||
io.KeysDown[c] = io.KeysDown[c - 'A' + 'a'] = false;
|
io.KeysDown[c] = io.KeysDown[c - 'A' + 'a'] = false;
|
||||||
else
|
else
|
||||||
io.KeysDown[c] = false;
|
io.KeysDown[c] = false;
|
||||||
ImGui_ImplFreeGLUT_UpdateKeyboardMods();
|
ImGui_ImplGLUT_UpdateKeyboardMods();
|
||||||
(void)x; (void)y; // Unused
|
(void)x; (void)y; // Unused
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui_ImplFreeGLUT_SpecialFunc(int key, int x, int y)
|
void ImGui_ImplGLUT_SpecialFunc(int key, int x, int y)
|
||||||
{
|
{
|
||||||
//printf("key_down_func %d\n", key);
|
//printf("key_down_func %d\n", key);
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
if (key + 256 < IM_ARRAYSIZE(io.KeysDown))
|
if (key + 256 < IM_ARRAYSIZE(io.KeysDown))
|
||||||
io.KeysDown[key + 256] = true;
|
io.KeysDown[key + 256] = true;
|
||||||
ImGui_ImplFreeGLUT_UpdateKeyboardMods();
|
ImGui_ImplGLUT_UpdateKeyboardMods();
|
||||||
(void)x; (void)y; // Unused
|
(void)x; (void)y; // Unused
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui_ImplFreeGLUT_SpecialUpFunc(int key, int x, int y)
|
void ImGui_ImplGLUT_SpecialUpFunc(int key, int x, int y)
|
||||||
{
|
{
|
||||||
//printf("key_up_func %d\n", key);
|
//printf("key_up_func %d\n", key);
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
if (key + 256 < IM_ARRAYSIZE(io.KeysDown))
|
if (key + 256 < IM_ARRAYSIZE(io.KeysDown))
|
||||||
io.KeysDown[key + 256] = false;
|
io.KeysDown[key + 256] = false;
|
||||||
ImGui_ImplFreeGLUT_UpdateKeyboardMods();
|
ImGui_ImplGLUT_UpdateKeyboardMods();
|
||||||
(void)x; (void)y; // Unused
|
(void)x; (void)y; // Unused
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui_ImplFreeGLUT_MouseFunc(int glut_button, int state, int x, int y)
|
void ImGui_ImplGLUT_MouseFunc(int glut_button, int state, int x, int y)
|
||||||
{
|
{
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
io.MousePos = ImVec2((float)x, (float)y);
|
io.MousePos = ImVec2((float)x, (float)y);
|
||||||
@ -175,7 +182,8 @@ void ImGui_ImplFreeGLUT_MouseFunc(int glut_button, int state, int x, int y)
|
|||||||
io.MouseDown[button] = false;
|
io.MouseDown[button] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui_ImplFreeGLUT_MouseWheelFunc(int button, int dir, int x, int y)
|
#ifdef __FREEGLUT_EXT_H__
|
||||||
|
void ImGui_ImplGLUT_MouseWheelFunc(int button, int dir, int x, int y)
|
||||||
{
|
{
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
io.MousePos = ImVec2((float)x, (float)y);
|
io.MousePos = ImVec2((float)x, (float)y);
|
||||||
@ -185,14 +193,15 @@ void ImGui_ImplFreeGLUT_MouseWheelFunc(int button, int dir, int x, int y)
|
|||||||
io.MouseWheel -= 1.0;
|
io.MouseWheel -= 1.0;
|
||||||
(void)button; // Unused
|
(void)button; // Unused
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void ImGui_ImplFreeGLUT_ReshapeFunc(int w, int h)
|
void ImGui_ImplGLUT_ReshapeFunc(int w, int h)
|
||||||
{
|
{
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
io.DisplaySize = ImVec2((float)w, (float)h);
|
io.DisplaySize = ImVec2((float)w, (float)h);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui_ImplFreeGLUT_MotionFunc(int x, int y)
|
void ImGui_ImplGLUT_MotionFunc(int x, int y)
|
||||||
{
|
{
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
io.MousePos = ImVec2((float)x, (float)y);
|
io.MousePos = ImVec2((float)x, (float)y);
|
33
examples/imgui_impl_glut.h
Normal file
33
examples/imgui_impl_glut.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
// dear imgui: Platform Binding for GLUT/FreeGLUT
|
||||||
|
// This needs to be used along with a Renderer (e.g. OpenGL2)
|
||||||
|
|
||||||
|
// !!! GLUT/FreeGLUT IS OBSOLETE SOFTWARE. Using GLUT is not recommended unless you really miss the 90's. !!!
|
||||||
|
// !!! If someone or something is teaching you GLUT in 2019, you are being abused. Please show some resistance. !!!
|
||||||
|
|
||||||
|
// Issues:
|
||||||
|
// [ ] Platform: GLUT is unable to distinguish e.g. Backspace from CTRL+H or TAB from CTRL+I
|
||||||
|
// [ ] Platform: Missing clipboard support (not supported by Glut).
|
||||||
|
// [ ] Platform: Missing gamepad support.
|
||||||
|
|
||||||
|
// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this.
|
||||||
|
// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp.
|
||||||
|
// https://github.com/ocornut/imgui
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
IMGUI_IMPL_API bool ImGui_ImplGLUT_Init();
|
||||||
|
IMGUI_IMPL_API void ImGui_ImplGLUT_InstallFuncs();
|
||||||
|
IMGUI_IMPL_API void ImGui_ImplGLUT_Shutdown();
|
||||||
|
IMGUI_IMPL_API void ImGui_ImplGLUT_NewFrame();
|
||||||
|
|
||||||
|
// You can call ImGui_ImplGLUT_InstallFuncs() to get all those functions installed automatically,
|
||||||
|
// or call them yourself from your own GLUT handlers. We are using the same weird names as GLUT for consistency..
|
||||||
|
//---------------------------------------- GLUT name --------------------------------------------- Decent Name ---------
|
||||||
|
IMGUI_IMPL_API void ImGui_ImplGLUT_ReshapeFunc(int w, int h); // ~ ResizeFunc
|
||||||
|
IMGUI_IMPL_API void ImGui_ImplGLUT_MotionFunc(int x, int y); // ~ MouseMoveFunc
|
||||||
|
IMGUI_IMPL_API void ImGui_ImplGLUT_MouseFunc(int button, int state, int x, int y); // ~ MouseButtonFunc
|
||||||
|
IMGUI_IMPL_API void ImGui_ImplGLUT_MouseWheelFunc(int button, int dir, int x, int y); // ~ MouseWheelFunc
|
||||||
|
IMGUI_IMPL_API void ImGui_ImplGLUT_KeyboardFunc(unsigned char c, int x, int y); // ~ CharPressedFunc
|
||||||
|
IMGUI_IMPL_API void ImGui_ImplGLUT_KeyboardUpFunc(unsigned char c, int x, int y); // ~ CharReleasedFunc
|
||||||
|
IMGUI_IMPL_API void ImGui_ImplGLUT_SpecialFunc(int key, int x, int y); // ~ KeyPressedFunc
|
||||||
|
IMGUI_IMPL_API void ImGui_ImplGLUT_SpecialUpFunc(int key, int x, int y); // ~ KeyReleasedFunc
|
@ -20,7 +20,7 @@
|
|||||||
#include "imgui_impl_metal.h"
|
#include "imgui_impl_metal.h"
|
||||||
|
|
||||||
#import <Metal/Metal.h>
|
#import <Metal/Metal.h>
|
||||||
// #import <QuartzCore/CAMetalLayer.h> // Not suported in XCode 9.2. Maybe a macro to detect the SDK version can be used (something like #if MACOS_SDK >= 10.13 ...)
|
// #import <QuartzCore/CAMetalLayer.h> // Not supported in XCode 9.2. Maybe a macro to detect the SDK version can be used (something like #if MACOS_SDK >= 10.13 ...)
|
||||||
#import <simd/simd.h>
|
#import <simd/simd.h>
|
||||||
|
|
||||||
#pragma mark - Support classes
|
#pragma mark - Support classes
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
// CHANGELOG
|
// CHANGELOG
|
||||||
// (minor and older changes stripped away, please see git history for details)
|
// (minor and older changes stripped away, please see git history for details)
|
||||||
|
// 2019-04-04: Vulkan: Avoid passing negative coordinates to vkCmdSetScissor, which debug validation layers do not like.
|
||||||
// 2019-04-01: Vulkan: Support for 32-bit index buffer (#define ImDrawIdx unsigned int).
|
// 2019-04-01: Vulkan: Support for 32-bit index buffer (#define ImDrawIdx unsigned int).
|
||||||
// 2019-02-16: Vulkan: Viewport and clipping rectangles correctly using draw_data->FramebufferScale to allow retina display.
|
// 2019-02-16: Vulkan: Viewport and clipping rectangles correctly using draw_data->FramebufferScale to allow retina display.
|
||||||
// 2018-11-30: Misc: Setting up io.BackendRendererName so it can be displayed in the About Window.
|
// 2018-11-30: Misc: Setting up io.BackendRendererName so it can be displayed in the About Window.
|
||||||
@ -81,6 +82,23 @@ static void ImGui_ImplVulkan_ShutdownPlatformInterface();
|
|||||||
|
|
||||||
// glsl_shader.vert, compiled with:
|
// glsl_shader.vert, compiled with:
|
||||||
// # glslangValidator -V -x -o glsl_shader.vert.u32 glsl_shader.vert
|
// # glslangValidator -V -x -o glsl_shader.vert.u32 glsl_shader.vert
|
||||||
|
/*
|
||||||
|
#version 450 core
|
||||||
|
layout(location = 0) in vec2 aPos;
|
||||||
|
layout(location = 1) in vec2 aUV;
|
||||||
|
layout(location = 2) in vec4 aColor;
|
||||||
|
layout(push_constant) uniform uPushConstant { vec2 uScale; vec2 uTranslate; } pc;
|
||||||
|
|
||||||
|
out gl_PerVertex { vec4 gl_Position; };
|
||||||
|
layout(location = 0) out struct { vec4 Color; vec2 UV; } Out;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
Out.Color = aColor;
|
||||||
|
Out.UV = aUV;
|
||||||
|
gl_Position = vec4(aPos * pc.uScale + pc.uTranslate, 0, 1);
|
||||||
|
}
|
||||||
|
*/
|
||||||
static uint32_t __glsl_shader_vert_spv[] =
|
static uint32_t __glsl_shader_vert_spv[] =
|
||||||
{
|
{
|
||||||
0x07230203,0x00010000,0x00080001,0x0000002e,0x00000000,0x00020011,0x00000001,0x0006000b,
|
0x07230203,0x00010000,0x00080001,0x0000002e,0x00000000,0x00020011,0x00000001,0x0006000b,
|
||||||
@ -128,6 +146,16 @@ static uint32_t __glsl_shader_vert_spv[] =
|
|||||||
|
|
||||||
// glsl_shader.frag, compiled with:
|
// glsl_shader.frag, compiled with:
|
||||||
// # glslangValidator -V -x -o glsl_shader.frag.u32 glsl_shader.frag
|
// # glslangValidator -V -x -o glsl_shader.frag.u32 glsl_shader.frag
|
||||||
|
/*
|
||||||
|
#version 450 core
|
||||||
|
layout(location = 0) out vec4 fColor;
|
||||||
|
layout(set=0, binding=0) uniform sampler2D sTexture;
|
||||||
|
layout(location = 0) in struct { vec4 Color; vec2 UV; } In;
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
fColor = In.Color * texture(sTexture, In.UV.st);
|
||||||
|
}
|
||||||
|
*/
|
||||||
static uint32_t __glsl_shader_frag_spv[] =
|
static uint32_t __glsl_shader_frag_spv[] =
|
||||||
{
|
{
|
||||||
0x07230203,0x00010000,0x00080001,0x0000001e,0x00000000,0x00020011,0x00000001,0x0006000b,
|
0x07230203,0x00010000,0x00080001,0x0000001e,0x00000000,0x00020011,0x00000001,0x0006000b,
|
||||||
@ -325,6 +353,12 @@ void ImGui_ImplVulkan_RenderDrawData(ImDrawData* draw_data, VkCommandBuffer comm
|
|||||||
|
|
||||||
if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0f && clip_rect.w >= 0.0f)
|
if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0f && clip_rect.w >= 0.0f)
|
||||||
{
|
{
|
||||||
|
// Negative offsets are illegal for vkCmdSetScissor
|
||||||
|
if (clip_rect.x < 0.0f)
|
||||||
|
clip_rect.x = 0.0f;
|
||||||
|
if (clip_rect.y < 0.0f)
|
||||||
|
clip_rect.y = 0.0f;
|
||||||
|
|
||||||
// Apply scissor/clipping rectangle
|
// Apply scissor/clipping rectangle
|
||||||
VkRect2D scissor;
|
VkRect2D scissor;
|
||||||
scissor.offset.x = (int32_t)(clip_rect.x);
|
scissor.offset.x = (int32_t)(clip_rect.x);
|
||||||
@ -930,7 +964,7 @@ int ImGui_ImplVulkanH_GetMinImageCountFromPresentMode(VkPresentModeKHR present_m
|
|||||||
|
|
||||||
void ImGui_ImplVulkanH_CreateWindowDataSwapChainAndFramebuffer(VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_WindowData* wd, const VkAllocationCallbacks* allocator, int w, int h)
|
void ImGui_ImplVulkanH_CreateWindowDataSwapChainAndFramebuffer(VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_WindowData* wd, const VkAllocationCallbacks* allocator, int w, int h)
|
||||||
{
|
{
|
||||||
uint32_t min_image_count = 2; // FIXME: this should become a function parameter
|
uint32_t min_image_count = 2; // FIXME: this should become a function parameter
|
||||||
|
|
||||||
VkResult err;
|
VkResult err;
|
||||||
VkSwapchainKHR old_swapchain = wd->Swapchain;
|
VkSwapchainKHR old_swapchain = wd->Swapchain;
|
||||||
@ -958,7 +992,7 @@ void ImGui_ImplVulkanH_CreateWindowDataSwapChainAndFramebuffer(VkPhysicalDevice
|
|||||||
VkSwapchainCreateInfoKHR info = {};
|
VkSwapchainCreateInfoKHR info = {};
|
||||||
info.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
|
info.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
|
||||||
info.surface = wd->Surface;
|
info.surface = wd->Surface;
|
||||||
info.minImageCount = min_image_count;
|
info.minImageCount = min_image_count;
|
||||||
info.imageFormat = wd->SurfaceFormat.format;
|
info.imageFormat = wd->SurfaceFormat.format;
|
||||||
info.imageColorSpace = wd->SurfaceFormat.colorSpace;
|
info.imageColorSpace = wd->SurfaceFormat.colorSpace;
|
||||||
info.imageArrayLayers = 1;
|
info.imageArrayLayers = 1;
|
||||||
@ -973,9 +1007,9 @@ void ImGui_ImplVulkanH_CreateWindowDataSwapChainAndFramebuffer(VkPhysicalDevice
|
|||||||
err = vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physical_device, wd->Surface, &cap);
|
err = vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physical_device, wd->Surface, &cap);
|
||||||
check_vk_result(err);
|
check_vk_result(err);
|
||||||
if (info.minImageCount < cap.minImageCount)
|
if (info.minImageCount < cap.minImageCount)
|
||||||
info.minImageCount = cap.minImageCount;
|
info.minImageCount = cap.minImageCount;
|
||||||
else if (cap.maxImageCount != 0 && info.minImageCount > cap.maxImageCount)
|
else if (cap.maxImageCount != 0 && info.minImageCount > cap.maxImageCount)
|
||||||
info.minImageCount = cap.maxImageCount;
|
info.minImageCount = cap.maxImageCount;
|
||||||
|
|
||||||
if (cap.currentExtent.width == 0xffffffff)
|
if (cap.currentExtent.width == 0xffffffff)
|
||||||
{
|
{
|
||||||
|
@ -47,6 +47,7 @@ IMGUI_IMPL_API void ImGui_ImplVulkan_InvalidateDeviceObjects();
|
|||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// Internal / Miscellaneous Vulkan Helpers
|
// Internal / Miscellaneous Vulkan Helpers
|
||||||
|
// (Used by example's main.cpp. Used by multi-viewport features. Probably NOT used by your own app.)
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// You probably do NOT need to use or care about those functions.
|
// You probably do NOT need to use or care about those functions.
|
||||||
// Those functions only exist because:
|
// Those functions only exist because:
|
||||||
@ -70,6 +71,7 @@ IMGUI_IMPL_API VkPresentModeKHR ImGui_ImplVulkanH_SelectPresentMode(VkPhysic
|
|||||||
IMGUI_IMPL_API int ImGui_ImplVulkanH_GetMinImageCountFromPresentMode(VkPresentModeKHR present_mode);
|
IMGUI_IMPL_API int ImGui_ImplVulkanH_GetMinImageCountFromPresentMode(VkPresentModeKHR present_mode);
|
||||||
|
|
||||||
// Helper structure to hold the data needed by one rendering frame
|
// Helper structure to hold the data needed by one rendering frame
|
||||||
|
// (Used by example's main.cpp. Used by multi-viewport features. Probably NOT used by your own app.)
|
||||||
struct ImGui_ImplVulkanH_FrameData
|
struct ImGui_ImplVulkanH_FrameData
|
||||||
{
|
{
|
||||||
uint32_t BackbufferIndex; // Keep track of recently rendered swapchain frame indices
|
uint32_t BackbufferIndex; // Keep track of recently rendered swapchain frame indices
|
||||||
@ -83,6 +85,7 @@ struct ImGui_ImplVulkanH_FrameData
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Helper structure to hold the data needed by one rendering context into one OS window
|
// Helper structure to hold the data needed by one rendering context into one OS window
|
||||||
|
// (Used by example's main.cpp. Used by multi-viewport features. Probably NOT used by your own app.)
|
||||||
struct ImGui_ImplVulkanH_WindowData
|
struct ImGui_ImplVulkanH_WindowData
|
||||||
{
|
{
|
||||||
int Width;
|
int Width;
|
||||||
|
@ -1370,7 +1370,7 @@ const char* ImStrchrRange(const char* str, const char* str_end, char c)
|
|||||||
|
|
||||||
int ImStrlenW(const ImWchar* str)
|
int ImStrlenW(const ImWchar* str)
|
||||||
{
|
{
|
||||||
//return (int)wcslen((const wchar_t*)str); // FIXME-OPT: Could use this when wchar_t are 16-bits
|
//return (int)wcslen((const wchar_t*)str); // FIXME-OPT: Could use this when wchar_t are 16-bits
|
||||||
int n = 0;
|
int n = 0;
|
||||||
while (*str++) n++;
|
while (*str++) n++;
|
||||||
return n;
|
return n;
|
||||||
|
Loading…
Reference in New Issue
Block a user