aboutsummaryrefslogtreecommitdiff
path: root/vendor/zgui/libs/imgui_test_engine/imgui_capture_tool.h
diff options
context:
space:
mode:
authorNic Gaffney <gaffney_nic@protonmail.com>2025-10-13 01:19:27 -0500
committerNic Gaffney <gaffney_nic@protonmail.com>2025-10-13 01:19:27 -0500
commit1f9b827badb2de4c4eaae11c0d02242ec90af7f6 (patch)
tree27acb295833e6eee730dd71f98db280d54c6a4ad /vendor/zgui/libs/imgui_test_engine/imgui_capture_tool.h
parentb5d0c1dcd751f4735d9f6b45c805300000c9d171 (diff)
downloadparticle-sim-1f9b827badb2de4c4eaae11c0d02242ec90af7f6.tar.gz
Updating to zig 0.15.1
Diffstat (limited to 'vendor/zgui/libs/imgui_test_engine/imgui_capture_tool.h')
-rw-r--r--vendor/zgui/libs/imgui_test_engine/imgui_capture_tool.h180
1 files changed, 0 insertions, 180 deletions
diff --git a/vendor/zgui/libs/imgui_test_engine/imgui_capture_tool.h b/vendor/zgui/libs/imgui_test_engine/imgui_capture_tool.h
deleted file mode 100644
index e5489c5..0000000
--- a/vendor/zgui/libs/imgui_test_engine/imgui_capture_tool.h
+++ /dev/null
@@ -1,180 +0,0 @@
-// dear imgui test engine
-// (screen/video capture tool)
-// This is usable as a standalone applet or controlled by the test engine.
-
-#pragma once
-
-#include "imgui_te_utils.h" // ImFuncPtr
-
-//-----------------------------------------------------------------------------
-// Forward declarations
-//-----------------------------------------------------------------------------
-
-// Our types
-struct ImGuiCaptureArgs; // Parameters for Capture
-struct ImGuiCaptureContext; // State of an active capture tool
-struct ImGuiCaptureImageBuf; // Simple helper to store an RGBA image in memory
-struct ImGuiCaptureToolUI; // Capture tool instance + UI window
-
-typedef unsigned int ImGuiCaptureFlags; // See enum: ImGuiCaptureFlags_
-
-// Capture function which needs to be provided by user application
-typedef bool (ImGuiScreenCaptureFunc)(ImGuiID viewport_id, int x, int y, int w, int h, unsigned int* pixels, void* user_data);
-
-// External types
-struct ImGuiWindow; // imgui.h
-
-//-----------------------------------------------------------------------------
-
-// [Internal]
-// Helper class for simple bitmap manipulation (not particularly efficient!)
-struct IMGUI_API ImGuiCaptureImageBuf
-{
- int Width;
- int Height;
- unsigned int* Data; // RGBA8
-
- ImGuiCaptureImageBuf() { Width = Height = 0; Data = NULL; }
- ~ImGuiCaptureImageBuf() { Clear(); }
-
- void Clear(); // Free allocated memory buffer if such exists.
- void CreateEmpty(int w, int h); // Reallocate buffer for pixel data and zero it.
- bool SaveFile(const char* filename); // Save pixel data to specified image file.
- void RemoveAlpha(); // Clear alpha channel from all pixels.
-};
-
-enum ImGuiCaptureFlags_ : unsigned int
-{
- ImGuiCaptureFlags_None = 0,
- ImGuiCaptureFlags_StitchAll = 1 << 0, // Capture entire window scroll area (by scrolling and taking multiple screenshot). Only works for a single window.
- ImGuiCaptureFlags_IncludeOtherWindows = 1 << 1, // Disable hiding other windows (when CaptureAddWindow has been called by default other windows are hidden)
- ImGuiCaptureFlags_IncludeTooltipsAndPopups = 1 << 2, // Expand capture area to automatically include visible popups and tooltips (use with ImGuiCaptureflags_HideOtherWindows)
- ImGuiCaptureFlags_HideMouseCursor = 1 << 3, // Hide render software mouse cursor during capture.
- ImGuiCaptureFlags_Instant = 1 << 4, // Perform capture on very same frame. Only works when capturing a rectangular region. Unsupported features: content stitching, window hiding, window relocation.
- ImGuiCaptureFlags_NoSave = 1 << 5 // Do not save output image.
-};
-
-// Defines input and output arguments for capture process.
-// When capturing from tests you can usually use the ImGuiTestContext::CaptureXXX() helpers functions.
-struct ImGuiCaptureArgs
-{
- // [Input]
- ImGuiCaptureFlags InFlags = 0; // Flags for customizing behavior of screenshot tool.
- ImVector<ImGuiWindow*> InCaptureWindows; // Windows to capture. All other windows will be hidden. May be used with InCaptureRect to capture only some windows in specified rect.
- ImRect InCaptureRect; // Screen rect to capture. Does not include padding.
- float InPadding = 16.0f; // Extra padding at the edges of the screenshot. Ensure that there is available space around capture rect horizontally, also vertically if ImGuiCaptureFlags_StitchFullContents is not used.
- char InOutputFile[256] = ""; // Output will be saved to a file if InOutputImageBuf is NULL.
- ImGuiCaptureImageBuf* InOutputImageBuf = NULL; // _OR_ Output will be saved to image buffer if specified.
- int InRecordFPSTarget = 30; // FPS target for recording videos.
- int InSizeAlign = 0; // Resolution alignment (0 = auto, 1 = no alignment, >= 2 = align width/height to be multiple of given value)
-
- // [Output]
- ImVec2 OutImageSize; // Produced image size.
-};
-
-enum ImGuiCaptureStatus
-{
- ImGuiCaptureStatus_InProgress,
- ImGuiCaptureStatus_Done,
- ImGuiCaptureStatus_Error
-};
-
-struct ImGuiCaptureWindowData
-{
- ImGuiWindow* Window;
- ImRect BackupRect;
- ImVec2 PosDuringCapture;
-};
-
-// Implements functionality for capturing images
-struct IMGUI_API ImGuiCaptureContext
-{
- // IO
- ImFuncPtr(ImGuiScreenCaptureFunc) ScreenCaptureFunc = NULL; // Graphics backend specific function that captures specified portion of framebuffer and writes RGBA data to `pixels` buffer.
- void* ScreenCaptureUserData = NULL; // Custom user pointer which is passed to ScreenCaptureFunc. (Optional)
- char* VideoCaptureEncoderPath = NULL; // Video encoder path (not owned, stored externally).
- int VideoCaptureEncoderPathSize = 0; // Optional. Set in order to edit this parameter from UI.
- char* VideoCaptureEncoderParams = NULL; // Video encoder params (not owned, stored externally).
- int VideoCaptureEncoderParamsSize = 0; // Optional. Set in order to edit this parameter from UI.
- char* GifCaptureEncoderParams = NULL; // Video encoder params for GIF output (not owned, stored externally).
- int GifCaptureEncoderParamsSize = 0; // Optional. Set in order to edit this parameter from UI.
-
- // [Internal]
- ImRect _CaptureRect; // Viewport rect that is being captured.
- ImRect _CapturedWindowRect; // Top-left corner of region that covers all windows included in capture. This is not same as _CaptureRect.Min when capturing explicitly specified rect.
- int _ChunkNo = 0; // Number of chunk that is being captured when capture spans multiple frames.
- int _FrameNo = 0; // Frame number during capture process that spans multiple frames.
- ImVec2 _MouseRelativeToWindowPos; // Mouse cursor position relative to captured window (when _StitchAll is in use).
- ImGuiWindow* _HoveredWindow = NULL; // Window which was hovered at capture start.
- ImGuiCaptureImageBuf _CaptureBuf; // Output image buffer.
- const ImGuiCaptureArgs* _CaptureArgs = NULL; // Current capture args. Set only if capture is in progress.
- ImVector<ImGuiCaptureWindowData> _WindowsData; // Backup windows that will have their rect modified and restored. args->InCaptureWindows can not be used because popups may get closed during capture and no longer appear in that list.
-
- // [Internal] Video recording
- bool _VideoRecording = false; // Flag indicating that video recording is in progress.
- double _VideoLastFrameTime = 0; // Time when last video frame was recorded.
- FILE* _VideoEncoderPipe = NULL; // File writing to stdin of video encoder process.
-
- // [Internal] Backups
- bool _BackupMouseDrawCursor = false; // Initial value of g.IO.MouseDrawCursor
- ImVec2 _BackupDisplayWindowPadding; // Backup padding. We set it to {0, 0} during capture.
- ImVec2 _BackupDisplaySafeAreaPadding; // Backup padding. We set it to {0, 0} during capture.
-
- //-------------------------------------------------------------------------
- // Functions
- //-------------------------------------------------------------------------
-
- ImGuiCaptureContext(ImGuiScreenCaptureFunc capture_func = NULL) { ScreenCaptureFunc = capture_func; _MouseRelativeToWindowPos = ImVec2(-FLT_MAX, -FLT_MAX); }
-
- // These functions should be called from appropriate context hooks. See ImGui::AddContextHook() for more info.
- // (ImGuiTestEngine automatically calls that for you, so this only apply to independently created instance)
- void PreNewFrame();
- void PreRender();
- void PostRender();
-
- // Update capturing. If this function returns true then it should be called again with same arguments on the next frame.
- ImGuiCaptureStatus CaptureUpdate(ImGuiCaptureArgs* args);
- void RestoreBackedUpData();
- void ClearState();
-
- // Begin video capture. Call CaptureUpdate() every frame afterwards until it returns false.
- void BeginVideoCapture(ImGuiCaptureArgs* args);
- void EndVideoCapture();
- bool IsCapturingVideo();
- bool IsCapturing();
-};
-
-//-----------------------------------------------------------------------------
-// ImGuiCaptureToolUI
-//-----------------------------------------------------------------------------
-
-// Implements UI for capturing images
-// (when using ImGuiTestEngine scripting API you may not need to use this at all)
-struct IMGUI_API ImGuiCaptureToolUI
-{
- float SnapGridSize = 32.0f; // Size of the grid cell for "snap to grid" functionality.
- char OutputLastFilename[256] = ""; // File name of last captured file.
- char* VideoCaptureExtension = NULL; // Video file extension (e.g. ".gif" or ".mp4")
- int VideoCaptureExtensionSize = 0; // Optional. Set in order to edit this parameter from UI.
-
- ImGuiCaptureArgs _CaptureArgs; // Capture args
- bool _StateIsPickingWindow = false;
- bool _StateIsCapturing = false;
- ImVector<ImGuiID> _SelectedWindows;
- char _OutputFileTemplate[256] = ""; //
- int _FileCounter = 0; // Counter which may be appended to file name when saving. By default, counting starts from 1. When done this field holds number of saved files.
-
- // Public
- ImGuiCaptureToolUI();
- void ShowCaptureToolWindow(ImGuiCaptureContext* context, bool* p_open = NULL); // Render a capture tool window with various options and utilities.
-
- // [Internal]
- void _CaptureWindowPicker(ImGuiCaptureArgs* args); // Render a window picker that captures picked window to file specified in file_name.
- void _CaptureWindowsSelector(ImGuiCaptureContext* context, ImGuiCaptureArgs* args); // Render a selector for selecting multiple windows for capture.
- void _SnapWindowsToGrid(float cell_size); // Snap edges of all visible windows to a virtual grid.
- bool _InitializeOutputFile(); // Format output file template into capture args struct and ensure target directory exists.
- bool _ShowEncoderConfigFields(ImGuiCaptureContext* context);
-};
-
-#define IMGUI_CAPTURE_DEFAULT_VIDEO_PARAMS_FOR_FFMPEG "-hide_banner -loglevel error -r $FPS -f rawvideo -pix_fmt rgba -s $WIDTHx$HEIGHT -i - -threads 0 -y -preset ultrafast -pix_fmt yuv420p -crf 20 $OUTPUT"
-#define IMGUI_CAPTURE_DEFAULT_GIF_PARAMS_FOR_FFMPEG "-hide_banner -loglevel error -r $FPS -f rawvideo -pix_fmt rgba -s $WIDTHx$HEIGHT -i - -threads 0 -y -filter_complex \"split=2 [a] [b]; [a] palettegen [pal]; [b] [pal] paletteuse\" $OUTPUT"