|
@@ -1,4 +1,4 @@
|
|
|
-// dear imgui, v1.89.8
|
|
|
+// dear imgui, v1.89.9 WIP
|
|
|
// (demo code)
|
|
|
|
|
|
// Help:
|
|
@@ -95,6 +95,9 @@ Index of this file:
|
|
|
#include <stdio.h> // vsnprintf, sscanf, printf
|
|
|
#include <stdlib.h> // NULL, malloc, free, atoi
|
|
|
#include <stdint.h> // intptr_t
|
|
|
+#if !defined(_MSC_VER) || _MSC_VER >= 1800
|
|
|
+#include <inttypes.h> // PRId64/PRIu64, not avail in some MinGW headers.
|
|
|
+#endif
|
|
|
|
|
|
// Visual Studio warnings
|
|
|
#ifdef _MSC_VER
|
|
@@ -143,14 +146,13 @@ Index of this file:
|
|
|
#define vsnprintf _vsnprintf
|
|
|
#endif
|
|
|
|
|
|
-// Format specifiers, printing 64-bit hasn't been decently standardized...
|
|
|
-// In a real application you should be using PRId64 and PRIu64 from <inttypes.h> (non-windows) and on Windows define them yourself.
|
|
|
-#ifdef _MSC_VER
|
|
|
-#define IM_PRId64 "I64d"
|
|
|
-#define IM_PRIu64 "I64u"
|
|
|
-#else
|
|
|
-#define IM_PRId64 "lld"
|
|
|
-#define IM_PRIu64 "llu"
|
|
|
+// Format specifiers for 64-bit values (hasn't been decently standardized before VS2013)
|
|
|
+#if !defined(PRId64) && defined(_MSC_VER)
|
|
|
+#define PRId64 "I64d"
|
|
|
+#define PRIu64 "I64u"
|
|
|
+#elif !defined(PRId64)
|
|
|
+#define PRId64 "lld"
|
|
|
+#define PRIu64 "llu"
|
|
|
#endif
|
|
|
|
|
|
// Helpers macros
|
|
@@ -2203,12 +2205,12 @@ static void ShowDemoWindowWidgets()
|
|
|
ImGui::SliderScalar("slider u32 low", ImGuiDataType_U32, &u32_v, &u32_zero, &u32_fifty,"%u");
|
|
|
ImGui::SliderScalar("slider u32 high", ImGuiDataType_U32, &u32_v, &u32_hi_a, &u32_hi_b, "%u");
|
|
|
ImGui::SliderScalar("slider u32 full", ImGuiDataType_U32, &u32_v, &u32_min, &u32_max, "%u");
|
|
|
- ImGui::SliderScalar("slider s64 low", ImGuiDataType_S64, &s64_v, &s64_zero, &s64_fifty,"%" IM_PRId64);
|
|
|
- ImGui::SliderScalar("slider s64 high", ImGuiDataType_S64, &s64_v, &s64_hi_a, &s64_hi_b, "%" IM_PRId64);
|
|
|
- ImGui::SliderScalar("slider s64 full", ImGuiDataType_S64, &s64_v, &s64_min, &s64_max, "%" IM_PRId64);
|
|
|
- ImGui::SliderScalar("slider u64 low", ImGuiDataType_U64, &u64_v, &u64_zero, &u64_fifty,"%" IM_PRIu64 " ms");
|
|
|
- ImGui::SliderScalar("slider u64 high", ImGuiDataType_U64, &u64_v, &u64_hi_a, &u64_hi_b, "%" IM_PRIu64 " ms");
|
|
|
- ImGui::SliderScalar("slider u64 full", ImGuiDataType_U64, &u64_v, &u64_min, &u64_max, "%" IM_PRIu64 " ms");
|
|
|
+ ImGui::SliderScalar("slider s64 low", ImGuiDataType_S64, &s64_v, &s64_zero, &s64_fifty,"%" PRId64);
|
|
|
+ ImGui::SliderScalar("slider s64 high", ImGuiDataType_S64, &s64_v, &s64_hi_a, &s64_hi_b, "%" PRId64);
|
|
|
+ ImGui::SliderScalar("slider s64 full", ImGuiDataType_S64, &s64_v, &s64_min, &s64_max, "%" PRId64);
|
|
|
+ ImGui::SliderScalar("slider u64 low", ImGuiDataType_U64, &u64_v, &u64_zero, &u64_fifty,"%" PRIu64 " ms");
|
|
|
+ ImGui::SliderScalar("slider u64 high", ImGuiDataType_U64, &u64_v, &u64_hi_a, &u64_hi_b, "%" PRIu64 " ms");
|
|
|
+ ImGui::SliderScalar("slider u64 full", ImGuiDataType_U64, &u64_v, &u64_min, &u64_max, "%" PRIu64 " ms");
|
|
|
ImGui::SliderScalar("slider float low", ImGuiDataType_Float, &f32_v, &f32_zero, &f32_one);
|
|
|
ImGui::SliderScalar("slider float low log", ImGuiDataType_Float, &f32_v, &f32_zero, &f32_one, "%.10f", ImGuiSliderFlags_Logarithmic);
|
|
|
ImGui::SliderScalar("slider float high", ImGuiDataType_Float, &f32_v, &f32_lo_a, &f32_hi_a, "%e");
|
|
@@ -2221,8 +2223,8 @@ static void ShowDemoWindowWidgets()
|
|
|
ImGui::SliderScalar("slider u8 reverse", ImGuiDataType_U8, &u8_v, &u8_max, &u8_min, "%u");
|
|
|
ImGui::SliderScalar("slider s32 reverse", ImGuiDataType_S32, &s32_v, &s32_fifty, &s32_zero, "%d");
|
|
|
ImGui::SliderScalar("slider u32 reverse", ImGuiDataType_U32, &u32_v, &u32_fifty, &u32_zero, "%u");
|
|
|
- ImGui::SliderScalar("slider s64 reverse", ImGuiDataType_S64, &s64_v, &s64_fifty, &s64_zero, "%" IM_PRId64);
|
|
|
- ImGui::SliderScalar("slider u64 reverse", ImGuiDataType_U64, &u64_v, &u64_fifty, &u64_zero, "%" IM_PRIu64 " ms");
|
|
|
+ ImGui::SliderScalar("slider s64 reverse", ImGuiDataType_S64, &s64_v, &s64_fifty, &s64_zero, "%" PRId64);
|
|
|
+ ImGui::SliderScalar("slider u64 reverse", ImGuiDataType_U64, &u64_v, &u64_fifty, &u64_zero, "%" PRIu64 " ms");
|
|
|
|
|
|
IMGUI_DEMO_MARKER("Widgets/Data Types/Inputs");
|
|
|
static bool inputs_step = true;
|
|
@@ -7967,6 +7969,43 @@ static void ShowExampleAppCustomRendering(bool* p_open)
|
|
|
ImGui::EndTabItem();
|
|
|
}
|
|
|
|
|
|
+ // Demonstrate out-of-order rendering via channels splitting
|
|
|
+ // We use functions in ImDrawList as each draw list contains a convenience splitter,
|
|
|
+ // but you can also instantiate your own ImDrawListSplitter if you need to nest them.
|
|
|
+ if (ImGui::BeginTabItem("Draw Channels"))
|
|
|
+ {
|
|
|
+ ImDrawList* draw_list = ImGui::GetWindowDrawList();
|
|
|
+ {
|
|
|
+ ImGui::Text("Blue shape is drawn first: appears in back");
|
|
|
+ ImGui::Text("Red shape is drawn after: appears in front");
|
|
|
+ ImVec2 p0 = ImGui::GetCursorScreenPos();
|
|
|
+ draw_list->AddRectFilled(ImVec2(p0.x, p0.y), ImVec2(p0.x + 50, p0.y + 50), IM_COL32(0, 0, 255, 255)); // Blue
|
|
|
+ draw_list->AddRectFilled(ImVec2(p0.x + 25, p0.y + 25), ImVec2(p0.x + 75, p0.y + 75), IM_COL32(255, 0, 0, 255)); // Red
|
|
|
+ ImGui::Dummy(ImVec2(75, 75));
|
|
|
+ }
|
|
|
+ ImGui::Separator();
|
|
|
+ {
|
|
|
+ ImGui::Text("Blue shape is drawn first, into channel 1: appears in front");
|
|
|
+ ImGui::Text("Red shape is drawn after, into channel 0: appears in back");
|
|
|
+ ImVec2 p1 = ImGui::GetCursorScreenPos();
|
|
|
+
|
|
|
+ // Create 2 channels and draw a Blue shape THEN a Red shape.
|
|
|
+ // You can create any number of channels. Tables API use 1 channel per column in order to better batch draw calls.
|
|
|
+ draw_list->ChannelsSplit(2);
|
|
|
+ draw_list->ChannelsSetCurrent(1);
|
|
|
+ draw_list->AddRectFilled(ImVec2(p1.x, p1.y), ImVec2(p1.x + 50, p1.y + 50), IM_COL32(0, 0, 255, 255)); // Blue
|
|
|
+ draw_list->ChannelsSetCurrent(0);
|
|
|
+ draw_list->AddRectFilled(ImVec2(p1.x + 25, p1.y + 25), ImVec2(p1.x + 75, p1.y + 75), IM_COL32(255, 0, 0, 255)); // Red
|
|
|
+
|
|
|
+ // Flatten/reorder channels. Red shape is in channel 0 and it appears below the Blue shape in channel 1.
|
|
|
+ // This works by copying draw indices only (vertices are not copied).
|
|
|
+ draw_list->ChannelsMerge();
|
|
|
+ ImGui::Dummy(ImVec2(75, 75));
|
|
|
+ ImGui::Text("After reordering, contents of channel 0 appears below channel 1.");
|
|
|
+ }
|
|
|
+ ImGui::EndTabItem();
|
|
|
+ }
|
|
|
+
|
|
|
ImGui::EndTabBar();
|
|
|
}
|
|
|
|